需求

有2台远程服务器,其中一台(A)磁盘空间小,希望通过公网挂载另一台(B)的磁盘。

NFS 挂载

使用nfs(network file system)网络文件系统工具,通过网络使不同机器或者操作系统之间进行磁盘/目录共享,用于宿主机和目标机之间的文件分享。

安装nfs,服务端&客户端均需要安装

sudo apt install -y  nfs-kernel-server

配置

  • 服务端
在/etc/exports文件添加可以共享的文件夹和允许的客户端地址
/mnt/shared ip-A(rw,no_root_squash,async)
重启nfs服务
service nfs-server restart
  • 客户端
创建挂载的目录
sudo mkdir /mnt/disk
挂载远程磁盘
sudo mount -t nfs ip-B:/mnt/disk /mnt/shared

此时,如果ok,可以直接跳过下面的问题排查。

问题排查

我遇到了挂载失败问题,记录下失败原因和解决办法。 上述命令都是没问题的,不过客户端执行挂载后没反应,长时间阻塞等待后,出现timeout、超时的提示,且未挂载成功,此时则需要抓包排查。 排查的详细步骤不再赘述,总之,防火墙需要开通指定端口:

tcp 2049
tcp/udp 111
udp 4046

对应ufw:
sudo ufw allow from [your_ip]/32 to any port 2049 proto tcp
sudo ufw allow from [your_ip]/32 to any port 111
sudo ufw allow from [your_ip]/32 to any port 4046 proto udp