做实验需要在.img格式镜像中导入文件,并挂载到系统的/mnt目录,然而遇到了很多错误导致挂载失败。这里提供一种简单可用的写入.img镜像并挂载的解决方案。
(在提供方案之前我们首先了解一下linux系统中的loop设备)
loop设备是一种伪设备,是使用文件来模拟块设备的一种技术,文件模拟成块设备后, 就像一个磁盘或光盘一样使用。在使用之前,一个 loop 设备必须要和一个文件进行连接。这种结合方式给用户提供了一个替代块特殊文件的接口。因此,如果这个文件包含有一个完整的文件系统(比如img镜像),那么这个文件就可以像一个磁盘设备一样被 mount 起来。之所以叫loop设备(回环),其实是从文件系统这一层来考虑的,因为这种被 mount 起来的镜像文件它本身也包含有文件系统,通过loop设备把它mount起来,它就像是文件系统之上再绕了一圈的文件系统,所以称为 loop。
1. 先查看第一个空闲loop设备
$ sudo losetup -f
我这里得到的结果是/dev/loop9
2. 使用上一步得到的设备名,第一次创建loop设备
$ sudo losetup /dev/loop9 imagename.img
3. 后面挂载有两种解决方法,第一种计算offset,第二种使用kpartx,这里用kpartx比较简单,另一种详见文末参考链接
$ sudo kpartx -av /dev/loop9
终端下会给出分区的信息,可以看到使用的分区,然后即可挂载
$ sudo mount /dev/mapper/loop9p1 /mnt
成功挂载如下图所示,就可在/mnt目录操作镜像里的文件了:
成功挂载并显示文件信息