web-dev-qa-db-ja.com

起動時にDebian 8.0.0で劣化したソフトウェアRAID1を自動起動する方法は?

RAID1アレイが「非アクティブ」になると、アレイからコンポーネントHDDを削除すると、「(initramfs)」の下の「ビジーボックス」シェルにドロップされ、「ルートデバイスをマウントできません」と同様のメッセージが表示されます。

それを使用してそれを開始することが可能です:

(initramfs): mdadm --run /dev/md0
(initramfs): exit

その後、起動したRAID1(ファイルシステムはRAID1アレイ上にあります)を使用して通常どおりに起動し、別のドライブを削除するまで(通常はまったく同じように)正常に起動し続けます。

グーグルは「BOOT_DEGRADED = true」を使用してUBUNTUに関するたくさんの投稿を吐き出しましたが、それはDEBIANでは機能しません。

カーネルイメージへのブート引数として「md-mod.start_dirty_degraded = 1」の使用に関する投稿 もあります。私はそれをGRUBメニューオプションで渡してみましたが、役に立ちませんでした。

それを説明する何か があるかもしれませんが、私は理解するのが初心者です:(

何か案は?

6
Bob

Initramfsは/ scripts/local-top/mdadmを実行してRAIDを処理します。そのスクリプトにはステートメントです

if $MDADM --assemble --scan --run --auto=yes${extra_args:+ $extra_args};
  then
    verbose && log_success_msg "assembled all arrays."
  else
    log_failure_msg "failed to assemble all arrays."
fi

Debian Jessieに同梱されているmdadmのバージョンでは、-scanと組み合わせて使用​​すると--runパラメータが無視されるようです。マニュアルページによると、劣化した場合でもすべてのアレイをアクティブ化するとされています。ただし、代わりに、機能が低下したアレイは「非アクティブ」としてマークされます。ルートファイルシステムがこれらの非アクティブなアレイのいずれかにある場合、起動プロセスは停止します。

このスクリプトを変更してから、update-initramfs -uコマンドを使用してinitramfsを再構築することができます。

  1. スクリプトをローカルオーバーライドディレクトリにコピーします。
  2. 最初の試行が失敗した場合に各アレイで個別にmdadm --runを実行するために、いくつかの追加の行でスクリプトにパッチを適用します。
  3. Initramfsを更新します。

次のコマンドは、前の手順を実行します。/etc/initramfs-tools/scripts/local-top/mdadmファイルがないことを確認してから、その上にコピーしてください。

cd /etc/initramfs-tools/scripts/local-top
cp /usr/share/initramfs-tools/scripts/local-top/mdadm .
patch --verbose --ignore-whitespace <<'EndOfPatch'
--- mdadm
+++ mdadm
@@ -76,7 +76,15 @@
   if $MDADM --assemble --scan --run --auto=yes${extra_args:+ $extra_args}; then
     verbose && log_success_msg "assembled all arrays."
   else
-    log_failure_msg "failed to assemble all arrays."
+    log_warning_msg "failed to assemble all arrays...attempting individual starts"
+    for dev in $(cat /proc/mdstat | grep md | cut -d ' ' -f 1); do
+      log_begin_msg "attempting mdadm --run $dev"
+      if $MDADM --run $dev; then
+        verbose && log_success_msg "started $dev"
+      else
+        log_failure_msg "failed to start $dev"
+      fi
+    done
   fi
   verbose && log_end_msg

EndOfPatch
update-initramfs -u

この更新されたinitramfsを使用すると、ルートファイルシステムを含むRAID1にドライブがない場合でも、介入なしで起動できます。

9
Mark Neyhart