迄今为止的故事
我们最近从 Linux 笔记本电脑迁移到 Macbook Pro 笔记本电脑(公司 IT 部门不再支持使用 VPN 的原生 Linux 笔记本电脑,因此我们只能使用 Macbook/OSX 设备)。但是,我们所有的开发都需要使用 Ubuntu 和 Debian,因此我们在虚拟机中运行所有内容。我们的计划是使用 QEMU(使用适当的硬件加速hvf
) 轻松按需启动虚拟机。我们可以通过以下方式成功启动虚拟机:
qemu-system-x86_64 \
-m 4096 \
-smp 4\
-accel hvf \
-show-cursor \
-drive file=/public/my_os_disk.qcow2,if=virtio \
-net user,hostfwd=tcp::8022-:22 \
-net nic
这将启动我们的 VM(Ubuntu)实例,它有 4GB RAM、4 个核心、硬件加速,并允许我们ssh
通过进入 VM(从 VM 的角度来看是端口 22)ssh -p8022 username@localhost
。
问题
我们如何在 Linux 客户机上设置 NFS 服务器,以便我们的 Mac/OSX 主机可以共享文件?如果主机也是 Linux,我们可以virtfs
像以前一样使用,但我们的解决方案似乎必须涉及网络。我们在 Ubuntu VM 上设置了 NFS 服务器(使用常见文章,1, 2). 然后我们设置 QEMU 启动器脚本来启用NFS 端口(即 111、2049),如下所示:
qemu-system-x86_64 \
-m 4096 \
-smp 4\
-accel hvf \
-show-cursor \
-drive file=/public/my_os_disk.qcow2,if=virtio \
-net user,hostfwd=tcp::8022-:22,hostfwd=tcp::2049-:2049,hostfwd=tcp::111-:111 \
-net nic
在 Mac 主机(或 OSX 主机)上,我们尝试通过以下方式挂载 NFS 共享(假设 Linux 客户机正在导出/export_from_linux
子网上的路径10.0.100.0/24
):
mount -t nfs localhost:/export_from_linux /my_mac_mount_path
然而,这只是无限期地挂起。
在 Mac/OSX 主机和在 QEMU 中运行的 Linux/Ubuntu 客户机之间建立文件共享方式的最佳方法是什么(最好使用 NFS)?
答案1
您不需要 hostfwd 111,只需 2049,或者您也可以使用从 8049 到 2049 的映射;因为 2049 在 macOS 系统上可能被占用。
因此,至少您需要让 QEMU 为备用 NFS 端口创建一个映射:
-netdev user,hostfwd=tcp::8049-:2049
现在,您可以在 macOS 端的端口 8049 上挂载 NFS;例如,挂载到 Debian NFSv4 服务器:
sudo mount -o port=8049,vers=4,resvport -t nfs 127.0.0.1:/export_from_linux /my_mac_mount_path
请注意,我们正在使用一个选项在 macOS 端强制执行vers=4
(并且您应该在 Linux 端运行与 NSFv4 兼容的服务器;即 Debian 11 的 nfs-kernel-server。
但这里的主要关键是resvport
设置。无论出于什么原因,如果没有此设置,macOS 将无法安装。