在主机系统挂载qcow2磁盘镜像后,无需登录虚拟机就可以直接浏览磁盘镜像的文件系统。可通过以下两种方法来进行挂载操作。
方法一:qemu-nbd 1.安装qemu-nbd命令行工具$ sudo apt install qemu-utils2.将qcow2磁盘镜像导出到磁盘
$ sudo modprobe nbd max_part=8 #加载 nbd 内核模块。"max_part=N" 选项指定我们想要通过 nbd 管理的分区的最大个数。 $ sudo qemu-nbd -c /dev/nbd1 /XXX/XXX/imgname.qcow2 #磁盘镜像导出为网络块设备(/dev/nbd0,/dev/nbd1,/dev/nbd2等块设备中未使用的块)3.挂载qcow2磁盘镜像分区
$ sudo fdisk -l | grep /dev/nbd #查看导出后的磁盘分区 Disk /dev/nbd1:40 GiB,42949672960 字节,83886080 个扇区 /dev/nbd1p1 2048 4194303 4192256 2G e W95 FAT16 (LBA) /dev/nbd1p2 4194304 83886079 79691776 38G 83 Linux $ sudo mkdir /mnt/nbd1 /mnt/mbd2 #创建2个目录准备挂载/dev/nbd1p1和/dev/nbd1p2这两个分区。 $ sudo mount /dev/nbd1p1 /mnt/mbd1 #挂载/dev/nbd1p1 $ ls /mnt/nbd1/ #查看/dev/nbd1p1分区中的文件 config-4.19.90-2106.3.0.0095.oe1.x86_64 loader dracut symvers-4.19.90-2106.3.0.0095.oe1.x86_64.gz efi System.map-4.19.90-2106.3.0.0095.oe1.x86_64 grub2 vmlinuz-4.19.90-2106.3.0.0095.oe1.x86_64 initramfs-4.19.90-2106.3.0.0095.oe1.x86_64.img $ sudo mount /dev/nbd1p2 /mnt/nbd2 #挂载/dev/nbd1p2 $ ls /mnt/nbd2/ #查看/dev/nbd1p2分区中的文件 bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var3.断开磁盘镜像的链接
$ sudo umount /mnt/nbd1 /mnt/nbd2 #取消挂载 $ sudo qemu-nbd -d /dev/nbd1 #取消镜像链接 /dev/nbd1 disconnected方法二:libguestfs 1.安装libguestfs工具
$ sudo apt install libguestfs-tools2.挂载磁盘镜像中的分区到挂载点
语法:guestmount -a 镜像文件 -m 镜像文件内包含的某个分区 [选项] 挂载点
$ sudo mkdir /mnt/a #创建挂载点目录 sudo guestmount -a /XXX/XXX/imgname.qcow2 -m /dev/sda1 /mnt/a #尝试挂载/dev/sda分区,将提示有两个有效的分区/dev/sda1(/boot)和/dev/sda2(/root), libguestfs: error: mount_options: mount exited with status 32: mount: /sysroot: wrong fs type, bad option, bad superblock on /dev/sda, missing codepage or helper program, or other error. guestmount: ‘/dev/sda’ could not be mounted. guestmount: Did you mean to mount one of these filesystems? guestmount: /dev/sda1 (vfat) guestmount: /dev/sda2 (ext4) $ sudo guestmount -a /XXX/XXX/imgname.qcow2 -m /dev/sda2 /mnt/a #将磁盘镜像中包含的/dev/sda2分区挂载到/mnt/a目录 sudo ls /mnt/a bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var
也可以通过-i参数替代-m来实现自动挂载有效分区
$ sudo mkdir /mnt/a #创建挂载点目录 $ sudo guestmount -a /XXX/XXX/imgname.qcow2 -i /mnt/a #将自动将磁盘镜像中最有效的/dev/sda2分区挂载到/mnt/a目录 sudo ls /mnt/a bin boot dev etc home lib lib64 media mnt opt proc root run sbin srv sys tmp usr var3.取消挂载
$ sudo guestunmount /mnt/a



