昨天运行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_crypt
luks 卷,但当我更新 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
设置错误引起的)。但是,这还不足以调试问题)
- 这可能是由于未映射加密卷。这意味着,如果您正在使用加密的 lvm 物理组(默认加密的 ubuntu 安装),则
cryptsetup
initramfs 没有要挂载的卷lvm
- 对于一般调试这类问题,你需要了解 initramfs 和 update-initramfs(谷歌搜索,然后我会插入 stackexchange 不允许我的链接)
- 要获得更多调试输出,您可以在 grub 中编辑启动选项(通过按下
e
有效选项),您应该删除 splash 和 quiet 选项。如果这还不够,您可以break=premount
按照此处所述使用:https://wiki.debian.org/InitramfsDebug,进入交互式 shell 并查看发生了什么。这里导致问题的脚本名为 cryptroot。 /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 放入预安装脚本中。
你的情况可能有所不同,但我认为我的经验可以提供一些线索。