Centos 7
Centos7配置nfs服务实现共享文件
将A服务器的文件,通过共享挂载到B服务器的目录下实现文件的同步存取
安装 NFS 服务器所需的软件包
安装nfs:yum -y install nfs-utils rpcbind
实验环境:A: Centos7.6.1810 B:Centos7.6.1810
1.在A,B服务器安装nfs
yum install nfs-utils
#安装此服务时会同时安装rpcbind
- A服务器上
systemctl start nfs
systemctl enable nfs
systemctl start rpcbind
systemctl enable rpcbind
vi /etc/exports
#添加允许B服务器的共享访问
/home *(rw,sync,no_root_squash,no_subtree_check)
/mnt/hgfs *(rw,sync,no_root_squash,no_subtree_check)
systemctl restart nfs
Ubuntu配置NFS服务
1) Ubuntu安装nfs服务器:sudo apt install nfs-kernel-server
2)修改配置文件:sudo vim /etc/exports
eg. /home/embedfire/workdir 192.168.1.*(rw,sync,all_squash,anonuid=1000,anongid=1000,no_subtree_check)
3)重启NFS服务:sudo service nfs-kernel-server restart
1.安装nfs-server
root@MS-HJYOPWFIBZUV:~# apt-get install nfs-kernel-server
root@MS-HJYOPWFIBZUV:~# /etc/init.d/nfs-kernel-server restart
* Stopping NFS kernel daemon [ OK ]
* Unexporting directories for NFS kernel daemon... [ OK ]
* Exporting directories for NFS kernel daemon... [ OK ]
* Starting NFS kernel daemon
* Not starting: portmapper is not running
2.关闭防火墙
root@MS-HJYOPWFIBZUV:~# sudo ufw status
Status: inactive
root@MS-HJYOPWFIBZUV:~# sudo ufw disable
Firewall stopped and disabled on system startup
3.安装并运行rpcbing
Reading package lists... Done
Building dependency tree
Reading state information... Done
E: Unable to locate package rpcbing
root@MS-HJYOPWFIBZUV:~# sudo service rpcbind start
* Starting RPC port mapper daemon rpcbind
ln: failed to create symbolic link '/run/sendsigs.omit.d/rpcbind': No such file or directory [fail]
root@MS-HJYOPWFIBZUV:~# mkdir /run/sendsigs.omit.d
root@MS-HJYOPWFIBZUV:~# touch /run/sendsigs.omit.d/rpcbind
root@MS-HJYOPWFIBZUV:~# sudo service rpcbind start
* Already running: rcpbind
4.启动nfs服务
root@MS-HJYOPWFIBZUV:~# /etc/init.d/nfs-kernel-server restart
* Stopping NFS kernel daemon [ OK ]
* Unexporting directories for NFS kernel daemon... [ OK ]
* Exporting directories for NFS kernel daemon... [ OK ]
* Starting NFS kernel daemon
配置相关
#####配置详解#####
/data IP(option)
共享目录 地址(权限)
权限有:
1.访问权限:
rw:运行读写
ro:只读
2.用户映射权限
no_root_squash:与root_squash相反
root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置)
all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
anongid=xxx:同上
3.其他选项
secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
no_wdelay:若有写操作则立即执行,应与sync配合使用;
subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置)
no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
3.B服务器上
systemctl start nfs
systemctl enable nfs
mkdir /tmp/nfs
mount -t nfs -o nolock 192.168.43.2:/mnt/hgfs /tmp/nfs/
4.配置B开机自动挂载
chmod +x /etc/rc.d/rc.local
vi /etc/rc.d/rc.local
#添加如下内容
mount -t nfs A-IP:/data /data
5.状态相关命令
#查看挂载详情
df -Th
#为rpcbind和nfs做开机启动
systemctl enable rpcbind.service
systemctl enable nfs-server.service
#查看已共享的目录,命令
showmount -e
showmount -e 192.168.43.2
#查看exportfs
exportfs -r
6.设置开机挂载
#参考编辑/etc/fstab
7.No route to host
使用 ping 192.168.1.113 结果是正常的;
其实出现上面的这种原因是防火墙没有关闭;
centos7 和centos6防火墙是不一样的,
centos7是 firewall
centos6是 iptables
#查看默认防火墙状态(关闭后显示notrunning,开启后显示running)
firewall-cmd --state
#启动一个服务:
systemctl start firewalld.service
#关闭一个服务:
systemctl stop firewalld.service
#在开机时启用一个服务:
systemctl enable firewalld.service
#在开机时禁用一个服务:
systemctl disable firewalld.service
8.客户端提示Permission denied
mount -t nfs -o nolock 192.168.43.2:/mnt/hgfs/for_linux /tmp/nfs/
mount: mounting 192.168.43.2:/mnt/hgfs/for_linux on /tmp/nfs/ failed: Permission denied
修改服务端
#强制重新读取/etc/exports文件
exportfs -ra
#提示该信息,需要将/etc/exports中的权限增加fsid即可
exportfs: /mnt/hgfs/for_linux requires fsid= for NFS export
#修改exports
vi /etc/exports
#增加fsid=0,
/home *(rw,sync,no_root_squash,no_subtree_check)
/mnt/hgfs/for_linux *(fsid=0,rw,sync,no_root_squash,no_subtree_check)
#再次重启nfs服务
systemctl restart nfs
Windows配置NFS
1)启用NFS服务:启用或关闭window给功能中勾选NFS
2)映射驱动器中填入\192.168.1.11\mnt
解决中文乱码问题(非必要不改,可能导致其他应用服务不可用)
主要原因是微软NFS协议不支持UTF-8的问题,导致文件乱码,NAS中文件管理器显示正常。
目前WIN10中已含有一个Beta设置,支持全局 UTF-8,修改后即可正常显示,按下Win+R,输入 intl.cpl,点击确定。进入[管理],点击[更改系统区域设置],然后选择Beta版。
解决nfs服务在mount挂载报错failed: Permission denied
我的环境:服务端云服务器,客户端嵌入式设备。
云服务器和云服务器控制台防火墙均关闭,并且输入showmount -e正确显示文件路径,在其他linux主机中输入showmount -e 服务器ip也正确显示文件路径。但在嵌入式设备挂载时报错
mount: mounting x.x.x.x:/home/xx/nfs on /root/nfs failed: Permission denied
在云服务器,通过查看/var/log/syslog发现日志
rpc.mountd[468]: refused mount request from x.x.x.x for /home/xx/nfs (/home/xx/nfs): illegal port 37232
解决方法:
在服务器端修改/etc/exports为
cat /etc/exports
/home/xx/nfs *(rw,sync,no_root_squash,no_subtree_check,insecure)