我正在尝试在双启动模式下并排安装 Jammy,并且现存的LUKS 加密的 Bionic 安装。
(为了开发目的,我们需要在同一台 PC 上访问这两者,而虚拟机并不是一个真正的选择。)18.04 是使用加密安装的,使用安装程序中提供的 LVM/LUKS 配置作为选项。
我想我已经完成了大部分工作,但是在让引导加载程序解密分区时遇到了麻烦。
以下是我目前尝试的步骤:
(由于我只是在虚拟机中测试可重复的过程,所以磁盘大小很小):
以实时模式启动 22.04 安装程序,通过单击 Nautilus 中显示的加密卷来解锁磁盘。
sudo lvs
演出:
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root vgubuntu -wi-a---- <30g
swap_1 vgubuntu -wi-a---- 976.00m
缩小 18.04 根文件系统所在的现有逻辑卷:
sudo lvreduce --resizefs --size 10G /dev/ubuntu-vg/root
为安装程序创建一个新的逻辑卷(LV)以供 22.04 使用:
sudo lvcreate -n jammy-root -L 15G ubuntu-vg
此时,我可以看到新的和现有的 LV。
接下来,我从桌面启动 22.04 安装程序。
- 选择手动分区。
- 选择新的 LVM 卷“/dev/mapper/ubuntu--vg-jammy-root”选择格式,用作 EXT4,挂载点:/
- 选择现有的交换区,重新用作两个操作系统的交换区
- 选择现有的 /boot 分区作为两个操作系统的 /boot(希望这不会导致太多问题并且可行,这似乎比移动所有分区并调整大小以允许 2 个 /boot 分区容易得多。我试图避免这种情况,因为我需要多次执行此过程。)
安装使用这些设置完成。此时,如果我重新启动,我将获得两个操作系统安装的 grub 菜单,两个安装似乎都不知道 LV 位于加密卷上。我收到以下消息:
Volume group "ubuntu-vg" not found
Cannot process volume group ubuntu-vg
我被放入了 BusyBox 壳中。
我还尝试运行与上述相同的过程,而不是在安装程序完成运行以下命令时重新启动:
echo 'ubuntu-vg UUID=(uuid without quotes) none luks,discard' > /target/etc/crypttab
mount -t proc proc /target/proc
mount --rbind /sys /target/sys
mount --rbind /dev /target/dev
chroot /target
grub-install --target=x86_64-efi --efi-directory=/boot/efi --bootloader=ubuntu --boot-directory=/boot/efi/EFI/ubuntu --recheck /dev/sda
grub-mkconfig --output=/boot/efi/EFI/ubuntu/grub/grub.cfg
update-initramfs -ck all
exit
reboot
这给出了相同的结果。
有谁能给我一些建议,告诉我如何才能让它发挥作用,并让它成为一个易于重复的过程?
谢谢!
根据评论者的要求添加其他信息:
驱动器布局如下:
/dev/vda1 - A single fat32 EFI partition - 512MB
/dev/vda2 (an ext4 /boot partition) - 732MB
/dev/vda3 LUKS encrypted PV containing: 2 LVs for the root of each OS and 1 LV for shared swap.
树摘要:
Drive: /dev/vda
├─ Partition: /dev/vda1/ [single fat32 EFI partition]
├─ Partition: /dev/vda2/ [ext4, boot partition, created by 18.04 installer, will use for both, mountpoint: boot]
├─ Partition: /dev/vda3/ [LUKS encrpyted PV]
│ ├─ VG: ubuntu-vg [Default LVM VG created by 18.04 installer]
│ ├─ LV: root [Default LVM LV created by 18.04 installer]
│ ├─ Partition: ext4, description/use: Default 18.04 root partition created by 18.04 installer, mountpoint: /
│ ├─ LV: swap_1 [Default LVM LV created by 18.04 installer]
│ ├─ Partition: swap, description/use: 18.04 and 22.04 swap partition created by 18.04 installer, will use for both, use as swap
│ ├─ LV: jammy-root [LVM LV manually created before 22.04 install]
│ ├─ Partition: ext4, description/use: 22.04 root partition manually created and used during 22.04 install as described in original post., mountpoint: /
- 启动方式为 UEFI
- 这是安装程序使用的默认 LUKS 方案,即包含用于 / 的 ext4 LV 和用于交换的 LV 的加密 PV。
- LUKS 版本信息:
/dev/vda3 的 LUKS 标头信息
Version: 1
Cipher name: aes
Cipher mode: xts-plain64
Hash spec: sha256
Payload offset: 4096
MK bits: 512
答案1
首先,我不认为你的 grub 引导程序打开了 luks。你的设置实际上有清除数据 /boot。你看到的是内核启动后的内容。
您尝试共享 /boot 的主要问题是。/boot 包含一个特定操作系统的内核和 grub 信息。initramfs-tools 将删除/更改其中的文件。操作系统不知道 vmlinz 或 initrd 是否属于其自身。update-grub 将更改 /boot/grub 中的引导加载程序和脚本,因此它将无法正确处理其他 ubuntu 安装中的操作系统。请不要这样做。
您的旧 18.04 无法启动的原因是现在 /boot/grub 包含与其不匹配的新 grub 配置。/boot 也不包含正确的 initrd 和 vmlinz。因此,忘掉 18.04 吧。此时它根本无法工作。除非您费尽心机 chroot 到 18.04 并修复您的 /boot。
您更新 crypttab 的步骤大致正确。我看您会看到 luks 密码输入界面。但这可能会超时。因此请确保您使用详细启动。然后您会看到有关发生的事情的更多信息。
确保 crypttab 中的 UUID 正确。它是 vda3 而不是 ubuntu-vg uuid。
由于您尝试混合使用 2 个操作系统,因此您最终可能会启动到错误的内核或内核实际上使用错误的 initrd。我强烈建议您创建一个新的 /boot 或格式化旧的 /boot。然后重新安装。在重新启动之前,请按照正常加密设置的建议,将 chroot 进入您的安装。然后更新您的 crypttab 和 initrd。
答案2
对他来说,使用一对带有 grub 的 USB 驱动器来安装每个版本的 Ubuntu 是否可行,即插入一个 USB 驱动器并启动他想要使用的版本,因为单个驱动器会安装相应的 /dev/vda*/。我知道这可能不是一种实用的方法,但它应该可以同时备份文件