9.6.3. 挂载磁盘映像文件

可以使用循环设备通过下列方式挂载和卸载包含单个分区映像的磁盘映像 “partition.img”。

  1. # losetup -v -f partition.img
  2. Loop device is /dev/loop0
  3. # mkdir -p /mnt/loop0
  4. # mount -t auto /dev/loop0 /mnt/loop0
  5. ...hack...hack...hack
  6. # umount /dev/loop0
  7. # losetup -d /dev/loop0

可以简化为如下步骤。

  1. # mkdir -p /mnt/loop0
  2. # mount -t auto -o loop partition.img /mnt/loop0
  3. ...hack...hack...hack
  4. # umount partition.img

可以使用 循环设备 挂载包含多个分区的磁盘映像 “disk.img” 的每个分区。因为循环设备默认不管理分区,因此我们需要通过下列方式重新设置它。

  1. # modinfo -p loop # verify kernel capability
  2. max_part:Maximum number of partitions per loop device
  3. max_loop:Maximum number of loop devices
  4. # losetup -a # verify nothing using the loop device
  5. # rmmod loop
  6. # modprobe loop max_part=16

现在循环设备可以管理多达 16 个分区。

  1. # losetup -v -f disk.img
  2. Loop device is /dev/loop0
  3. # fdisk -l /dev/loop0
  4. Disk /dev/loop0: 5368 MB, 5368709120 bytes
  5. 255 heads, 63 sectors/track, 652 cylinders
  6. Units = cylinders of 16065 * 512 = 8225280 bytes
  7. Disk identifier: 0x452b6464
  8. Device Boot Start End Blocks Id System
  9. /dev/loop0p1 1 600 4819468+ 83 Linux
  10. /dev/loop0p2 601 652 417690 83 Linux
  11. # mkdir -p /mnt/loop0p1
  12. # mount -t ext4 /dev/loop0p1 /mnt/loop0p1
  13. # mkdir -p /mnt/loop0p2
  14. # mount -t ext4 /dev/loop0p2 /mnt/loop0p2
  15. ...hack...hack...hack
  16. # umount /dev/loop0p1
  17. # umount /dev/loop0p2
  18. # losetup -d /dev/loop0

或者,你也可以使用 kpartx 软件包中的 kpartx(8) 建立 设备映射设备来达到相同的效果。

  1. # kpartx -a -v disk.img
  2. ...
  3. # mkdir -p /mnt/loop0p2
  4. # mount -t ext4 /dev/mapper/loop0p2 /mnt/loop0p2
  5. ...
  6. ...hack...hack...hack
  7. # umount /dev/mapper/loop0p2
  8. ...
  9. # kpartx -d /mnt/loop0
[注意]注意

你也可以使用循环设备利用偏移量来跳过 MBR 等,来挂载此类磁盘映像的单个分区。但这更加容易出错。