在linux中,对于img文件(例如,虚拟机的img文件),有时候需要将其挂载,以便修改其中的内容。能不能将它像iso文件一样挂载呢?

其实方法很简单,只需要两步:

  1. kpartx -av xxx.img

得到如下信息:

add map loop0p1 …

此时只需要mount loop0p1即可

mount /dev/mapper/loop0p1 /mnt

推荐使用脚本挂载

  1. # 使用命令前先 kpartx -av xxx.img
  2. ls -lR /dev/mapper/ | grep -Eo 'loop[0-9a-z]{1,5}' | awk '{print "mkdir -p /mnt/"$NF"; mount /dev/mapper/"$NF" /mnt/"$NF}' | sh

OK,这样就可以进入mnt对img文件的内容进行修改了
要卸载也很简单,同样是两步:

  1. umount /mnt
  2. kpartx -d xxx.img

参考:

img文件挂载方法 https://www.cnblogs.com/feisky/archive/2012/05/31/2528002.html
linux下使用kpartx挂载虚拟文件系统 https://blog.csdn.net/qq_28693567/article/details/80324846

其他方法

在网上下载了一个sentos的镜像文件: 2016-05-12-centos-lite-preview-bpi-m2p.img。我想在linux下把这个镜像挂载上,然后看看里面有那些文件。
我们可以把img的文件理解成一个磁盘,一个以二进制形式存在的磁盘。磁盘中肯定是有分区。因此我们可以直接使用mount指令,把磁盘里的分区挂载起来。
第一步: 我们需要知道img磁盘文件,对应分区的开始位置。这样我们才好挂载。所以,先用fdisk命令查看磁盘的分区情况:
Linux 挂载 img 文件 - 图1
可以看到img文件中有两个分区,第一个分区是从204800开始的,这里需要特别注意,需要转换一下:204800*512=104857600B

然后,就可以挂载分区了,这里要用到offset参数:
mount -o loop,offset=104857600 2016-05-12-centos-lite-preview-bpi-m2p.img /mnt/ (这里特别注意loop,offset 之间有逗号且不能有空格)

然后,就可以进/mnt目录下看了!

  1. mount -o loop,offset=553648128 /tmp/444/armbian/Armbian_20.12_Aml-s812_buster_current_5.9.0-rc7.img /tmp/m/img