当我们的一台虚拟机昨天重新启动时,它以一种奇怪的方式拒绝重新启动。
VM 概述:
- VMWare ESXi 实例上的 Debian 12。
/dev/sda
是一个具有 3 个 GPT 分区的虚拟磁盘(存在于 RAID 主机上),包括:/dev/sda1
:使用 UUID 的 EFI 启动7FAD-A6AB
。/dev/sda2
:使用 UUID 进行主启动647d1330-ecfd-49f2-b83e-d93a57877997
。/dev/sda3
:使用 UUID 加密“sda3_crypt”cdea6a76-3073-4db1-a1d9-649af4b6324a
,包含带有卷组“nexus-backup”的 LVM。/dev/mapper/nexus--backup-root
:根文件系统(EXT4)。/dev/mapper/nexus--backup-var
:“/var”文件系统(EXT4)。
/dev/sdb
是仅用于交换目的的虚拟磁盘(存在于单独的 SSD 上)。/dev/sdb1
:使用UUID加密“sdb1_crypt”dfea69be-3e5d-4cca-b439-603aedad9498
,交换分区。
启动时系统要求我输入 LUKS 密码,输入成功后,启动过程正常开始。似乎等待块存储设备启动超时了。显示了上面的一些 UUID。等待 90 秒后中止,尝试继续,但最终只是永远挂起,因为有些东西加载失败。恢复模式启动显示各种服务启动正常。我没有收到熟悉的救援提示(要求输入 root 密码或按 Control+D)。LVM 可能没有正确启动,但我没有看到错误消息。
不过,我目前还不确定该问题是否与 boot/initramfs 有关。启动过程已经足够深入,可以从 读取和应用网络接口配置/etc/network/interface.d
,并且可以 ping 通,但还不足以显示控制台 TTY 或启动 SSH 守护程序。(CTRL+F1 到 CTRL+F6 不提供 TTY。)
我可以顺利进入实时或救援环境并chroot
进入系统,因为文件系统完全可用,所以我认为没有任何重要的东西损坏或无法修复。进入后,我尝试过:
/etc/crypttab
再三检查和中的内容(特别是 UUID)是否正确/etc/fstab
。update-initramfs -u -k all
update-grub
- 重新配置 grub(通过
dpkg-reconfigure
)。 fsck
,经过强制检查,没有发现任何腐败行为。- 尝试使用注释掉的各种条目进行引导,
/etc/fstab
以便引导过程不应该因为它们而停滞(带有后缀update-initramfs -u -k all
)。
我捕获了启动过程的 2 个简短记录:
内容/etc/crypttab
:
# <target name> <source device> <key file> <options>
sda3_crypt UUID=cdea6a76-3073-4db1-a1d9-649af4b6324a none luks
sdb1_crypt UUID=dfea69be-3e5d-4cca-b439-603aedad9498 none luks,swap
内容/etc/fstab
:
# <file system> <mount point> <type> <options> <dump> <pass>
/dev/mapper/nexus--backup-root / ext4 acl,errors=remount-ro 0 1
# /boot was on /dev/sda2 during installation
UUID=647d1330-ecfd-49f2-b83e-d93a57877997 /boot ext4 defaults 0 2
# /boot/efi was on /dev/sda1 during installation
UUID=7FAD-A6AB /boot/efi vfat umask=0077 0 1
/dev/mapper/nexus--backup-var /var ext4 acl,defaults 0 2
/dev/mapper/sdb1_crypt none swap sw 0 0
这里有人知道可能出了什么问题吗?(在 b4 中完全重新安装)
谢谢 :)
答案1
一些Debian 子版块的优秀用户好心地帮我找到了问题的原因。看来是启动过程没有正确挂载 LVM 卷。这导致“/var”文件系统无法挂载,这可以解释为什么各种服务启动失败。
这里的技巧是使用实时 Debian 实例隐藏“/etc/fstab”,重新启动进入恢复模式,当启动过程失败且没有卷可挂载时,它会显示一个救援 shell。以 root 身份登录后,我可以将其放回原位,重新加载,确保 LVM 卷已激活,挂载所有内容,然后退出救援 shell 以继续正常运行。
基本步骤:
- 启动进入单独的实时系统。
- 安装固定系统的卷。(
cryptsetup luksOpen
,lvscan
,然后mount
) - 可选择
chroot
放入固定系统的根文件系统,否则将挂载路径添加到下一行: mv "/etc/fstab" "/etc/fstab.disabled-tmp"
- 卸载固定系统的卷。(
sync
、、、)umount
lvchange -an
cryptsetup luksClose
- 重新启动进入恢复模式选项。(标准选项不提供救援 shell。)
- 等待救援shell,输入root密码。
lvscan
mount -o remount,rw /
mv "/etc/fstab.disabled-tmp" "/etc/fstab"
systemctl daemon-reload
mount -a
exit
- 系统继续启动并正常运行。
此时,我可以仔细检查所有磁盘是否已正确安装,重建 initramfs,然后重新启动。
为了以防万一,我还部署了额外的 initramfs 脚本确保在引导过程中激活 LVM 卷组。(update-initramfs -u -k all
添加后务必这样做。)