我将所有 LV 区段从一个 PV 迁移到新 PV。新旧 PV 都是 LUKS 加密设备。root 是迁移的 LV 之一。
这不起作用,因为在迁移后,启动甚至不会尝试解锁新的 LUKS PV。它要求输入旧 LUKS 的密码,但旧 LUKS 已不存在,这些驱动器已被重新分配和覆盖。
但是,如果我使用内核参数 rd.auto=1,并删除指定旧 PV 的 UUID 的旧内核参数,我可以让 Linux 启动并要求输入正确的密码。然而,它仍然不起作用。
前我输入了上面写的密码
dracut-initqueue /usr/bin/crypt-run-generator: line 14: cryptsetup: command not found Unnecessary job for dev-mapper-luks-<UUID of new PV LUKS> was removed
因此,它会自动找到新的 LUKS 分区,并让我解锁它,但这一切都是在它放弃寻找可用文件系统之后发生的。它为什么要这样做呢?
此时,启动过程会暂停,无限期地等待所需作业完成。我忘记了它们的所有名称,但其中一个是 cryptsetup.target,我认为另一个是挂载 root。所以,这说得通。
但是,我不知道如何配置 grub 和 dracut 才能使其正常工作。就好像 initrd 有一个配置告诉它只在旧 PV 上启动 LVM。当我启动实时映像时,所有 LV 都在那里,数据看起来很棒。
我需要什么 grub2(efi 模式)配置和 dracut 配置来解决这个问题?
编辑 自发帖以来,我尝试了很多方法。我找到了一些我认为正确的内核参数,但它们似乎没有任何区别。我用 dracut 创建了一个新的 initrd 映像,并强制添加了 cryptsetup 和一个新的、已修复的 /etc/crypttab。这似乎确实有帮助,现在所有错误都消失了……但它仍然无法启动!使用我尝试过的最新选项和 initrd,启动过程确实不是询问任何密码。它显示“正在向 plymoth 发送密码请求”,但只是停滞了。
现在,我尝试的内核选项之一是 rd.shell。超时后,它给了我一个 dracut shell,无法找到 root。从 dracut shell,我可以使用 --assemble --scan 启动 mdadm RAID PV,luks 使用我的密码打开它,所有 LV 都在那里。所以我仍然不明白它想要什么。
答案1
正如我所希望的那样,配置 Linux 启动的“标准”方法适用,但是我花了很长时间才重新学习它,因为自从我上次使用它以来,很多事情已经发生了变化。
- 启动实时映像
- 组装 MD、解锁 LUKS、LVM 检查等。
- 在 chroot jail 中构建目标系统
- 至少 mount /newroot ../boot ../boot/efi 和 ../var
- 安装-t sysfs sysfs /newroot/sys
- 安装 -t proc 无 /newroot/proc
- 安装-t 绑定/ dev / newroot / dev
- 安装-t 绑定/运行/rnewroot/运行
- chroot /newroot
- 从监狱内部,根据需要修复东西(/etc/fstab在/etc/crypttab中/etc/mdadm.conf /etc/lvm/ 等)
- 并
CMDLINE
使用新的内核参数修复 grub2 环境变量- Fedora/RHEL/CenOS 上的 dracut --print-cmdline 将输出一组最少的参数。 这非常有帮助因为很难知道你的发行版需要什么以及跟上最新的内核选项。 而且,省去了追踪 luks/md 设备的 UUID 的麻烦!
- 适用于 Ubuntu?
- 对于 Arch?
- 创建新的 grub2 配置
- grub2-mkconfig [-o ]
- 如果需要,安装 grub2
- 对于 BIOS grub2-install
- 对于 EFI,依赖于发行版
- dnf 为 Fedora 重新安装 grub-efi grub-efi-modules shim?
- 乌班图?
- 拱?
- 重新生成 intird/initramfs 启动映像
- Fedora 版 dracut
- 乌班图?
- 拱?