搭建NFS服务器
搭建内网 NFS,让文件存储变得简单。
描述
NFS是什么?
NFS即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源.
在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
NFS作为备份服务的不足:
- 实时性及可靠性相较于NFS+rsync+inotify方案要差些;
- 共享盘一直挂载,浪费资源,可通过autofs解决.
- 未卸载挂载盘,关闭客户端机器需要等待很久…
安装NFS服务端
以下操作在树梅派上执行,至于为什么不将NFS服务端安装在本机,是因为 “不 想 装 在 本 机” ^^^^
安装NFS所需的软件包
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nsf-common portmap nfs-kernel-server
这样NFS就安装完成了.
创建共享目录
sudo mkdir -p /home/pi/docNFS
sudo chmod -R 777 /home/pi/docNFS
不给共享目录赋权,在客户端mount时会报错access denied by server while mounting
配置NFS
sudo vim /etc/exports
在末尾添加
/home/pi/docNFS 192.168.1.0/24(insecure,rw,async,no_root_squash)
使配置文件生效:
exportfs -arv
exportfs -aru
卸载全部的共享资源
启动rpcbind及NFS
sudo /etc/init.d/rpcbind start
sudo /etc/init.d/nfs-kernel-server start
或者使用sudo service rpcbind start
查看rpcbind及NFS状态
sudo /etc/init.d/rpcbind status
#显示Active: active (running)即正常sudo rpcinfo -p localhost
#查看NFS服务项rpc服务器注册的端口sudo /etc/init.d/nfs-kernel-server status
#NFS状态sudo netstat -lntup|grep nfs
#查看NFS端口启动(FNS默认端口为2049)sudo netstat -lntup |grep rpcbind
# 111是rpcbind的主端口sudo showmount -e 127.0.0.1
# sudo showmount -e localhost 查看本机挂载情况sudo mount -t nfs 192.168.1.88:/home/pi/docNFS /mnt/docNFS
# 在本机测试挂载
开机启动rpcbind
sudo update-rc.d rpcbind enable
sudo service rpcbind restart
查看nfs版本号
在nfs的客户端上可通过
nfsstat -m
查看在nfs服务端上可通过
nfsstat -s
查看
安装NFS客户端
在客户端(个人电脑)上执行如下操作:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install nfs-common
mkdir -p /home/xujh/docNFS
sudo mount -t nfs 192.168.1.88:/home/pi/docNFS /home/xujh/docNFS
取消挂载:
sudo umount /home/xujh/testNFS
查看NFS服务端挂载:
sudo showmount -e 192.168.1.88
可通过df命令查看客户端上是否正确挂载了NFS
autofs自动挂载
安装autofs
sudo dpkg -l |grep autofs
sudo apt-get install autofs
配置/etc/autofs
sudo vim /etc/auto.master
添加如下内容
/home/xujh/docNFS /etc/auto.nfs
提示
/home/xujh/docNFS 文件不要事先创建,因为autofs会自动创建,/etc/auto.nfs文件名可自定义.
配置子配置文件
这里的子配置文件指的是/etc/auto.master
的/etc/auto.nfs
文件
sudo vim /etc/auto.nfs
添加内容如下:
hexobak -rw,bg,soft,rsize=10240,wsize=10240 192.168.1.88:/home/pi/docNFS
bg表示后台运行;soft表示RPC会在time out后重复呼叫而非持续呼叫;rsize和wsize会提升NFS的传输能力.
设置NFS闲置时间
sudo vim /etc/autofs.conf
修改原来的timeout = 300
改为3,大概是在15行
timeout = 3
##闲置3秒后系统自动卸载网络设备
这里设置3妙是为了测试autofs是否会自动挂载NFS共享目录,实际工作中建议设置为600
如何使用autofs自动挂载
sudo /etc/init.d/autofs restart
cd /home/xujh/docNFS
# autofs会自动创建/home/xujh/docNFS
cd /home/xujh/docNFS/hexobak
# autofs会自动挂载NFS共享目录
这里不是非要使用cd命令,也可以是ls等命令,只要是涉及读写/home/xujh/docNFS文件的操作都可触发autofs
开机挂载NFS共享目录(非必须)
推荐使用autofs工具在需要的时候进行挂载
sudo vim /etc/rc.d/rc.local
添加
mount -t nfs 192.168.1.88:/home/pi/docNFS /home/xujh/docNFS
建议不要把挂载命令放在/etc/fstab
,因为fstab比网络先启动,会出现挂载不上网络NFS,
如果非要在此处添加可在其里面添加192.168.1.88:/home/pi/docNFS /mnt/docNFS nfs rsize=8192,wsize=8192,timeo=14,intr 0 0
常见错误
access denied by server while mounting
常见错误原因:
- 使用了非法端口,也就是使用了大于1024的端口。 这个错误,可以通过查看日志确认:
cat /var/log/messages | grep mount
Jan 2 12:49:04 localhost mountd[1644]: refused mount request from 192.168.0.100 for /home/nfsshare/ (/home/nfsshare): illegal port 1689
解决办法:
修改配置文件/etc/exports
,加入 insecure
选项,重启nfs服务,再尝试挂载。
/home/nfsshare/ *(insecure,rw,async,no_root_squash)
- NFS版本问题
编辑/etc/sysconfig/nfs
文件,找到下面:
#Turn off v2 and v3 protocol support
#RPCNFSDARGS="-N 2 -N 3"
#Turn off v4 protocol support
#RPCNFSDARGS="-N 4" /*把这句前面的#号去掉*/
最后保存,重启nfs服务,再尝试挂载;如果挂载不上,可尝试在后面加-o nolock参数。
查看客户端挂载的目录是否具备读写权限,添加相应权限即可。
nfs服务器上的/etc/hosts中设置了客户端机器IP对应域名,去掉即可。
通过以上这几种方法,access denied by server while mounting这个错误应该可以得到解决了。
umount device is busy
fuser -m /home/xujh/docNFS
显示结果为
/home/xujh/docNFS: 15639c
上面结果代表的是 process 25023(pid) 有使用到此目录, 后面 c 代表的意思可参考下述:
- c: current directory.
- e: executable being run.
- f: open file. f is omitted in default display mode.
- F: open file for writing. F is omitted in default display mode.
- r: root directory.
- m: mmap’ed file or shared library.
要把这个资源释放的话, 可以有下述做法:
- kill -9 25023 # ps aux | grep 25023 应该就会看到它
- fuser -m -v -i -k /media/share # 会问你是不是要把 25023 这个 kill 掉, 选 y 就会 kill 掉
提示信息如下:
USER PID ACCESS COMMAND
/meida/share: root 25023 ..c.. bash
Kill process 25023 ? (y/N) y
rm:Device or resource busy
sudo /etc/init.d/autofs stop
sudo rm -rf ~/docNFS/
必须先停掉autofs服务才能删除共享目录