再增加一个物理卷并扩大逻辑卷后,grub失败

use*_*447 2 grub lvm luks

几年前,我在我的 500 GiB 硬盘上安装了 Debian。在安装过程中,我选择加密文件系统。所以安装程序创建了一个小的未加密启动分区(我猜 grub 配置保留在那里)和一个大的 LUKS 加密分区。这个大型加密分区是一个物理卷,它是卷组的唯一成员,在该卷组上创建了两个逻辑卷——一个用于交换,另一个用于其他所有内容。几年来,在这种配置下一切都很好,我没有想太多。

几天前,我购买了新的 2 TiB 硬盘并决定将我的系统转移到它。我将旧硬盘驱动器复制到新硬盘驱动器 - 一点一点,简单的是“cat /dev/sda > /dev/sdb”。之后我的电脑从我的新硬盘启动得很好,但它只有 500 GiB 大,因为它有从旧硬盘复制的分区表。所以我试图放大它。

首先,我在其上创建了新的(第三个)分区。我在其上创建了物理卷。我 LUKS 加密了这个物理卷(使用“cryptsetup”命令),使用与旧分区相同的密码。我将此物理卷添加到现有卷组。我扩大了现有的逻辑卷,也扩大了位于其上的文件系统。我使用从 CD 启动的 Knoppix 完成了这一切。我没有改变 grub 配置。然后(我还在 Knoppix)我尝试从这两个加密分区挂载文件系统 - 它运行良好,它是一个文件系统,2 TiB 大,所有文件都在那里。

然后我尝试从这个硬盘启动。Grub 要求我输入 LUKS 加密分区的密码,然后失败并显示以下消息:

grub 错误

在这些消息中,我们可以看到 uuid "EFc551-(...)" - 我不知道这个 uuid 是什么。

grub 启动时执行的命令是那些(照片模糊,但我希望你能看懂文字):

grub 命令

您可以在此命令中看到的字符串“9e5881c3(...)”是旧加密分区的 uuid。现在我想实现两件事:

  • 明白发生了什么,
  • 能够从我的 2 TiB 硬盘启动。

你能帮我实现这两个目标吗?


最终解决方案

Marmarek 的想法是正确的。

与我一开始的想法相反,在我的设置(我猜是默认的 Debian 设置)中,grub 与 LVM 无关。Grub 启动小的未加密启动分区,该分区的初始化工作是解密和挂载加密的 LVM 卷。所以我不必修改 grub 而是修改 initrd。Marmarek 建议使用 update-initramfs 在 Knoppix 下重新创建它,但它不起作用。由 update-initramfs 创建的 initrd 缺少 /conf/conf.d/cryptroot 文件(我原来的 initrd 有),因此它根本没有尝试解密任何分区。我猜想它可能缺少那个文件,因为当我运行 update-initramfs 命令时,这些分区没有加密并且 LVM 卷没有激活?

所以我只是解压了我的原始 initrd 映像并将这样的行放入它的 init 文件中:

cryptsetup luksOpen UUID=some-uuid udisks-luks-uuid-this-uuid
Run Code Online (Sandbox Code Playgroud)

我不知道 cryptsetup 的最后一个参数是否必须与我给出的完全一样 - 我只是模仿了我在一些示例中看到的内容。

该行必须放在 init 中已经安装 /dev 的地方 - 我通过反复试验找到了这样的地方。这是这条线之后的地方:

run_scripts /scripts/init-top
Run Code Online (Sandbox Code Playgroud)

当我打包这个修改后的 initrd 并启动我的计算机时,它要求我输入两个密码并且运行良好。

小智 5

这个 uuid "EFc551-(...)" 可能是你的 2TB 磁盘(即上面的加密 PV)。你需要以某种方式告诉你的 initramfs 关于这个第二个 PV。可能 update-initramfs 会这样做,例如(来自 knoppix):(假设您已将磁盘安装在 /mnt/disk 中)

cp -a /dev/* /mnt/disk/dev/
chroot /mnt/disk
mount /proc
mount /sys
update-initramfs -u -k all