我正在 Arch Linux 中使用 LVM。请参阅下面的磁盘结构。
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
|-sda1 8:1 0 512M 0 part
| `-cryptboot 254:3 0 510M 0 crypt
| `-vgboot-boot 254:4 0 508M 0 lvm /boot
`-sda2 8:2 0 49.5G 0 part
`-cryptlvm 254:0 0 49.5G 0 crypt
|-vgos-swap 254:1 0 4G 0 lvm [SWAP]
`-vgos-root 254:2 0 45.5G 0 lvm /
sr0 11:0 1 560M 0 rom
当我启动系统时,我会收到一个输入 Boot 分区密码的提示,因为它是加密的。但我想避免这个密码提示,而且我的 boot 分区应该驻留在 lvm 中。如果有人这样做了,请告诉我。
如果您看到上面的图表,我的根目录也位于 lvm 中。选择内核后,它还会提示输入密码。但这不是问题。
答案1
由于您的分区已加密,因此您会收到双重密码提示/boot
。首先,GRUB 提示输入密码,因为它需要从加密中加载内核/boot
。然后内核再次提示输入密码以解密/
。
有两种方法可以解决此问题:
不要使用加密
/boot
。GRUB 不会要求输入密码。这将允许任何人修改内核和 initramfs 文件。例如,有人可能会用恶意内核替换内核,/
一旦您输入密码,该内核就会访问您的加密数据。创建解密密钥并将其添加到 上的空闲 LUKS 插槽
/
,然后将该密钥嵌入 initramfs。这将允许内核/
无需密码即可访问。
#2 的设置相当复杂,因此我将采用前一种方法。这是我凭空想出来的,没有经过任何测试。请备份并谨慎操作。我不对此过程造成的任何数据丢失和其他问题负责。
您需要一个带有cryptsetup
和 的可启动 Linux 媒体resize2fs
。我建议使用 Ubuntu 闪存驱动器。您也可以将后者替换为partclone
。您还需要大约 500 MB 的可用磁盘空间来存储中间解密/boot
映像。
从您的 Linux 媒体启动。访问 LVM(老实说,我从来没有处理过这个问题,所以我不知道是否需要任何额外的步骤 - Ubuntu 可能会自动处理这个问题)。打开加密的/boot
:
cryptsetup open /dev/<boot> cryptboot
制作未加密启动的映像:(要查看进度,请使用pv
而不是cat
)
cat /dev/mapper/cryptboot > /media/ubuntu/<someExternalStorage>/boot.img
关闭/boot
:
sync
cryptsetup close cryptboot
将未加密的内容写入/boot
分区并调整文件系统大小:
cat /media/ubuntu/<someExternalStorage>/boot.img > /dev/<boot>
resize2fs /dev/<boot>
获取 UUID /boot
(记下来):
blkid /dev/<boot>
打开并挂载/
、更新fstab
:
cryptsetup open /dev/<root> cryptroot
mkdir -p /mnt/root
mount /dev/mapper/cryptroot /mnt/root
cd /mnt/root
vi etc/fstab
调整挂载的行/boot
以使用新的 UUID 而不是/dev/mapper/...
条目。您可能还必须/boot
从中删除行etc/crypttab
。
更新 initramfs (如果你的主操作系统是 Arch,这个可能会在 Ubuntu 中中断...我不确定,所以要小心):
cd /mnt/root
mount -t sysfs sysfs sys
mount -t tmpfs tmp tmp
mount -t proc proc proc
mount --bind /dev dev
mount /dev/<boot> boot
mount --bind /boot/efi boot/efi
chroot
update-initramfs -u -k all
exit
据我所记得,这应该足够了。您还可以通过禁用配置文件中的加密启动来简化 GRUB 配置。它可以稍微加快启动速度,但不是必需的。
自己清理一下:
umount boot/efi boot dev proc tmp sys
cd ..
umount root
cryptsetup close cryptroot