Luks

掛載鏡像文件的加密分區

  • March 4, 2019

我有一個硬碟的映像備份文件,它由三個分區 ( sudo fdisk -l /mnt/hdd/19_02.img) 組成:

Device                 Start       End   Sectors   Size Type
/mnt/hdd/19_02.img1     2048   1050623   1048576   512M EFI System
/mnt/hdd/19_02.img2  1050624  34686975  33636352    16G Linux swap
/mnt/hdd/19_02.img3 34686976 976773134 942086159 449.2G Linux filesystem

第三個分區 is 類型crypto_LUKS。如果它不會被加密,我可以用 掛載它sudo mount -o loop,offset=$(expr 512 \* 34686976) /mnt/hdd/19_02.img /mnt/img,這會導致mount: /mnt/img: unknown filesystem type 'crypto_LUKS'.

我試過的

sudo cryptsetup luksOpen /mnt/hdd/19_02.img3 img結果是Device /mnt/hdd/19_02.img3 doesn't exist or access denied.

sudo cryptsetup plainOpen --offset=$(expr 512 \* 34686976) /mnt/hdd/19_02.img img詢問我的密碼,該密碼也被接受,但返回了Requested offset is beyond real size of device /mnt/hdd/19_02.img. 好吧,也許cryptsetup確實將偏移值乘以塊大小。

sudo cryptsetup plainOpen --offset=34686976 /mnt/hdd/19_02.img img詢問我的密碼,該密碼也被接受並返回正常。但sudo mount /dev/mapper/img /mnt/img抱怨mount: /mnt/img: wrong fs type, bad option, bad superblock on /dev/mapper/img。分析sudo lsblk -f /dev/mapper/img顯示沒有辨識文件系統。

NAME FSTYPE LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
img

加密設備是由LUKS模式創建的,因此使用plainOpen. 但luksOpen不提供--offset選項。

sudo cryptsetup luksOpen --offset=34686976 /mnt/hdd/19_02.img img的結果cryptsetup: Option --offset is supported only for open of plain and loopaes devices and for luksFormat。(沒試過luksFormat,但它設置了 LUKS 設備頭並加密了主密鑰。)

畢竟這個問題

如何處理cryptsetup luksOpen圖像文件上的偏移量?

fdisk這裡有點愚蠢:當顯示分區的設備名稱時,它只取給它的整個磁碟設備的名稱,並附加分區號(p如果整個磁碟設備名稱的最後一個字元是前綴也是一個數字)。它在不檢查該名稱的設備是否實際存在的情況下執行此操作。

換句話說,如果您的圖像文件被命名/mnt/hdd/19_02.img並且您正在使用fdisk它直接檢查它,那麼分區名稱/mnt/hdd/19_02.img3完全是虛構的並且無法使用。

您可以簡單地將圖像文件附加到循環設備中,並讓它自動為您檢測分區,而不是嘗試手動計算偏移量:

sudo losetup -P /dev/loop0 /mnt/hdd/19_02.img

如果您的系統足夠新以支持-P選項losetup,那麼您現在應該有分區設備,例如/dev/loop0p1,/dev/loop0p2/dev/loop0p3自動出現。

對於不支持分區循環設備的舊發行版,您可以使用該kpartx命令(如果未單獨打包,則可能隨device-mapper-multipath工具提供)用於相同目的。在這種情況下,您必須執行兩個步驟,並且設備名稱會略有不同:

sudo losetup /dev/loop0 /mnt/hdd/19_02.img
sudo kpartx -a /dev/loop0

像這樣使用時kpartx,分區設備會出現在/dev/mapper,例如/dev/mapper/loop0p1,等等。

現在你應該可以做到

sudo cryptsetup luksOpen /dev/loop0p3 img

或者

sudo cryptsetup luksOpen /dev/mapper/loop0p3 img

取決於您是否使用losetup -Pkpartx處理分區設備。


完成對映像的訪問後,解除安裝分區設備上所有已掛載的文件系統、sudo cryptsetup luksClose加密映像,然後撤消循環設備綁定:

如果您使用過kpartx,請先執行sudo kpartx -d /dev/loop0以釋放分區設備。如果您使用losetup -P,則不需要此步驟。

然後,釋放循環設備:sudo losetup -d /dev/loop0

引用自:https://unix.stackexchange.com/questions/504230