挂载 NFS 共享文件夹时 Vagrant Up 挂起 – 如何修复?

今天我用 Arch Linux vagrant box 创建了一个新的虚拟机。 我启动了 Arch Linux 虚拟机 vagrant up 命令,但它没有启动。 每次我尝试启动 VM 时,挂载 NFS 共享文件夹时 vagrant up 都会挂起。 等待超过 5 分钟后,命令以以下错误结束:

 [...]
 ==> default: Mounting NFS shared folders…
 ==> default: Pruning invalid NFS exports. Administrator privileges will be required…
 [sudo] password for sk: 
 ==> default: Removing domain…
 The following SSH command responded with a non-zero exit status.
 Vagrant assumes that this means the command failed!
 mount -o vers=3,udp 192.168.122.1:/home/sk/vagrant/archlinux /vagrant
 Stdout from the command:
 Stderr from the command:
 mount.nfs: Connection refused
挂载 NFS 共享文件夹时 Vagrant up 挂起

如您所见, vagrant up 命令在挂载 NFS 共享文件夹时失败。 我的 KVM 主机是最新的 Fedora 34 版。 我从来没有遇到过 Ubuntu 虚拟机的这个问题。 此错误仅在我启动 Arch Linux 虚拟机时发生。 如果您的 Vagrant 机器在“安装 NFS 共享文件夹”时卡住了,您可以使用下面给出的解决方法。

在 Linux 中挂载 NFS 共享文件夹时,Vagrant up 挂起

这很可能而且更有可能是由您的防火墙引起的。 就我而言,这确实是防火墙问题。 我必须允许以下服务通过防火墙来修复 Vagrant 中安装 NFS 共享文件夹的问题:

  • nfs,
  • 安装,
  • rpc 绑定。

另外,我打开了端口 2049 对彼此而言 tcpudp.

1. 分别运行以下命令,允许上述服务和2049端口。

$ sudo firewall-cmd --permanent --zone=libvirt --add-service=nfs3
$ sudo firewall-cmd --permanent --zone=libvirt --add-service=nfs
$ sudo firewall-cmd --permanent --zone=libvirt --add-service=mountd
$ sudo firewall-cmd --permanent --zone=libvirt --add-service=rpc-bind
$ sudo firewall-cmd --permanent --zone=libvirt --add-port=2049/tcp
$ sudo firewall-cmd --permanent --zone=libvirt --add-port=2049/udp

2.重新加载防火墙规则以使更改生效:

$ sudo firewall-cmd --reload

3. 使用命令查看允许的服务列表:

$ firewall-cmd --list-all

样本输出:

FedoraWorkstation (active)
  target: default
  icmp-block-inversion: no
  interfaces: wlp9s0
  sources: 
  services: dhcpv6-client mdns mountd nfs rpc-bind samba-client ssh
  ports: 1025-65535/udp 1025-65535/tcp
  protocols: 
  forward: no
  masquerade: no
  forward-ports: 
  source-ports: 
  icmp-blocks: 
  rich rules: 

这会在您的主机和 Vagrant 虚拟机之间启用 NFS,并允许 libvirt 托管 Vagrant VM 以使用来自主机系统的 nfs 挂载。

4. 允许nfs服务和相关端口后,我尝试启动Vagrant VM。 这次我遇到了另一个问题:

[...]
mount.nfs: requested NFS version or transport protocol is not supported

5. 要修复此错误,请编辑 /etc/nfs.conf 主机系统中的文件:

$ sudo vi /etc/nfs.conf

6. 取消注释以下两行:

[nfsd]
udp=y

Save 文件和 close 它。

7、重启nfs服务:

$ sudo systemctl restart nfs-server.service

8. 最后,重启主机系统:

$ sudo reboot

就是这样。 现在你应该可以毫无问题地启动 Vagrant 机器了。