Ubuntu无法启动,因为lvmetad的问题。

我按照这个教程安装了Ubuntu 15.10。

https://web.archive.org/web/20180530122126/http://thesimplecomputer.info/full-disk-encryption-with-ubuntu

在重新启动电脑后,我进入了grub菜单并选择了Ubuntu。不久之后,我遇到了这个错误:
/run/lvm/lvmetad.socket: connect failed: No such file or directory
WARNING: Failed to connect to lvmetad. Falling back to internal scanning.

这些消息每秒钟都在黑屏上不断增加。过了一会儿,我才能进入initramfs ash控制台。
我做错了什么?

ash控制台还是bash控制台?打错了吗? - Thufir
5个回答

我今天在一台运行Ubuntu 15.10的笔记本电脑上看到了同样的错误,我一直保持更新,但一个月没有重新启动,直到我想测试当前的内核(也就是说,可能有最近的更改)。
无论如何,在我的情况下,根本原因实际上是由于在按照上述教程进行设置时出现了错误导致“缺少”交换分区。如果是这种情况和/或您实际上正在使用lvm,您可能可以跳过下面的第2步。 当然,如果您的系统(或次要数据)分区已损坏或找不到(请参见第3步),您也可能会看到上述错误消息。
第1步:按照上述教程挂载您的系统、引导分区
假设您的(ext2)引导分区是/dev/sdX1,您的(加密的)交换分区是/dev/sdX2,您的(加密的)数据分区是/dev/sdX3,并且您已成功使用cryptsetup luksOpen /dev/sdX3 data解密后,通过挂载它来创建目录/tmp/data; mount /dev/mapper/data /tmp/data。
请注意教程中的绑定挂载,并确保挂载/dev/sdX1,以便您可以从系统分区的/boot目录访问它(这是至关重要的,因为我们必须执行update-initramfs)。
在接下来的步骤中,我们假设您已成功执行了chroot /tmp/data/@ubuntu1510(或者您所挂载的系统分区的名称)。
第二步:摆脱上述错误信息
我正在使用btrfs(正如您可能从提到的子卷名字猜到的那样),因此可以轻松地禁用lvmetad而不会丧失功能:
- 编辑/etc/lvm/lvm.conf并将use_lvmetad=1更改为use_lvmetad=0 - 执行update-initramfs -k $(uname -r) -u ; sync
现在,您可以重新启动,错误消息应该消失。然而,在我的情况下,下一个错误消息[1]指向了上述的潜在问题,所以我们趁机解决一下...
第三步:确保/etc/crypttab指向正确且未损坏的分区
首先,运行sfdisk --list /dev/sdX,并检查你的加密交换分区(在我的情况下是/dev/sdX2)是否没有显示为一个(普通的)交换分区。如果它显示为一个交换分区(就像在我的情况下),这意味着启动时,例如使用救援盘将很可能使用该可用的交换分区,从而覆盖你的cryptsetup相关元数据(密钥和UUID)。
接下来,查看/dev/disk/by-uuid,并将你的加密分区的UUID与/etc/crypttab中包含的UUID进行比较。我猜测此时的情况是:在你的情况下,存在不匹配。
如果专用的加密交换分区在/dev/disk/by-uuid下找不到,那是因为它当前正在被你的救援系统使用。在这种情况下,请执行以下操作:
确保停止使用分区:swapoff -a 重新格式化它:mkfs.ext2 /dev/sdX2(这非常重要,特别是在使用GPT分区时[2],因为它会消除我之前提到的故障。分区在sfdisk列表中显示为“交换”类型的可能原因是您/我在开始设置分区时错误地使用了mkswap /dev/sdX2。) 按照教程加密分区并设置密码;然后,使用cryptsetup打开它并正确重新格式化现在解密的分区(使用类似mkswap /dev/mapper/swap的命令) 确保sfdisk --list /dev/sdX不会将交换分区识别为此类分区(如果是这种情况,请重复上述步骤)
现在,检查/etc/crypttab中列出的UUID是否与/dev/disk/by-uuid下相应加密分区的UUID一致。
再次强调,要使更改永久生效,必须执行如上所示的update-initramfs命令。
如果您满意的话,请确保将所有内容写入磁盘并重新启动系统(无需手动卸载所有内容)。之后,您的问题应该会消失。
[1] 可能是我第一次没有注意到或者第一个错误信息“掩盖”了第二个错误信息;也就是说,在重新启动(使用use_lvmetad=0)之后,我看到了“正在读取所有物理卷。可能需要一些时间...”(多次重复),然后是“警告!/dev/disk/by-uuid/... 不存在。”(值得注意的是,update-initramfs也抱怨缺少一个分区。)
[2] 因为它们的类型是通过分析其内容来推断的,并不是最终由标志/字节指定的(这就是为什么没有简单的方法可以使用[g]parted更改GPT文件系统类型的原因)。

