我需要查看 QEMU/KVM(作为virt-manager
GUI)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
这应该可以解决问题。