我按照本教程安装了 Ubuntu 15.10:
重启电脑后,我进入 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 控制台了。
我究竟做错了什么?
答案1
今天,我在运行 Ubuntu 15.10 的笔记本电脑上看到了同样的错误,我始终保持最新版本,但一个月都没有重新启动,直到我想测试当前内核(即,可能有最近的变化)。
无论如何,我发现,在我的情况下,根本原因实际上是由于按照上述教程进行设置时出现故障而导致交换分区“丢失”。如果是这种情况和/或您实际上正在使用lvm
,您可能可以跳过下面的步骤 2。当然,如果您的系统(或辅助数据)分区已损坏或无法找到(请参阅步骤 3),您也可能会看到上述错误消息。
步骤 1:按照上述教程安装系统、启动分区
假设您的(ext2)启动分区是 /dev/sdX1,您的(加密)交换分区是 /dev/sdX2,您的(加密)数据分区是 /dev/sdX3,并且您已使用 成功解密后者cryptsetup luksOpen /dev/sdX3 data
,然后挂载它:mkdir /tmp/data; mount /dev/mapper/data /tmp/data
。
注意教程中的绑定挂载,并确保挂载 /dev/sdX1,以便您可以从系统分区的 /boot 目录访问它(这很关键,因为我们必须执行update-initramfs
)。
下面,我们假设您已成功执行chroot /tmp/data/@ubuntu1510
(或无论您安装的系统分区的名称是什么)
第 2 步:消除上述错误信息
我正在使用 btrfs(您可能已经从提到的子卷名称中猜到了),因此可以轻松禁用 lvmetad,如下所示,而不会丢失功能:
- 编辑 /etc/lvm/lvm.conf 并更改
use_lvmetad=1
为use_lvmetad=0
- 执行
update-initramfs -k $(uname -r) -u ; sync
现在轮到你可以重新启动后错误信息就会消失。然而,就我而言,下一个错误消息[1] 指出了我上面提到的根本问题,因此,当我们这样做时......
步骤 3:确保 /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 列表中显示为“swap”类型的原因可能是您/我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] 因为它们的类型是通过分析其内容推断出来的,而不是最终由标志/字节指定的(这就是为什么没有简单的方法来更改 GPT 文件系统类型[g]parted
)。
答案2
错误Failed to connect to lvmetad
能发生这种情况是因为磁盘已满 100%。要解决此问题,请从 USB 拇指驱动器启动,安装已满的磁盘,删除一些不需要的文件,然后重新启动。我还重新安装了启动系统 - 我不知道这是否有必要。
这些命令帮我解决了问题,从 USB 驱动器启动后从终端运行。我有带全驱动器加密的原版 Ubuntu 18.04。YMMV。
安装驱动器:
sudo cryptsetup luksOpen /dev/sda5 sda5_crypt sudo vgscan --mknodes sudo vgchange -ay sudo mount /dev/mapper/ubuntu--vg-root /mnt
删除不需要的文件(
cd /mnt/home/your_username
...rm ...
)(可能没有必要)重新安装启动系统:
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 # make sure first line uses "sda5_crypt" sudo chroot . update-grub grub-install /dev/sda update-initramfs -u -k all exit sudo umount dev sys proc run boot
卸载:
cd / sudo umount /mnt sudo vgchange -an sudo cryptsetup close sda5_crypt
重启:
sudo reboot
答案3
这里是 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,然后从桌面选择“安装”。
答案4
没有必要从 USB 或其他设备启动系统。我遇到了同样的问题,原因也是一样 - 因为磁盘已满。下一个解决方案对我有帮助。
重新启动系统。在 BIOS 中,快速按住 Shift 键,这将调出 GNU GRUB 菜单。
按“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+x或F10启动。
根分区以只读方式挂载。要以读/写方式挂载,请输入命令
mount -o remount,rw /
找出哪里出了问题:
df -hT