我有一个myimage.disk
包含分区表和主分区(即FAT32文件系统)的磁盘映像。认为这是USB笔图像。
我想将主分区安装到本地目录。我知道如何使用循环工具挂载分区映像,但是这里有磁盘映像。我的猜测是我必须挂载映像“跳过”分区表,但是我该怎么做呢?
我有一个myimage.disk
包含分区表和主分区(即FAT32文件系统)的磁盘映像。认为这是USB笔图像。
我想将主分区安装到本地目录。我知道如何使用循环工具挂载分区映像,但是这里有磁盘映像。我的猜测是我必须挂载映像“跳过”分区表,但是我该怎么做呢?
Answers:
kpartx工具使此操作更加容易。它在/ dev / mapper中为映像中的每个分区创建循环设备。然后,您可以安装与所需分区相对应的环路设备,而无需手动计算偏移量。
例如,要挂载磁盘映像的第一个分区:
kpartx -a -v myimage.disk
mount /dev/mapper/loop0p1 /mnt/myimage
完成图像处理后,请删除循环设备:
umount /mnt/myimage
kpartx -d -v myimage.disk
另外,如果您使用的是新内核,并且在启动时(如果内置了循环)或在modprobe(如果循环是一个模块)上传递loop.max_part = 63,则可以这样进行:
losetup /dev/loop0 myimage.disk
partprobe /dev/loop0 # Re-read partition table if /dev/loop0 was used with a different image before
mount /dev/loop0p1 /mnt/myimage
完成循环后:
losetup -d /dev/loop0
-o loop
上面的设备,/dev/mapper/loop0p1
它已经是一个块设备(在循环设备顶部的映射器设备,您不希望在其之上的另一层循环设备)。
/dev/loop0p1
在运行后没有获得分区设备(等)losetup
,请运行partprobe /dev/loop0
。
kpartx
似乎默认安装在Linux Mint 18中
发现了这一点:
http://www.andremiller.net/content/mounting-hard-disk-image-includes-partitions-using-linux
这似乎正是我想要的。
这是关键部分:
mount -o loop,ro,offset=32256 hda.img /mnt/rabbit
其中offset的值以字节为单位。建议的获取偏移量的方法是指向parted
图像,然后是B字节,然后从打印输出中获取起始值。或者,假设您有磁盘空间,请执行以下操作:一旦有了偏移量和大小,只需dd
将每个分区提取到一个单独的文件中即可。
mount -o loop,ro,offset=32256 hda.img /mnt/rabbit
,其中的值offset
以字节为单位。建议的获取偏移量的方法是将分割点指向图像,然后unit
B
获取字节并start
从print
输出中获取值。或者,假设您有磁盘空间,请执行以下操作:一旦有了偏移量和大小,只需dd
将每个分区提取到一个单独的文件中即可。
mount
包含offset
选项的行。
local_image_file=/var/tmp/image.img
first_byte=$(parted -m ${local_image_file} unit B print | grep Linux | cut --fields 2 --delimiter ':' | sed 's/.$//')
loop_file=/var/tmp/loop
mkdir -p ${loop_file}
mount -o loop,ro,offset=${first_byte} ${local_image_file} ${loop_file}
如今,您可以使用来最大程度地减少工作量udisks
。来自ArchWiki的解决方案:udisks-安装循环设备
要轻松挂载ISO映像,请使用以下命令:
udisksctl loop-setup -r -f image.iso
这将创建一个循环设备,并显示准备安装的ISO映像。卸载后,循环设备将被udev终止。
-r
那里是只读选项。
udisksctl
。
losetup --partscan --find --show disk.img
其后使用mount /dev/loop0p1 /mnt/disk