首先我说下我的使用需求:我在VPS2上通过NFS挂载VPS1的文件到本地,然后使用可道云KODBOX分享,达到大流量机挂载大盘鸡来做网盘的效果。
如果你只是单纯的挂载其他小机的硬盘到本,也可以用我下面的方法。我之前试过可道云的WEBDAV挂载,我发现性能损失比较大,所以才学习NFS挂载。

环境:Debian 12 X64
服务端指我的大盘鸡,客户端指我的其他小机,用来挂载大盘鸡文件夹。

1、服务端安装NFS

使用命令安装NFS的服务端

apt-get update
apt-get install nfs-kernel-server
apt-get install nano

我直接是把已有的目录进行分享,比如我要把/www/wwwroot/WJCK_RC分享出去,需要如下操作。配置NFS服务端配置文件

nano /etc/exports

输入

/www/wwwroot/WJCK_RC 客户端IP(ro,sync,no_root_squash,no_subtree_check)
如
/www/wwwroot/WJCK_RC 74.48.100.100(ro,sync,no_root_squash,no_subtree_check)

注意路径后面是有空格的。

注:ro指的只读挂载,ra是读写挂载,我没有写的需求,所以用的ro,后面的参数不需要修改,参数解释可以看本文末尾的参考文章。
你要挂载多个目录你就多写几行就行。

然后使用Ctrl+O保存,直接回车就行,然后Ctrl+X退出。使用

systemctl restart nfs-kernel-server

重启下服务端,让他加载配置。最后需要配置下防火墙,有些发行版没有安装防火墙,可以跳过,如果后面客户端一直挂载不上,那可能是服务端没开端口。不同的发行版操作不一样,总之放行2049端口就行,我使用宝塔面板放行的。

2、客户端配置

我想把服务端的/www/wwwroot/WJCK_RC挂载到本地的/www/wwwroot/YC_WJCK怎么操作那,首先你要在本地新建YC_WJCK文件夹,然后安装NFS客户端:

apt-get update
apt-get install nfs-common
apt-get install nano

我们先临时挂载下看下有没有问题

mount -t nfs 服务端IP:/www/wwwroot/WJCK_RC /www/wwwroot/YC_WJCK

注意路径之间有空格的,输入完成后没问题的话他不会报错,我们使用df -h命令查看挂载,返回如下

root@RN-USA-LA-FD:~# df -h
Filesystem                         Size  Used Avail Use% Mounted on
udev                               965M     0  965M   0% /dev
tmpfs                              197M  456K  197M   1% /run
/dev/vda1                           21G  4.5G   16G  24% /
tmpfs                              984M  4.0K  984M   1% /dev/shm
tmpfs                              5.0M     0  5.0M   0% /run/lock
45.138.***.***:/www/wwwroot/WJCK_RC   44G  7.2G   34G  18% /www/wwwroot/YC_WJCK
tmpfs                              197M     0  197M   0% /run/user/0
root@RN-USA-LA-FD:~#

说明已经挂载成功了,但这样重启后就会失去挂载,如果需要开机自动挂载,需如下操作

nano /etc/fstab

移动光标到最下面,输入

客户端IP:/www/wwwroot/WJCK_RC /www/wwwroot/YC_WJCK nfs auto,nofail,noatime,nolock,intr,tcp,actimeo=1800 0 0

然后Ctrl+O回车保存,Ctrl+X退出。那后面auto,nofail,noatime,nolock,intr,tcp,actimeo=1800这里是挂载参数,最好不要去改,具体参数解释可以看我参考文章。这样挂载有个问题,如果服务端掉线了,我们切到挂载的/www/wwwroot/YC_WJCK里执行ls这些命令时会直接卡住假死,没法操作,只能结束NFS的进程,因为我这里只需要只读,所以我把参数加了个soft,变成了auto,soft,nofail,noatime,nolock,intr,tcp,actimeo=1800,这样如果服务端掉线了,客户端在一定时间后会自动抛出错误,结束链接,防止假死,如果是读写挂载请不要这样操作,极端情况下会丢失数据。

完成上述操作后,就可以重启客户端,看是否能自动挂载了,也可以使用mount -l查看挂载参数,返回数据比较多,里面找到我们挂载的盘

45.138.***.34:/www/wwwroot/WJCK_RC on /www/wwwroot/YC_WJCK type nfs4 (rw,noatime,vers=4.2,rsize=524288,wsize=524288,namlen=255,acregmin=1800,acregmax=1800,acdirmin=1800,acdirmax=1800,soft,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=74.48.100.100,local_lock=none,addr=45.138.***.34)

到此,教程结束。这里多说一下KODBOX我遇到的坑,主要表现在通过NFS挂载后,分享文件,但是下载速度不快,两个以上同时下载时,没法下载,没速度。这主要是NFS有缓存,我又按官方开了nginx下载优化

# 默认web目录所有文件加入下载加速支持;
location /www{
    alias /www;
    internal;#重要,仅nginx内部访问
}

/data/config/setting_user.php中的
$config['settings']['upload']['httpSendFile'] = true;
,导致NFS的缓存没在/www目录下,导致下载卡住,删除以上代码就行了。

参考文献:

https://www.digitalocean.com/community/tutorials/how-to-set-up-an-nfs-mount-on-ubuntu-22-04
https://hostloc.com/forum.php?mod=viewthread&tid=624063&highlight=nfs
https://www.cnblogs.com/nulige/articles/12543142.html
https://help.aliyun.com/zh/nas/user-guide/mount-an-nfs-file-system-on-a-linux-ecs-instance?spm=a2c4g.11186623.0.0.7c351f34bRHXRn#46d5a79554tnv
https://bbs.huaweicloud.com/blogs/114222

最后修改:2024 年 12 月 21 日
如果觉得我的文章对你有用,请随意赞赏