如何在 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 使用「」吐出了一堆關於 UBUNTU 的帖子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 版本,與 --scan 結合使用時,--run 參數似乎會被忽略。根據手冊頁,它應該會啟動所有陣列,即使它們已降級。但相反,任何降級的陣列都會被標記為「非活動」。如果根檔案系統位於這些非活動陣列之一上,則引導程序將停止。

可以修改此腳本,然後使用指令重建 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 缺少磁碟機時,可以在無需幹預的情況下啟動。

相關內容