/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 卷无法加载。
我尝试过
lvm
在 initramfs shell 中运行会返回有关符号查找的相同错误。删除
/usr/local/lib/libreadline.so.5
并运行将会导致它抛出不可用的lvm
错误。libreadline.so.5
vgchange
不是有效的命令(我认为它需要lvm
并且应该使用它来运行lvm vgchange -ay
?)
我猜测我应该尝试重新构建启动映像以包含正确的 副本lvm
。但是我不确定该怎么做(我应该启动 14.04 实时磁盘并安装lvm2
,还是应该执行更多步骤?我如何修改 initramfs 并修复它?)而且我担心我会弄乱现有的 LVM 配置。我该怎么做?谢谢!
答案1
在 liveCD 中进行一些修改后,我解决了该问题,如下所示:
从 Live CD 和 Live CD 启动
sudo apt-get install lvm2
。从中检查 LV
lvdisplay
,并从中找出启动分区lsblk
使用以下方式挂载 LV
lvchange -a y
挂载根 LV 和启动分区,例如
sudo mkdir /new
sudo mount /dev/mapper/my-root /new
sudo mount /dev/sda1 /new/boot
chroot
并从那里/new
重新安装。lvm2
转至
/usr/local/lib/
消除(或移动)libreadline.so.5
。ldconfig
尝试从 chroot 运行,您将看到有关不可用的
lvm
错误,而不是通常的错误。/var
libreadline.so.5
update-initramfs -u -v
。您将看到libreadline.so.5
不再从 复制/usr/local/lib
,而是从 复制x86_64
!这是正确的共享库。重新启动。
lvm
现在应该在 initramfs 中正确加载,因此它会成功挂载根分区,您现在可以启动了。