如何从外部查看 QEMU/KVM VM 的实时文件系统?

如何从外部查看 QEMU/KVM VM 的实时文件系统?

我需要查看 QEMU/KVM(作为virt-managerGUI)Ubuntu VM 的文件系统,并实时更新信息。但我需要从 VM(在主机中)外部查看此信息。也就是说,从 VM 内部查看信息并不可行,而是从主机中查看。有什么办法吗?主机和客户机都将是带有 GNOME 3.22 的 Ubuntu GNOME 16.10。

虽然这是为了渗透测试的目的,但客户机可能会有所不同,尽管它可能只在 Ubuntu 版本之间有所不同。

答案1

在 virt-manager 中,您可以在 VM/磁盘的配置中找到相应文件的路径(类似于“源路径”);默认路径是/var/lib/libvirt/images/。找出虚拟磁盘映像的名称。

假设图像路径是/var/lib/libvirt/images/disk1.qcow2(我假设这里是 qcow2 格式)。

首先libguestfs-tools在主机上安装:

sudo apt-get install libguestfs-tools

然后您可以通过以下方式挂载虚拟磁盘

sudo guestmount -a <image-file> -m <device> --ro /mnt

其中<image-file>表示磁盘映像的完整路径和<device>要挂载的分区的设备名称。如果您不知道设备名称,可以输入任何名称来列出有效设备,例如

sudo guestmount -a /var/lib/libvirt/images/disk1.qcow2 -m any --ro /mnt

这将给你类似

libguestfs: error: mount_options: mount_options_stub: any: expecting a device name
guestmount: 'any' could not be mounted.
guestmount: Did you mean to mount one of these filesystems?
guestmount:     /dev/sda1 (ext2)
guestmount:     /dev/sda2 (ext2)

要挂载第一个分区,你需要执行

sudo guestmount -a /var/lib/libvirt/images/disk1.qcow2 -m /dev/sda1 --ro /mnt

现在您可以在 /mnt 中以只读模式访问文件系统。

重要提示:当以这种方式安装正在运行的虚拟机的磁盘时,必须指定“--ro”表示只读,否则文件系统可能会损坏。

如果有多个磁盘,您可以输入虚拟域的名称,而不是使用虚拟磁盘文件的名称。假设您的虚拟域的名称是myvm,您可以发出

sudo guestmount -d myvm -m any --ro /mnt

什么会给你类似

guestmount: 'any' could not be mounted.
guestmount: Did you mean to mount one of these filesystems?
guestmount:     /dev/sdb (iso9660)
guestmount:     /dev/sda1 (ext4)
guestmount:     /dev/sda2 (unknown)
guestmount:     /dev/sda5 (swap)
guestmount:     /dev/sdc1 (ext4)
guestmount:     /dev/sdc2 (unknown)
guestmount:     /dev/sdc5 (swap)
guestmount:     /dev/sdd1 (ext2)
guestmount:     /dev/sdd2 (ext2)

现在要挂载 /dev/sdc1(从虚拟机视图来看),您可以发出

sudo guestmount -d myvm -m /dev/sdc1 --ro /mnt

这应该可以解决问题。

相关内容