恢復已刪除的 LUKS 分區
我有(有)以下設置:使用 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?
警告:
在執行所有這些操作之前製作驅動器的映像(備份)。
閱讀所有命令的文件(例如,“手冊頁”),並確保在使用它們之前了解它們的作用。
你被警告了
為了將來參考,這裡是解決方案:
- 查找 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。 3. 找出它失去的設備
losetup -a
- 解密和掛載
sudo cryptsetup luksOpen /dev/loop1 luksrecover
此時磁碟應該已安裝在
/media/
. 但是:您/home
仍然應該被加密。是時候解密了 5. ``` 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`您自己的。或者只是將現有文件系統移動到適當的分區。 危機化解了,只用了幾個小時。