在虚拟机管理程序上运行虚拟机(VM)时,可以创建一个或多个镜像。 作为虚拟机磁盘。 如果要在不启动VM的情况下修改VM镜像中的文件,可能通过挂载镜像文件。 然后,就可以修改磁盘镜像的内容了。
在Linux中,有一些方法挂载镜像,不同类型的镜像需要不同的方法。 如果您使用的是qcow2类型的镜像(QEMU / KVM使用),则至少有两种方法可以在Linux上挂载。
使用 libguestfs,它提供一套用于访问和编辑镜像的工具。
libguestfs 支持几乎所有类型镜像,包括 qcow2。 可以在 Linux 上安装 libguestfs。
安装工具包
Debian/Ubuntu
apt-get install -y libguestfs-tools
CentOS
yum install -y libguestfs-tools
安装 libguestfs 后,可以使用 guestmount 的工具挂载 qcow2 镜像。
请注意,当 VM 正在运行时,必须使用只读模式挂载镜像,否则,您将面临损坏镜像的风险。因此,在挂载磁盘之前最好先关闭 VM。
下面尝试挂载一份 CentOS7 的镜像, 假设现在不知道,这个镜像有多少分区, 我们直接 /dev/xxx 输入一个错误的分区
然后, guestmount 将会显示可供选择的分区名称。
guestmount -a system.qcow2 -m /dev/xxx /images/
[root@KuaiCDN img]# guestmount -a system.qcow2 -m /dev/xxx /images/
libguestfs: error: vfs_type: vfs_type_stub: /dev/xxx: expecting a device name
libguestfs: error: mount_options: mount_options_stub: /dev/xxx: expecting a device name
guestmount: ‘/dev/xxx’ could not be mounted.
guestmount: Did you mean to mount one of these filesystems?
guestmount: /dev/sda1 (unknown)
guestmount: /dev/sda2 (xfs)
guestmount: /dev/sda3 (xfs)
[root@KuaiCDN img]#
显而易见 /dev/sda2 是 /boot 分区, /dev/sda3 是系统根目录, 这里直接挂载系统根目录, 挂载时会比较慢,等待即可
guestmount -a system.qcow2 -m /dev/sda3 /images/
[root@KuaiCDN img]# guestmount -a system.qcow2 -m /dev/sda3 /images/
[root@KuaiCDN img]# ls /images/
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@KuaiCDN img]#
当然, 也可以使用 -i guestmount 会挂载根分区
guestmount -a system.qcow2 -i /images/
[root@KuaiCDN img]# guestmount -a system.qcow2 -m /dev/sda3 /images/
[root@KuaiCDN img]# ls /images/
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@KuaiCDN img]#
[root@KuaiCDN img]# umount /images
[root@KuaiCDN img]# guestmount -a system.qcow2 -i /images/
[root@KuaiCDN img]# ls /images/
bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
[root@KuaiCDN img]#