当我安装 Ubuntu 18.04 时,当 18.04 首次发布时(发布的前几个月),我没有加密我的根分区,所以出于某种原因,我决定现在对其进行加密。
我知道这个问题之前已经被问过(实际上我发布了一些被问到的问题的链接!)但我发布这个问题是因为这个问题是针对我的,所以请不要删除我的问题,非常感谢,亲爱的版主和管理员。我没有找到任何人遇到与我相同的问题,在做了一些主要的 Linux 工作后,我不得不寻求帮助,因为我无法自己解决这个问题。 (在我过去 11 年的 GNU/Linux-*nix 经验中,这种情况并没有发生太多。99% 的情况下,我自己和亲爱的 Google 解决/解决了我的问题……正如你所知,问题经常发生在Linux中!:D)
无论如何,以下是我执行此操作的步骤:(在 18.04 live usb 中)
sudo cryptsetup -v -y -c aes-xts-plain64 --key-size 512 --hash sha512 luksFormat --uuid=049172c6-5376-4b9c-bd27-b503b6f25423 /dev/sda5
sudo cryptsetup -v luksOpen /dev/sda5 myroot
sudo mkfs.ext4 -m 0 /dev/mapper/myroot
#Then for copying the contents of my root partition I used dd:
sudo dd if=/dev/sda6 of=/dev/mapper/myroot bs=4M
#/dev/sda6 is a duplicate of my original sda5 root...
#After I dd'ed, there was unallocated space on the partition so I did a check on it in GParted (Which also applies cryptsetup resize command to it)
sudo mount /dev/mapper/myroot /media/myroot #I created /media/myroot beforehands
然后,在此之后,我做了很多事情,我认为这将有助于用 GRUB 启动我的这个新的加密根,并且我通过搜索发现了很多更多的事情。所以我基本上尝试了人们在这些链接中建议的所有内容:
https://askubuntu.com/questions/1134998/booting-19-04-from-luks-system-drive
设置 initramfs 在 Mint 18 上启动时提示输入 luks passowrd?
https://askubuntu.com/questions/729673/ubuntu-full-disk-encryption-with-encrypted-boot
https://askubuntu.com/questions/450895/mount-luks-encrypted-hard-drive-at-boot
https://askubuntu.com/questions/1082131/how-to-get-grub-to-boot-from-a-newly-encrypted-partition
(还有更多链接)
这是 fdisk -l 的输出:
Disk /dev/sda: 238.5 GiB, 256060514304 bytes, 500118192 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: FE0857E8-E0DE-40A0-96C5-C4FEC80B8742
Device Start End Sectors Size Type
/dev/sda1 2048 534527 532480 260M EFI System
/dev/sda2 534528 1067007 532480 260M EFI System
/dev/sda3 2582528 4630527 2048000 1000M Lenovo boot partition
/dev/sda4 4892672 259438591 254545920 121.4G Microsoft basic data
/dev/sda5 259438592 332343295 72904704 34.8G Linux filesystem
/dev/sda6 332343296 400898047 68554752 32.7G Linux filesystem
/dev/sda7 410068992 425521151 15452160 7.4G Microsoft basic data
这些是我的 UUID:
/dev/sda5:
LUKS UUID: 049172c6-5376-4b9c-bd27-b503b6f25423
Partition UUID: 1db5df50-7000-48df-a281-74bad5689ce1
/dev/sda6:
Former UUID which I recently changed it to a new one because it was same as sda5's due to using dd for copying root filesystem to new LUKS partition: 1db5df50-7000-48df-a281-74bad5689ce1
New UUID: 7876a195-7219-4440-892a-61b57c706443
最后是我在 GRUB 中尝试过的事情: http://s000.tinyupload.com/index.php?file_id=00739971820320475700
更新:所以基本上,当我尝试使用我在上面发布的链接的zip文件中提供的配置启动时,对于每个conf,我都会遇到不同的错误或问题或其他东西......就像当我添加一些在链接中找到的东西时我张贴在未加密根(sda6)的 /etc/default/grub 和 crypttab 以及 fstab 和 grub.cfg 中并启动,而在安静的启动屏幕上它要求输入 luks PW,但在行尾它询问我它说类似“输入 sda5 luks 的密码以安装在 /!”,IDK(或有点知道!)为什么最后它说 /!而不仅仅是/。
当我有时尝试从 sda5 启动(使用其中一个配置)时,它确实会要求 grub 上的密码,但随后它会进入 busybox initramfs 提示符,或者显示“No such device found with 1db5df50-7000-48df-a281-74bad5689ce1”或者类似的东西...
我认为问题要么是亲爱的telcoM在他关于initramfs的回答中所说的,要么是UUID和我放入conf文件中的UUID,你知道吗?但希望这是因为 initramfs,我将尝试 telcoM 的建议,看看会发生什么。
任何帮助将不胜感激,我真的不想从安装程序重新安装和加密,我需要我的 ubuntu 上的东西,但我真的无法重新安装,我的这个 ubuntu 安装是如此完美,我我在 GNU/Linux 方面拥有丰富的经验(现已超过 10 年),并且安装过很多 Linux,我不是菜鸟,但我就是不能丢失我所做的所有数据、配置或自定义...我知道我可以支持他们,但我只是……你知道吗?
答案1
创建的 LUKS 容器的大小与底层分区的大小相同/dev/sda5
,但由于/dev/sda6
您dd
放入的容器比该容器小,因此 LUKS 容器的映像/dev/sda6
不会完全填满您的/dev/mapper/myroot
.一个简单的问题resize2fs /dev/mapper/myroot
就足以解决这个问题。
你谈论了很多你所做的事情,但很少谈论实际症状:当您尝试使用新的加密根启动时到底会发生什么?如果有的话,实际的错误消息是什么?它是否识别出加密分区的存在并提示输入密码,或者是否无法通过 UUID 检测到它?或者 GRUB 是否成功加载内核和 initramfs 文件,但 initramfs 无法挂载加密的根文件系统?
您似乎正在使用 UEFI 本机启动方案。没关系,但它带来了启用安全启动的可能性。如果是这样,它将限制 GRUB 在加载/boot/grub/x86_64-efi
main 后加载任何其他 GRUB 模块grubx64.efi
,因此所有必需的模块都必须构建到主grubx64.efi
引导加载程序文件中。
grub-install
执行时,它通常会运行grub-mkimage
,它将能够将任何 GRUB 模块包含到grubx64.efi
其构建中。通常,grub-install
只会包含最少必要数量的模块......也就是说,grub-install
仅执行当时检测到的必要模块。因此,您的 GRUB 可能会失败,因为它没有内置加密支持,因为根文件系统在grub-install
执行时未加密。
要解决这个问题,您有两种选择。当您已 chroot 到新的根文件系统并为其准备了有效条目时,可以使用grub-install
重新安装 GRUB /etc/crypttab
...或者更简单地,确保您已grub-efi-amd64-signed
安装该软件包,并替换grubx64.efi
ESP 上现有的软件包(= 可能/boot/efi/EFI/ubuntu/grubx64.efi
) 和/usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed
:
cp /boot/efi/EFI/ubuntu/grubx64.efi /boot/efi/EFI/ubuntu/grubx64-backup.efi
cp /usr/lib/grub/x86_64-efi-signed/grubx64.efi.signed /boot/efi/EFI/ubuntu/grubx64.efi
这是一个预构建的 UEFI GRUB 引导加载程序,经过签名以最大限度地接受安全引导,并且它具有所有内置的 GRUB 模块,所以它应该明显比您现有的grubx64.efi
文件大。
即使安全启动被禁用,该grubx64.efi.signed
文件也应该可以正常工作:它内置了所有 GRUB 模块这一事实仍然很有用。
但如果你的 GRUB 可以成功加载你的内核和 initramfs 文件,那么问题一定出在 initramfs 阶段。如果您的 Ubuntu 有cryptsetup-initramfs
可用的软件包,请确保它已安装。然后,当您再次chroot到新的加密根目录并/etc/crypttab
为其设置有效条目时,运行update-initramfs -u
以重建您的initramfs。在 chroot 内运行它应该让它自动检测根文件系统是否已加密,并将必要的工具和脚本包含到 initramfs 文件中。