掛載鏡像文件的加密分區
我有一個硬碟的映像備份文件,它由三個分區 (
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 -P
或kpartx
處理分區設備。完成對映像的訪問後,解除安裝分區設備上所有已掛載的文件系統、
sudo cryptsetup luksClose
加密映像,然後撤消循環設備綁定:如果您使用過
kpartx
,請先執行sudo kpartx -d /dev/loop0
以釋放分區設備。如果您使用losetup -P
,則不需要此步驟。然後,釋放循環設備:
sudo losetup -d /dev/loop0
。