首先我说下我的使用需求:我在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