Debian 8.0.0 で起動時に Degraded Software RAID1 を自動的に起動するにはどうすればよいですか?

Debian 8.0.0 で起動時に Degraded Software RAID1 を自動的に起動するにはどうすればよいですか?

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

以下を使用して起動できます:

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

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

Googleは「BOOT_DEGRADED=true「しかし、これは DEBIAN では機能しません。」

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

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

何か案は?

答え1

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 のバージョンでは、--run パラメータは --scan と組み合わせて使用​​した場合無視されるようです。マニュアル ページによると、アレイが劣化していてもすべてのアレイをアクティブ化するはずです。しかし、代わりに、劣化したアレイはすべて「非アクティブ」としてマークされます。ルート ファイル システムがこれらの非アクティブなアレイの 1 つにある場合、ブート プロセスは停止します。

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

  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 にドライブがない場合でも、介入なしで起動できるようになります。

関連情報