无法启动:“mdadm:未找到创建组磁盘”

无法启动:“mdadm:未找到创建组磁盘”

昨天运行apt-get upgrade并关闭后,我无法再启动 Ubuntu 15。

我在启动过程中看到的最后几行是:

Begin: Running /scripts/init-premount ... done.
Begin: Mounting root file system ... Begin: Running /scripts/local-top ... done.

我的硬盘已加密,因此通常我会在此处收到密码提示。但是,过了一会儿,我只收到:

mdadm: CREATE group disk not found

此消息不断重复,我无法启动。恢复模式也是如此。

我找到了一些关于此错误的线索,但尚未找到解决方案。我该如何诊断和修复此问题?

谢谢你!

答案1

此错误是由查找并挂载根 fs 的 initramfs 脚本生成的。

我以前也遇到过此消息,原来是由于从 live cd 更新 initramfs 引起的。

问题是我有一个加密的根,当从 live cd 打开 luks 卷时,我没有使用与我的 crypttab 中相同的名称。

因此,我启动了 Live CD 并执行了以下操作:

cryptsetup luksOpen /dev/md1 md1
vgchange -ay
mount /dev/vgmain/lvroot /mnt/custom
<... mount dev et. al ...>
chroot /mnt/custom
<... fix something ...>
update-initramfs -u
exit
umount /mnt/custom && vgchange -an && cryptsetup luksClose md1

他们update-initramfs -u确实发出过警告cryptsetup: WARNING: invalid line in /etc/crypttab -,但起初我并不认为这很重要。

经过几次失败的启动尝试后,我意识到:我的 crypttab 有md1_cryptluks 卷,但当我更新 initramfs 时,它看到了,md1所以就用了那个。在启动脚本中,md1没有 luks 卷可用。

因此我再次启动了我的 livecd 并更正了它:

cryptsetup luksOpen /dev/md1 md1_crypt
vgchange -ay
mount /dev/vgmain/lvroot /mnt/custom
<... mount dev et. al ...>
chroot /mnt/custom
update-initramfs -u
exit
umount /mnt/custom
vgchange -an
cryptsetup luksClose md1_crypt

我查看了 initramfs-tools 脚本,但找不到出错的确切位置,因此我认为这只是 cryptsetup、mdadm 和 lvm 之间的一些奇怪的交互。

在另一台 Debian 主机上,我遇到了类似的问题*,只是这次没有涉及 crypttools 或 lvm,我能够通过将我的设备路径更改为 来解决它mdadm.conf/dev/md/n/dev/mdn这种情况下,问题仅在阵列重建时出现,而不是在一切正常时出现。

也许更熟悉 initramfs-tools 内部工作原理的人可以解决这个问题。

incrementally starting raid arrays*几分钟后,Debian 主机也会显示类似的消息CREATE group disk not found

答案2

国民生产总值的回答非常好,确实为我指明了正确的方向(我的问题是由cryptroot设置错误引起的)。但是,这还不足以调试问题)

  1. 这可能是由于未映射加密卷。这意味着,如果您正在使用加密的 lvm 物理组(默认加密的 ubuntu 安装),则cryptsetupinitramfs 没有要挂载的卷lvm
  2. 对于一般调试这类问题,你需要了解 initramfs 和 update-initramfs(谷歌搜索,然后我会插入 stackexchange 不允许我的链接)
  3. 要获得更多调试输出,您可以在 grub 中编辑启动选项(通过按下e有效选项),您应该删除 splash 和 quiet 选项。如果这还不够,您可以break=premount按照此处所述使用:https://wiki.debian.org/InitramfsDebug,进入交互式 shell 并查看发生了什么。这里导致问题的脚本名为 cryptroot。
  4. /usr/share/initramfs-tools/hooks要了解 initramfs 脚本生成过程中发生了什么,您可以查看和中的文件/usr/share/initramfs-tools/scripts,前者在完整工作系统上运行以生成后者的配置。您可以尝试set -x向这些脚本添加标志以进行调试。

在我的特定情况下,我无法从启动盘更正此问题,chroot因为lvm工具在监狱内没有返回正确的结果。我需要安装一些东西来解决这个问题。我还必须确保 luks 卷映射了正确的名称(它需要与中的值匹配crypttab,而有用的图形界面选择了一个相当糟糕的名称。

cryptsetup luksOpen /dev/md1 md1_crypt
mount --bind /sys /mnt/encrypted-root/sys
mount --bind /dev /mnt/encrypted-root/dev
mount --bind /proc /mnt/encrypted-root/proc
chroot /mnt/encrypted-root
update-inintramfs -c -k all

答案3

我认为这与 mdadm 构建磁盘阵列时的竞争条件有关。您可能不得不在预安装脚本中设置延迟,以允许构建所有阵列。我为 /boot 设置了一个嵌套 RAID,因为 grub 无法处理 RAID10,而第二级镜像 RAID1 无法由 mdadm 正常构建。所以我不得不将 mdadm --assemble /dev/md/boot 放入预安装脚本中。

你的情况可能有所不同,但我认为我的经验可以提供一些线索。

相关内容