重新启动服务器后,我收到以下错误消息:
Begin: Running /scripts/init-premount … done.
Begin: Mounting root file system …
Begin: Running /scripts/local-top …
Volume group “ubuntu-vg” not found
Cannot process volume group ubuntu-vg
Begin: Running /scripts/local-premount …
...
Begin: Waiting for root file system …
Begin: Running /scripts/local-block …
mdadm: No arrays found in config file or automatically
Volume group “ubuntu-vg” not found
Cannot process volume group ubuntu vg
mdadm: No arrays found in config file or automatically # <-- approximately 30 times
mdadm: error opening /dev/md?*: No such file or directory
done.
Gave up waiting for root file system device.
Common problems:
- Boot args (cat /proc/cmdline)
- Check rootdelay= (did the system wait long enough?)
- Missing modules (cat /proc/modules: ls /dev)
ALERT! /dev/mapper/ubuntu--vg-ubuntu--lv does not exist. Dropping to a shell!
系统下降到 initramfs shell (busybox),其中lvm vgscan
找不到任何卷组并且ls /dev/mapper
仅显示一个条目control
。
当我启动实时 SystemRescueCD 时,可以找到卷组,并且 LV 可以像往常一样在/dev/mapper/ubuntu--vg-ubuntu--lv
.我能够安装它并且 VG 设置为活动状态。所以 VG 和 LV 看起来很好,但在启动过程中似乎有些东西坏了。
Ubuntu 20.04 服务器,LVM 设置在带有 4 个 SSD 的硬件 raid1+0 之上。硬件 RAID 控制器是固件版本为 3.00 的 HPE Smart Array P408i-p SR Gen10 控制器。 RAID 1+0 配置中的四个 HPE SSD 型号 MK001920GWXFK。服务器型号为 HPE Proliant DL380 Gen10。
没有软件袭击,没有加密。
有任何提示如何查找错误并解决问题吗?
编辑我:
在哪里
- /dev/sdc1 是 /boot/efi
- /dev/sdc2 是 /boot
- /dev/sdc3 是 PV
从较旧的内核版本启动一次可以正常工作,直到执行apt update && apt upgrade
.升级后旧内核也有同样的问题。
编辑二:
在模块中/proc/modules
我可以找到以下条目:
smartpqi 81920 0 - Live 0xffffffffc0626000
lvm pvs
initramfs shell 中没有输出。
输出为lvm pvchange -ay -v
No volume groups found.
输出为lvm pvchange -ay --partial vg-ubuntu -v
PARTIAL MODE. Incomplete logical volumes will be processed.
VG name on command line not found in list of VGs: vg-ubuntu
Volume group "vg-ubuntu" not found
Cannot process volume group vg-ubuntu
还有第二个 RAID 控制器,其 HDD 连接到另一个 PCI 插槽;相同型号 P408i-p SR Gen10。在此 RAID 之上配置了一个名为“cinder-volumes”的卷组。但是在initramfs中也找不到这个VG。
编辑三:
这里有一个关联从根 FS 到请求的文件:
- /mnt/var/log/apt/term.log
- /mnt/etc/initramfs-tools/initramfs.conf
- /mnt/etc/initramfs-tools/update-initramfs.conf
编辑四:
在 SystemRescueCD 中,我安装了 LV /
(根),/boot
并/boot/efi
chroot 到 LV /。所有已安装的卷都剩余足够的磁盘空间(已用磁盘空间< 32%)。
的输出update-initramfs -u -k 5.4.0.88-generic
是:
update-initramfs: Generating /boot/initrd.img-5.4.0.88-generic
W: mkconf: MD subsystem is not loaded, thus I cannot scan for arrays.
W: mdadm: failed to auto-generate temporary mdadm.conf file
该图像/boot/initrd.img-5.4.0-88-generic
具有更新的最后修改日期。
重启后问题依然存在。initrd
grub 菜单配置中的引导参数/boot/grub/grub.cfg
指向/initrd.img-5.4.0-XX-generic
,其中 XX 对于每个菜单项都是不同的,即 88、86 和 77。
在/boot
目录中我可以找到不同的图像(?)
vmlinuz-5.4.0-88-generic
vmlinuz-5.4.0-86-generic
vmlinuz-5.4.0-77-generic
该链接/boot/initrd.img
指向最新版本/boot/initrd.img-5.4.0-88-generic
。
编辑五:
由于任何措施都没有达到预期的效果,而且挽救系统的努力太大,我不得不彻底重建服务器。
答案1
我有一个非常相似的问题。在安装新内核失败后(主要是因为/boot
分区空间不足),我手动更新了 initramfs,重新启动后,initramfs 不会提示加密分区的解密过程。我收到了类似的错误Volume group “vg0” not found
和 initramfs 提示,它类似于终端,但功能有限。
我的问题得到了解决:
- 释放启动分区中的空间。
- 安装
cryptsetup-initramfs
.
对于第 1 步,我使用了这篇文章中的配方来删除旧内核:https://askubuntu.com/a/1391904/1541500。关于步骤 1 的说明:如果您无法启动到任何较旧的内核(就像我的情况一样),则在执行命令后,您晚上需要将这些步骤作为步骤 2(Live CD 会话)的一部分执行chroot
。
对于第 2 步,我从 Live CD 启动并打开一个终端。然后我安装了系统,安装了缺少的软件包并提示重新安装最后一个内核(它会自动更新initramfs和grub cfg)。
下面我列出了在步骤 2 的 Live CD 会话终端中使用的命令,以便修复系统。
就我而言,我有以下分区:
/dev/sda1
与/boot/efi
fat32
/dev/sda2
与/boot
ext4
/dev/sda3
与vg0
-lvm2
> 这是我的加密分区,以及我的 kubuntu 安装。
另外值得一提的是,我的加密分区列于CryptDisk
中/etc/crypttab
。为了使用 解密分区,此名称是必需的cryptsetup luksOpen
。解密后,vg0
有 3 个分区:root
、home
和swap
。
现在回到在 LIVE CD 终端中运行的命令:
sudo cryptsetup luksOpen /dev/sda3 CryptDisk # open encrypted partition
sudo vgchange -ay
sudo mount /dev/mapper/vg0-root /mnt # mount root partition
sudo mount /dev/sda2 /mnt/boot # mount boot partition
sudo mount -t proc proc /mnt/proc
sudo mount -t sysfs sys /sys
sudo mount -o bind /run /mnt/run # to get resolv.conf for internet access
sudo mount -o bind /dev /mnt/dev
sudo chroot /mnt
apt-get update
apt-get dist-upgrade
apt-get install lvm2 cryptsetup-initramfs cryptsetup
apt-get install --reinstall linux-image-5.4.0-99-generic linux-headers-5.4.0-9 9-generic linux-modules-5.4.0-99-generic linux-tools-5.4.0-99-generic
成功重新启动后,我用update-initramfs -c -k all
.
答案2
由于使用较旧的内核版本启动后问题就消失了,但在升级后又出现了,我认为您可能不小心切换了内核风格:请参阅https://wiki.ubuntu.com/Kernel/LTSEnablementStack更多细节。
基本上,Ubuntu 20.04 可能使用三个版本的 Linux 内核之一:
- Ubuntu 20.04 版本的正式发布(GA):metapackage
linux-generic
- OEM 特殊版本:metapackage
linux-oem-20.04
- 长期支持启用/硬件启用 (HWE) 内核版本:metapackage
linux-generic-hwe-20.04
您的硬件可能太新,需要 OEM 或 HWE 内核。但如果系统最初安装了“错误”的内核,然后手动安装了正确的内核,而没有安装相应的元包,那么现在的更新机制可能会默认安装GA系列的最新内核,其smartpqi
驱动程序对于您的硬件来说可能太旧了。
正如 paladin 在评论中所建议的,您可能需要从 SystemRescueCD 启动并查看/var/log/apt/term.log
系统中的 来找出更新中被替换的确切内核软件包版本。
一旦您知道了正确的内核风格,您可以再次尝试启动菜单(如果它仍然包含可以运行的旧内核版本),或者从 SystemRescueCD 启动,将根 LV 和 chroot 挂载到其中,挂载任何其他必要的文件系统,然后安装最新的内核包正确的味道,然后重新启动。
如果系统运行得令您满意,那么您应该删除与“错误”内核风格相关的元包(如果安装了的话):apt
每当有新的内核更新可用时,这些元包将直接选择内核风格。
如果内核风格最终被证明是正确的,那么事情可能会更简单,比如磁盘空间不足,无法update-initramfs
为新内核创建新的 initramfs 文件。
有一个简单的修复方法:首先释放一些磁盘空间(清理apt
缓存apt clean
可能会派上用场),然后运行update-initramfs -u -k version-of-newest-kernel-package
以重新创建 initramfs 文件。您可能希望对当前 initramfs 失败的任何内核版本重复此命令,只是为了给您更多可行的引导选项,以防将来出现更多问题。
答案3
我前段时间遇到过类似的问题。我在设置中添加了另一个 LVM 卷,并且意外地将我的 ubuntu-vg 重命名为新卷(执行命令时混乱了)。
解决方案是通过 USB 可启动磁盘启动并将有故障的 vg 重命名回来。我遵循的步骤是:
使用 Live Linux USB Open 终端启动并输入以下内容: 2.1 sudo vgdisplay --> 显示设置中所有 vgs 的列表
2.2 识别受到干扰或者包含主FS的vg
2.3 sudo vgrename <错误名称> ubuntu-vg
完成上述操作后,正常关机,然后重新启动。 grub 将看到该卷并正常加载。