如何在 Debian 8.0.0 下启动时自动启动降级软件 RAID1?

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

  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
Run Code Online (Sandbox Code Playgroud)

使用此更新的 initramfs,当包含根文件系统的 RAID1 缺少驱动器时,无需干预即可启动。

  • 确认在 Jessie 更新 1 (8.1) 中仍然如此。我几个小时都在追这个同样的问题,@Mark Neyhart,你先生是一位绅士和学者 (2认同)