启动时 LVM 出现错误,导致退回到 initramfs

启动时 LVM 出现错误,导致退回到 initramfs

/sbin/lvm我最近将 Ubuntu 从较旧的 LTS 版本(12.04)更新到 14.04 LTS,重新启动后,ubuntu 无法加载并显示错误:

There appears to be one or more degraded LVM volumes, and your root device may 
depend on the LVM volumes being online. 
One or more of the following LVM volumes are degraded:
/sbin/lvm: symbol lookup error: /usr/local/lib/libreadline.so.5: undefined symbol: PC
Gave up waiting for root device...
ALERT! /dev/mapper/my-server-root does not exist. Dropping to a shell!

似乎/sbin/lvm:符号查找错误:/usr/local/lib/libreadline.so.5:未定义符号:PC是罪魁祸首,我认为它/sbin/lvm没有正确链接到适当的库,导致启动映像根本无法运行 LVM,因此 LVM 卷无法加载。

我尝试过

  1. lvm在 initramfs shell 中运行会返回有关符号查找的相同错误。

  2. 删除/usr/local/lib/libreadline.so.5并运行将会导致它抛出不可用的lvm错误。libreadline.so.5

  3. vgchange不是有效的命令(我认为它需要lvm并且应该使用它来运行lvm vgchange -ay?)

猜测我应该尝试重新构建启动映像以包含正确的 副本lvm。但是我不确定该怎么做(我应该启动 14.04 实时磁盘并安装lvm2,还是应该执行更多步骤?我如何修改 initramfs 并修复它?)而且我担心我会弄乱现有的 LVM 配置。我该怎么做?谢谢!

答案1

在 liveCD 中进行一些修改后,我解决了该问题,如下所示:

  1. 从 Live CD 和 Live CD 启动sudo apt-get install lvm2

  2. 从中检查 LV lvdisplay,并从中找出启动分区lsblk

  3. 使用以下方式挂载 LVlvchange -a y

  4. 挂载根 LV 和启动分区,例如

    sudo mkdir /new

    sudo mount /dev/mapper/my-root /new

    sudo mount /dev/sda1 /new/boot

  5. chroot并从那里/new重新安装。lvm2

  6. 转至/usr/local/lib/消除(或移动)libreadline.so.5

  7. ldconfig

  8. 尝试从 chroot 运行,您将看到有关不可用的lvm错误,而不是通常的错误。/varlibreadline.so.5

  9. update-initramfs -u -v。您将看到libreadline.so.5不再从 复制/usr/local/lib,而是从 复制x86_64!这是正确的共享库。

  10. 重新启动。lvm现在应该在 initramfs 中正确加载,因此它会成功挂载根分区,您现在可以启动了。

相关内容