如何在 16.04LTS 中启用降级 RAID1 启动?

如何在 16.04LTS 中启用降级 RAID1 启动?

在以前的 ubuntu 版本中,添加BOOT_DEGRADED=true/etc/initramfs-tools/conf.d/mdadm允许系统在根文件系统位于降级阵列时自动启动。这在 16.04 LTS 中似乎不再起作用。

文档(https://help.ubuntu.com/lts/serverguide/advanced-installation.html) 似乎已经过时;sudo dpkg-reconfigure mdadm不再要求允许降级启动,bootdegraded=true内核参数似乎也不再起作用。当根文件系统阵列降级时,系统始终会启动到 initramfs。从那里,mdadm -IRs允许系统启动。

当根文件系统位于 16.04LTS 中的降级 RAID1 阵列上时,如何启用自动启动?

答案1

提到的错误出现在 mdadm 3.3-2ubuntu7 中,并已在 3.4-2 中修复。

yakkety (16.10) 3.4-4 的最新 mdadm 版本已经包含修复程序并可用于 16.10,但还不适用于 16.04LTS(暂时还不适用)。

因此我手动升级了我的 16.04LTS 的 mdadm:

wget http://launchpadlibrarian.net/275652884/mdadm_3.4-4_amd64.deb
sudo dpkg -i mdadm_3.4-4_amd64.deb

为了验证我

  • 关闭计算机
  • 拔掉其中一个磁盘/SSD
  • 打开电脑

观察控制台:从降级的 RAID 阵列启动

漏洞: https://bugs.launchpad.net/ubuntu/+source/mdadm/+bug/1635049 https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=784070

答案2

看来根本原因是/usr/share/initramfs-tools/scripts/local-top/mdadm脚本缺失——在 Debian-8 上它包含在mdadm包中,但在 Ubuntu-16.04 的同一个包中丢失了 ;-(

因此,在我创建了它的 dirty-hack 版本并重新创建之后initramfs- 我的测试 Ubuntu-16.04 LTS 服务器能够使用 RAID1 阵列中的唯一第二个 HDD 完全启动。

#!/bin/sh
# 2016-07-13 [email protected] - missed mdadm script for Ubuntu-16.04
# see debian8_host:/usr/share/initramfs-tools/scripts/local-top/mdadm for full version

MDADM=/sbin/mdadm 
. /scripts/functions

echo "===>"
cat /proc/mdstat
echo "===>"
log_begin_msg "Assembling all MD arrays"
if $MDADM --assemble --scan --run --auto=yes
then
  log_success_msg "assembled all arrays."
else
  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
      log_success_msg "started $dev"
    else
      log_failure_msg "failed to start $dev"
    fi
  done
fi
log_end_msg
echo "===>"
cat /proc/mdstat
echo "===>"

sleep 5

# TODO: run mdadm --readwrite /dev/mdN
# if array is in 'auto-read-only' mode

答案3

我在使用 16.04 时遇到了同样的问题,RAID 阵列简单地拒绝在降级模式下激活。

这是一个简单的解决方法:

  1. 创建新文件:/etc/initramfs-tools/scripts/init-premount/delay_mounting (记得设置 +x)

添加

睡眠 20(或你喜欢的任何秒数)

  1. 创建新文件:/etc/initramfs-tools/scripts/local-top/mdadm(记得设置 +x)

添加以下内容(强制启动阵列,如果您有 /dev/md0、/dev/md1 和 /dev/md2)

mdadm --运行 /dev/md0
mdadm --运行 /dev/md1
mdadm --运行 /dev/md2

然后

更新-initramfs -k all -u,那么一切就绪了。

请注意,14.04 只需要 1),但同时执行这两项操作也没有坏处。除此之外,您可能会看到一些警告消息,例如:

mdadm:无法运行阵列 /dev/md0:设备或资源繁忙

这是无害的,因为它只说因为 /dev/md0 处于活动状态,所以您绝对可以编写更智能的脚本,仅在需要时执行--run。

答案4

这里的其他答案有解决问题的变通方法,但这是 Ubuntu 的一个错误,应该修复。以下是错误:https://bugs.launchpad.net/ubuntu/+source/mdadm/+bug/1635049

之前已经修复了这个问题:https://wiki.ubuntu.com/ReliableRaid

相关内容