Partition
如何將 LUKS 容器從分區的中間移動到開頭?
對於 tl;dr,請跳到底部。
我有一個雙引導設置,在我的驅動器開頭使用 Mac OS X,在驅動器末尾有三個 GNU/Linux 分區。我手頭沒有相關的機器來提供
fdisk
轉儲,但這裡是原始磁碟佈局的粗略概述:/dev/sda1: EFI System Partition /dev/sda2: Macintosh HD (main OS X partition) /dev/sda3: Recovery HD (part of OS X's recovery system) /dev/sda4: / /dev/sda5: /home inside a LUKS container /dev/sda6: swapspace inside a LUKS container
我正在這個系統上重新安裝 GNU/Linux,作為其中的一部分,我想進行
/
加密。但是,這需要單獨的/boot
. 為了創建該分區,我調整了 Macintosh HD 的大小並將 Recovery HD 移回 Macintosh HD 的末尾。我也藉此機會使我的/
更大。所以最終結果是一個如下所示的磁碟:/dev/sda1: EFI System Partition /dev/sda2: Macintosh HD (main OS X partition) (smaller than before) /dev/sda3: Recovery HD (part of OS X's recovery system) /dev/sda4: /boot /dev/sda5: / (larger than before, and now inside a LUKS container) /dev/sda6: /home inside a LUKS container /dev/sda7: swapspace inside a LUKS container
tl; dr:問題是:由於我配置事物的順序,我現在
cryptsetup
在/dev/sda5
. 因為它在中間,所以沒有什麼可以找到它來解鎖/安裝/恢復它。如何將我的 cryptcontainer 移動到分區的開頭?可能這涉及兩個不同的步驟(實際上是在磁碟上找到東西,然後使用該資訊移動它),但我不確定。Google搜尋一無所獲。
LUKS 有一個獨特的標題,你可以找到可能的偏移量
grep
:# grep -a -b --only-matching 'LUKS' /dev/sda5 1832480940:LUKS 1959072314:LUKS 2019974297:LUKS
對於您找到的每個可能的偏移量,您可以創建一個循環設備並查看它是否是有效的 LUKS 設備:
# losetup --find --show --offset 1832480940 --read-only /dev/sda5 /dev/loop3 # cryptsetup luksOpen /dev/loop3 luksloop3 ...mount -o ro, ls, backup, umount... # cryptsetup luksClose luksloop3 # losetup -d /dev/loop3
找到正確的偏移量後,您可以使用
dd
. 這是危險的,如果你得到錯誤的偏移量或取消操作,數據就會失去。所以無論如何你都應該先做好備份。# dd if=/dev/sda5 of=/dev/sda5 bs=1M iflag=skip_bytes skip=1832480940
看看它是否有效:
# cryptsetup luksOpen /dev/sda5 luks
否則從備份中恢復。