之前提到的教程已经消失了,所以现在这个答案只有一半有用了 :( - codeling
@codeling 嗯,总是可以使用Wayback Machine(记住这个话题相当古老,现在有更新的教程存在):https://web.archive.org/web/20180530122126/http://thesimplecomputer.info/full-disk-encryption-with-ubuntu - Markus Ueberall
没有用_lvmetad - Arrow_Raider

连接到 lvmetad 失败的错误可能是因为磁盘已满。要解决此问题,请从 USB 闪存驱动器启动,挂载满磁盘,删除一些不需要的文件,然后重新启动。我还重新安装了引导系统 - 我不知道是否有必要。

以下是在从 USB 驱动器启动后从终端运行的命令,这些命令解决了我的问题。我使用的是带有全盘加密的标准 Ubuntu 18.04。结果可能因人而异。

  1. 挂载驱动器:

    sudo cryptsetup luksOpen /dev/sda5 sda5_crypt
    sudo vgscan --mknodes
    sudo vgchange -ay
    sudo mount /dev/mapper/ubuntu--vg-root /mnt
    
  2. 删除不需要的文件(cd /mnt/home/your_username ... rm ...

  3. (可能不必要)重新安装引导系统:

    cd /mnt/
    sudo mount /dev/sda1 boot
    for d in dev sys proc run; do sudo mount --bind /$d $d; done
    sudo vi etc/crypttab # 确保第一行使用 "sda5_crypt"
    sudo chroot .
    update-grub
    grub-install /dev/sda
    update-initramfs -u -k all
    exit
    sudo umount dev sys proc run boot
    
  4. 卸载:

    cd /
    sudo umount /mnt
    sudo vgchange -an
    sudo cryptsetup close sda5_crypt
    
  5. 重启:

    sudo reboot
    

我遇到了这个问题,是因为驱动器几乎满了,但通过在 grub 中启动恢复模式,进入 root shell 并删除一些不必要的文件(使用 apt-get clean 和一些 rm 命令),我成功解决了这个问题。 - ntc2
1对于那些处在这个情况下的人,这个方法非常有效。需要注意的是,你的驱动器可能不是/dev/sda5,所以你可能需要运行ls /dev/sda*来查看驱动器列表,然后选择一个。你应该同时修改/dev/sda5 sda5_crypt中的数字,例如改为/dev/sda3 sda3_crypt - nycynik
谢谢!对我有用。 - Juampy NR

这里是Ubuntu 18.04.1 LTS。它在无人看管下运行了几个月,但当我回来时发现键盘无法识别。重启后,我收到了“无法连接到lvmetad”和“无法获取UEFI db列表”的消息。

我安装时没有使用磁盘加密。

UEFI的消息让我感到担忧,因为这是我在一台UEFI计算机上的首次安装,所以我没有经验,而且实际上对其有关用途还不了解。我的问题变得更加复杂,因为我在本来要作为根目录'/'的卷上使用了'lvm'。(事实上,我已经忘记了我第一次是如何做到的!嘿,我年纪大了。)

然而,当机器无法重启时,我搜索解决方案,但没有找到明确的答案。但我注意到了一件事:a)我的EFI分区比某个网站推荐的500MB要小,b)我预留的单独的/boot/分区可能是多余且未使用的。我认为可能是一个无人看管的升级导致某些东西填满了其给定的空间。

我决定重新安装系统,这样做成功了,并且没有对我的/home/目录结构进行任何修改。我还没有检查/etc/目录,但是在此之前我已经备份了它们的副本[1],所以稍后可以检查。/etc/目录非常小。
我还删除了EFI和/boot/分区,并将它们合并为一个更大的EFI分区(>750MB)。
现在系统可以重新启动了,但是有一个错误信息闪过得太快无法阅读,并且没有提供Linux镜像的启动菜单,直接进入Ubuntu系统。我想这方面还需要通过grub来解决。但至少我的文件都恢复了。
[1] 我从USB闪存驱动器中启动了Ubuntu安装程序,并选择了“试用”Ubuntu,这样我就能在选择从桌面上“安装”之前备份/etc和/home目录。

使用mount /dev/mapper/data /tmp/data命令时,我遇到了unknown filesystem type LVM2_member的错误。 - Francesco Boi

我在我的笔记本电脑上调整英特尔驱动程序后遇到了这个问题。我使用了第三方PPA来安装驱动程序,但出现了问题,因为我只有一个显卡,即集成显卡,无法启动。
为了解决这个问题,我进入了恢复模式,移除了第三方PPA并重新安装了驱动程序。
sudo dpkg  --purge --force-all libgl1-mesa-dri
sudo dpkg  --purge --force-all libgl1-mesa
sudo dpkg  --purge --force-all libgl1-mesa-glx:i386

sudo apt-get autoremove
sudo apt-get update

sudo apt-get install --reinstall xserver-xorg-video-intel libgl1-mesa-glx libgl1-mesa-dri xserver-xorg-core
sudo dpkg-reconfigure xserver-xorg


使用 grub 引导进入恢复模式。

谢谢,这也是我的问题。实际上,lvmetad一直都不工作,但驱动程序问题使其显而易见。毕竟,lvmetad根本不需要修复。我只是重新安装了我的视频驱动程序、输入驱动程序和内核,一切都恢复正常了。 - WesternGun

不需要从USB或其他设备启动系统。我遇到了同样的问题,原因是磁盘已经满了100%。下面的解决方案对我有帮助。
  1. 重新启动您的系统。在引导界面上,快速按住Shift键,这将带出GNU GRUB菜单。

  2. 按下'e'键来编辑Ubuntu设置。在此问题中,您可以找到屏幕截图。找到以'linux *'开头的字符串,就像这样:

    linux     /boot/vmlinuz-4-4.0-22-generic root=UUID=43ad24d3-e\
    c5b-44ee-a099-a88eb9520989 ro  quiet splash $vt_handoff
    

    删除:

    ro  quiet splash $vt_handoff
    

    并添加:

    init=/bin/bash
    

    准备就绪后,按下Ctrl+xF10进行启动。

  3. 根分区以只读方式挂载。要将其挂载为读写模式,请输入以下命令

    mount -o remount,rw /
    
  4. 找出出现了什么问题:

    df -hT
    

这是唯一对我有效的解决方案(不是nvidia问题,也不是内核映像问题...)。我无法完成第三步,因为当我在写作时,错误消息出现在根终端中。我重新启动了计算机,现在一切都正常了(手指交叉)。谢谢! - ifrit