几年前,我在 500 GiB 硬盘上安装了 Debian。在安装过程中我选择了加密文件系统。因此安装程序创建了一个小的未加密启动分区(我猜 grub 配置保留在那里)和一个大的 LUKS 加密分区。这个大型加密分区是一个物理卷,它是卷组的唯一成员,在该物理卷上创建了两个逻辑卷 - 一个用于交换,一个用于其他所有内容。几年来,在这种配置下一切都运行良好,而我没有考虑太多。
几天前,我购买了新的 2 TiB 硬盘并决定将我的系统迁移到它。我将旧硬盘驱动器复制到新硬盘驱动器 - 一点一点地,简单地通过“cat /dev/sda > /dev/sdb”。之后,我的计算机从新硬盘启动正常,但它只有 500 GiB 大,因为它有从旧硬盘复制的分区表。所以我试着把它放大。
首先,我在其上创建了新的(第三个)分区。我在上面创建了物理卷。我很高兴加密了这个物理卷(使用“cryptsetup”命令),使用与旧分区相同的密码。我将此物理卷添加到已有的卷组中。我扩大了现有的逻辑卷,也扩大了其上的文件系统。我使用从 CD 启动的 Knoppix 完成了这一切。我没有改变 grub 配置。然后(我还在 Knoppix)我尝试从这两个加密分区挂载文件系统 - 它运行良好,它是一个文件系统,2 TiB 大,所有文件都在那里。
然后我尝试从这个硬盘启动。 Grub 要求我输入 LUKS 加密分区的密码,然后失败并显示以下消息:
在这些消息中,我们可以看到 uuid“EFc551-(...)” - 我不知道这个 uuid 是什么。
grub 在启动时执行的命令是这些(照片很模糊,但我希望你能看懂文字):
在此命令中您可以看到的字符串“9e5881c3(...)”是旧加密分区的uuid。现在我想实现两件事:
- 了解发生了什么,
- 能够从我的 2 TiB 硬盘启动。
你能帮助我实现这两个目标吗?
最终解决方案
马尔马雷克的想法是正确的。
与我一开始的想法相反,在我的设置(我猜是默认的 Debian 设置)中,grub 与 LVM 无关。 Grub 引导小型未加密的引导分区,该分区的 init 负责解密并挂载加密的 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
我不知道 cryptsetup 的最后一个参数是否必须与我给出的完全一样 - 我只是模仿了我在一些示例中看到的内容。
该行必须放在 init 内部的 /dev 已安装的位置 - 我通过反复试验找到了这样的位置。这是该行之后的地方:
run_scripts /scripts/init-top
当我打包这个修改过的 initrd 并启动我的计算机时,它要求我输入两个密码并且运行良好。
答案1
这个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
答案2
您是否更新了 2TB 硬盘上的 /etc/fstab 以指向加密卷的正确 UUID?
如果您不知道加密卷的 UUID 是什么,您可以通过发出 cmd 进行检查:
cryptsetup -v 状态 /dev/
您需要更新 /etc/fstab 和 grub 配置以指向正确的 UUID。
假设这是让 grub 和 fstab 指向正确驱动器的问题,这应该可以解决您的问题。