我有以下设置:使用 LUKS 进行全盘加密和单独加密的 /home 分区。犯了删除我的 /root 的错误,但很早就发现了,所以只对分区表进行了更改。现在我剩下以下内容:
sudo hexdump -C /dev/nvme0n1 |grep LUKS
3e900000 4c 55 4b 53 ba be 00 01 61 65 73 00 00 00 00 00 |LUKS....aes.....|
这意味着 LUKS 标头仍然完好无损(唷)
然后我在该偏移量上创建一个循环设备
sudo losetup -o 0x3e900000 -r -f /dev/nvme0n1
并安装它
sudo cryptsetup luksOpen /dev/loop1 luksrecover
到目前为止,它工作得很好,一切都安装正确,我可以看到我的文件,并且通过更多命令我可以恢复我单独的 /home 。
然而,由于我确实有一个完整的操作系统,所以我希望它能回来。唯一的问题是,没有 grub 来调用最初的 Xubuntu LUKS 解密器。
现在,由于我发现我的分区存在明显的偏移,我猜这就是 grub 曾经居住的地方
那么,我该怎么做才能恢复我的操作系统呢?据我了解,我必须以某种方式将字节 0 - $offset 标记为 grub 并在那里安装 grub,其余部分作为其他内容。所以我尝试了 grub-install /dev/nvme0n1 并且它抱怨 aufs
grub-install: error: failed to get canonical path of `aufs'.
然后在已安装的 LUKS 系统中的 chroot 中尝试执行相同操作,但该文件系统是只读的,当然它从一开始就没有 grub。
那么我该怎么做才能让 grub 坐在 LUKS 之前的空白区域并在启动时解密 LUKS?
答案1
警告:
在执行所有这些操作之前,先制作驱动器的映像(备份)。
阅读所有命令的文档(例如“手册页”),并确保您在使用它们之前了解它们的作用。
你被警告了
为了供将来参考,解决方案如下:
找到 LUKS 分区的起始位置。所有 LUKS 分区都有一个包含单词 LUKS 的纯文本标头。所以
sudo hexdump -C /dev/<the disk> | grep LUKS
注意 LUKS 在哪里。
hexdump
应该列出找到此标头开始处的偏移量。将分区挂载为环回设备,从您找到 LUKS 标头的偏移量开始sudo losetup -o <offset> -r -f /dev/nvme0n1
作为参考,我在带有 Intel SSD 和 GRUB2 的 Xubuntu 中的偏移量是 0x3e900000。
找出它丢失的设备
losetup -a
解密并挂载
sudo cryptsetup luksOpen /dev/loop1 luksrecover
此时磁盘应该已经挂载在
/media/
.但是:您的内容/home
仍然应该被加密。是时候解密了-
cd /home/<yourusername> sudo ecryptfs-recover-private .Private/
这应该产生以下结果
INFO: Found [.Private/]. Try to recover this directory? [Y/n]: Y INFO: Found your wrapped-passphrase Do you know your LOGIN passphrase? [Y/n] Y INFO: Enter your LOGIN passphrase... Passphrase: Inserted auth tok with sig [8c5d84b9d7f0cc5b] into the user session keyring INFO: Success! Private data mounted at [/tmp/ecryptfs.mxsowbiD].
插入外部存储设备(例如 HDD),保存您的
/home
以及/opt
您需要的任何其他内容。重新安装并替换/home
为您自己的。或者只是将现有文件系统移动到适当的分区。
危机解除,只用了几个小时。
答案2
我将使用 Linux Testdisk 实用程序来恢复分区表。上次我需要它时,从源代码编译它对可恢复的内容产生了影响。