挂载镜像文件的加密分区

arm*_*fro 3 luks cryptsetup

我的硬盘有一个映像备份文件,它由三个分区 ( 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
Run Code Online (Sandbox Code Playgroud)

第三个分区 ist 类型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
Run Code Online (Sandbox Code Playgroud)

加密设备是由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图像文件上的偏移量?

tel*_*coM 9

fdisk这里有点愚蠢:当显示分区的设备名称时,它只需要给它的整个磁盘设备的名称,并附加分区号(p如果整个磁盘设备名称的最后一个字符是前缀,则为前缀)也是一个数字)。它在不检查具有该名称的设备是否实际存在的情况下执行此操作。

换句话说,如果您的图像文件已命名/mnt/hdd/19_02.img并且您正在使用fdisk它直接检查它,那么分区名称如/mnt/hdd/19_02.img3完全虚构且无法使用。

您可以简单地将图像文件附加到循环设备中,并让它自动为您检测分区,而不是尝试手动计算偏移量:

sudo losetup -P /dev/loop0 /mnt/hdd/19_02.img
Run Code Online (Sandbox Code Playgroud)

如果你的系统是新的,足以支持-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
Run Code Online (Sandbox Code Playgroud)

kpartx像这样使用时,分区设备会出现在/dev/mapper,例如/dev/mapper/loop0p1等下。

现在你应该能够做到

sudo cryptsetup luksOpen /dev/loop0p3 img
Run Code Online (Sandbox Code Playgroud)

或者

sudo cryptsetup luksOpen /dev/mapper/loop0p3 img
Run Code Online (Sandbox Code Playgroud)

取决于您是否使用losetup -Pkpartx处理分区设备。


完成访问映像后,卸载分区设备上的所有已安装文件系统、sudo cryptsetup luksClose加密映像,然后撤消循环设备绑定:

如果您使用kpartx,请先运行sudo kpartx -d /dev/loop0以释放分区设备。如果您使用losetup -P,则不需要此步骤。

然后,释放循环设备:sudo losetup -d /dev/loop0

  • 感谢您的帮助,它立即生效了:)!特别感谢考虑使用“losetup -P”或“kpartx”的可能性并解释其差异。 (3认同)