我已经从 WSL1 切换到 WSL2,并按照性能方面的建议将项目文件移到了 WSL2 中。我在 Windows 端(CentOS 7 客户机)安装了 VirtualBox,在 WSL2 中安装了 Vagrant,并进行了适当的导出,以便它们相互通信。我甚至解决了网络问题,但我只是不能弄清楚当文件现在驻留在这里时如何让 vagrant 文件同步在 WSL2 中工作。
当我使用 vagrant up 时,出现一个错误,提示不支持此功能,因为文件位于 WSL2 中,而不是 DrvFs 挂载:
The host path of the shared folder is not supported from WSL. Host path of the shared folder must be located on a file system with DrvFs type.
除了将文件移回 Windows 端,我怎样才能让它正常工作?
我尝试了 SMB 类型,但得到:
It appears your machine doesn't support SMB
鉴于主机是 Windows,我发现这很难令人相信。Samba/cifs-utils 也安装在客户机中。
NFS 类型给出类似的错误:
It appears your machine doesn't support NFS
在这里我尝试了 vagrant nfs 插件,但它也没有起作用。
rsync 类型可以工作,但不是一个很好的解决方案,并且每次运行时都会不断提示我输入 vagrant 用户密码。
现在我又回到了 WSL1,直到解决最后一点。
答案1
从 WSL2 中的目录创建到 9P 挂载的 Windows 目录的符号链接,并配置 vagrant 通过符号链接进行操作:
ln -s /home/jamie/projects /mnt/d/projects
config.vm.synced_folder "/mnt/d/projects/foo", "/var/www" ...
答案2
- 主机操作系统:Windows 11 Pro 22H2
- VirtualBox:6.1.40
- Vagrant(主机/WSL):2.2.19
- 客户操作系统:Ubuntu 22.04(通过 WSL2)
遇到了同样的问题,尝试使用 NFS 安装 DrvFs。符号链接也不起作用。
毕竟,标准同步文件夹(无 NFS/无 SMB)对我来说是有用的:
config.vm.synced_folder ".", "/vagrant", disabled: false
然后,为了调整 Ubuntu 中挂载目录的权限,我使用绑定文件系统:
vagrant plugin install vagrant-bindfs
并指定您的选项Vagrant文件:
# https://bindfs.org/docs/bindfs-help.txt
config.bindfs.bind_folder "/vagrant", "/var/www/myproject",
u: "vagrant",
g: "www-data",
p: "0774",
chown_ignore: true,
chgrp_ignore: true,
chmod_ignore: true
两个方向均可顺利运行。