如何挂载磁盘映像?

Emi*_*ano 28 linux mount partitioning dd

我有一个myimage.disk包含分区表和主分区(即 FAT32 文件系统)的磁盘映像。将其视为 USB 笔图像。

我想将主分区挂载到本地目录。我知道如何使用循环工具挂载分区映像,但这里有磁盘映像。我的猜测是我必须安装映像“跳过”分区表,但我该怎么做?

sco*_*res 51

kpartx 工具使这更容易。它在 /dev/mapper 中为映像中的每个分区创建循环设备。然后,您可以挂载与所需分区对应的循环设备,而无需手动计算偏移量。

例如,要挂载磁盘映像的第一个分区:

kpartx -a -v myimage.disk
mount /dev/mapper/loop0p1 /mnt/myimage
Run Code Online (Sandbox Code Playgroud)

完成图像后,删除循环设备:

umount /mnt/myimage
kpartx -d -v myimage.disk
Run Code Online (Sandbox Code Playgroud)

或者,如果您有一个最新的内核,并在启动时传递 loop.max_part=63(如果循环是内置的)或 modprobe(如果循环是一个模块),那么您可以这样做:

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
Run Code Online (Sandbox Code Playgroud)

完成循环后:

losetup -d /dev/loop0
Run Code Online (Sandbox Code Playgroud)

  • 如果在运行 `losetup` 后没有得到分区设备(`/dev/loop0p1` 等),请运行 `partprobe /dev/loop0`。 (2认同)

Emi*_*ano 6

发现这个:

http://www.andremiller.net/content/mounting-hard-disk-image-including-partitions-using-linux

这似乎正是我正在寻找的。

这是关键部分:

mount -o loop,ro,offset=32256 hda.img /mnt/rabbit
Run Code Online (Sandbox Code Playgroud)

其中 offset 的值以字节为单位。获得偏移量的建议方法是指向parted图像,然后以字节为单位 B 并从打印输出中获取起始值。作为替代方案,假设您有磁盘空间,请执行显而易见的操作:一旦您有了偏移量和大小,只需使用dd将每个分区提取到一个单独的文件即可。


eph*_*err 5

如今,您可以通过使用udisks. 来自ArchWiki 的解决方案:udisks - Mount loop devices

要轻松挂载 ISO 映像,请使用以下命令:

udisksctl loop-setup -r -f image.iso
Run Code Online (Sandbox Code Playgroud)

这将创建一个循环设备并显示准备安装的 ISO 映像。卸载后,循环设备将被 udev 终止。

-r 那里是只读选项。