Bob*_*Bob 6 linux kernel raid1 degraded
如果您从阵列中移除组件 HDD,它会掉入“(initramfs)”下的“busy box”外壳,并在 RAID1 阵列变为“非活动状态”时显示类似于“无法安装根设备”的内容。
可以使用以下方法启动它:
(initramfs): mdadm --run /dev/md0
(initramfs): exit
Run Code Online (Sandbox Code Playgroud)
之后,它使用启动的 RAID1 正常启动(文件系统在 RAID1 阵列上),并且将继续正常启动,直到您移除另一个驱动器(在这种情况下它会完全相同)。
Google 使用“ BOOT_DEGRADED=true ”吐出了一堆关于 UBUNTU 的帖子,但这对 DEBIAN 不起作用。
还有一篇关于使用“ md-mod.start_dirty_degraded=1 ”作为内核映像的引导参数的帖子。我试过在 GRUB 菜单选项中传递它,但无济于事。
可能有一些东西可以解释它,但我是一个新手来理解:(
有任何想法吗?
小智 9
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
Run Code Online (Sandbox Code Playgroud)
随着 Debian Jessie 附带的 mdadm 版本,--run 参数在与 --scan 结合使用时似乎被忽略。根据手册页,即使它们降级,它也应该激活所有阵列。但是,任何降级的阵列都被标记为“非活动”。如果根文件系统位于这些非活动阵列之一上,则引导过程将停止。
可以修改此脚本,然后使用命令重建 initramfs update-initramfs -u。
mdadm --run如果第一次尝试失败,请使用一些额外的行修补脚本以单独在每个阵列上运行。以下命令将执行前面的步骤。在复制之前确认您还没有 /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
Run Code Online (Sandbox Code Playgroud)
使用此更新的 initramfs,当包含根文件系统的 RAID1 缺少驱动器时,无需干预即可启动。