如果從陣列中刪除組件 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
。
- 將腳本複製到本地覆蓋目錄
mdadm --run
如果第一次嘗試失敗,請使用一些額外的行修補腳本,以便在每個陣列上單獨執行。- 更新 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 缺少磁碟機時,可以在無需幹預的情況下啟動。