Debian 12:特定虚拟机无法正常启动

Debian 12:特定虚拟机无法正常启动

当我们的一台虚拟机昨天重新启动时,它以一种奇怪的方式拒绝重新启动。

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 以继续正常运行。

基本步骤:

  1. 启动进入单独的实时系统。
  2. 安装固定系统的卷。(cryptsetup luksOpenlvscan,然后mount
  3. 可选择chroot放入固定系统的根文件系统,否则将挂载路径添加到下一行:
  4. mv "/etc/fstab" "/etc/fstab.disabled-tmp"
  5. 卸载固定系统的卷。(sync、、、)umountlvchange -ancryptsetup luksClose
  6. 重新启动进入恢复模式选项。(标准选项不提供救援 shell。)
  7. 等待救援shell,输入root密码。
  8. lvscan
  9. mount -o remount,rw /
  10. mv "/etc/fstab.disabled-tmp" "/etc/fstab"
  11. systemctl daemon-reload
  12. mount -a
  13. exit
  14. 系统继续启动并正常运行。

此时,我可以仔细检查所有磁盘是否已正确安装,重建 initramfs,然后重新启动。

为了以防万一,我还部署了额外的 initramfs 脚本确保在引导过程中激活 LVM 卷组。(update-initramfs -u -k all添加后务必这样做。)

相关内容