以下是我常用的在主机的虚拟机间通信(共享文件)的常用方法(未完待续):
通过内建的 Samba 服务器
很少有人知道 QEMU 内置了一个 Samba server, 按如下方式启动 QEMU, 即可启用 它.
或者在旧的 QEMU 中版本中.(未来可能被失效)
之后 GUEST 就可以用 10.0.2.4(默认) 上访问这个文件夹, 例如在 Windows Explorer 中, 可以用 \\10.0.2.4, 在 gnome nautilus 中可以用 smb://10.0.2.4 访问.
更过的细节:
通过主机的 Samba Server
这种方式很简单, 把主机的 Samba server 打开, 在 Guest 里面就可以用 10.0.2.2 访问
通过主机SSH
同上, 在 Guest 中, 用 ssh 协议访问 10.0.2.2(Host IP) 这个 IP 地址
通过客户机 SSH(主机的端口转发)
QEMU 将会在 3456 端口监听, 收到数据后把所有端口转发到 Guest 的 22 端口.
在 Guest 上启动 ssh server, 然后在主机上就可以用下列的指令访问了.
qemu-nbd
qemu-nbd 是一个能使用 NBD 协议将 QEMU Image 导出的工具.
加载 nbd 驱动
某些版本的 linux 不加 max_part 参数会导致没有没有设备节点 /dev/nbd0p{1,2,3,4…} 等. 用 kpartx 也不行.
连接 qemu-nbd
libgustfs
是一个想要一统天下的虚拟机镜像查看/修改工具, 号称支持几乎所有 类型的虚拟机镜像, 在它面前 qemu-nbd 弱爆了. 分析它显然超出了这篇文档的范围. 过后将会专门写一篇文章来分析它, 以下简单的提供一种利用 libguestfs 来访问 虚拟机镜像的方法.
首先, 安装它
然后使用以下指令启动 guestfs 的命令行,
打开另外一个终端, 在 /tmp/mnt 里面就可以看到导出的文件了, 由于是读写方式的挂载, 可以在里面像在本地一样的读写文件, 完成后 使用下面指令卸载
执行后, 上面的 loop 就会结束
启动虚拟机后, 所有的更改都会生效.