Linux【6】-硬盘管理4-2-NFS的部署
NFS(Network File System)可以方便地将计算机上的指定文件夹共享给网络上的其它计算机。
NFS 至少有两个主要部分: 一台服务器和一台(或者更多)客户机。客户机 远程访问存放在服务器上的数据。
一、服务端(master服务器)
1.安装相应的软件
yum install -y nfs_utils
yum install rpcbind (系统默认已经有了,可查看下)
2.创建文件夹
例如准备将 /share 目录共享
# mkdir /share
# chmod 1777 /share
3.修改配置文件
通过修改配置文件 /etc/exports 来共享指定的文件夹。在该配置文件中添加以下一行内容(容许可以访问的ip地址,以及其权限):
/share 192.168.30.0/24(rw,sync,no_root_squash,no_subtree_check)
/share 192.168.30.2/24(rw,sync,no_root_squash,no_subtree_check)
/share 192.168.30.3/255(rw,sync,no_root_squash,no_subtree_check)
/share 192.168.30.4/255(rw,sync,no_root_squash,no_subtree_check)
如果修改了/etc/exports,则需要systemctl restart nfs 来使其生效
当前主机的IP是192.168.30.1,以上配置信息表示将当前主机的 /share 目录共享给同一个局域网内指定IP段的计算机(上面是指定给192.168.30.0可以访问192.168.30.1的share文件),且其权限如下:
rw
可读可写。
ro
只读。
sync
将数据同步写入到内存和磁盘中。
async
将数据会先暂存于内存中,必要时才写入磁盘。
no_root_squash
若客户端使用root用户操作共享文件夹的时候,具有最大权限。
root_squash(默认)
若客户端使用root用户操作共享文件夹的时候,将其身份设定成匿名用户nfsnobody,降低权限。
no_all_squash(默认)
访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组。
all_squash
客户端的使用者用户统一被转换成匿名用户nfsnobody。
subtree_check (默认)
若输出目录是一个子目录,则nfs服务器将检查其父目录的权限。
no_subtree_check
即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率。
4.固定端口
固定端口nfs 2049、portmapper111 另外3个服务端口可设置为mountd 892、rquotad 875、 nlockmgr 32803、32769
由于NFS服务的目的是能对多台服务端计算机共享nfs服务器的指定目录,它需要随机取用多个小于1024的端口来传输数据。而这些端口的开放是不固定的,为了让客户端能连接上正确的端口,则需要开启nfs服务的同时开启RPC(Remote Procedure Call)服务。
具体配置:
修改/etc/sysconfig/nfs文件,将下列内容的注释去掉,如果没有则添加:
RQUOTAD_PORT=875
LOCKD_TCPPORT=32803
LOCKD_UDPPORT=32769
MOUNTD_PORT=892
5.设置防火墙
#portmap:111 #nfsd:2049 #rquotad:875 #mountd:892 #lockd:32803/tcp 32769 /udp
firewall-cmd --zone=public --add-port=111/tcp --add-port=111/udp --add-port=2049/tcp --add-port=2049/udp--add-port=875/tcp --add-port=875/udp --add-port=892/tcp --add-port=892/udp--add-port=32803/tcp --add-port=32769/udp --permanent
如果哪天要移除的话:
firewall-cmd --zone=public --remove-port=111/tcp--remove-port=111/udp --remove-port=2049/tcp --remove-port=2049/udp --remove-port=875/tcp--remove-port=875/udp --remove-port=892/tcp --remove-port=892/udp --remove-port=32803/tcp--remove-port=32769/udp --permanent
重启服务:
firewall-cmd --reload
6.启动服务
systemctl start rpcbind
systemctl start nfs
设置开机启动:
systemctl enable rpcbind
systemctl enable nfs-server.service
查看服务状态:
netstat -lt
如果出现如下内容则配置成功
tcp 0 0 *:nfs *:* LISTEN
二、客户端的配置
安装:
yum install -y nfs_utils
yum install rpcbind
启动服务:
systemctl start rpcbind #centos6.5 #service rpcbind start
systemctl start nfs #centos6.5 #service nfs start
systemctl enable rpcbind #centos6.5 #chkconfig rpcbind on
systemctl enable nfs-server.service #centos6.5 #chkconfignfs on 查看#chkconfig --list
挂载:
mount -t nfs 192.111.134.1:/usr/nfsShare /usr/test
查看客户端/usr/test是否已经挂载成功
设置开机自动挂载
vi /etc/fstab
添加:
192.111.134.1:/usr/nfsShare /usr/test nfs defaults 0 0
其他:
关闭挂载:umount /usr/shareNFS nfs
三、NFS相关
1.查看nfs版本
服务器端使用:
nfsstat -s
客户端使用:
nfsstat -c
四、报错
1. nfs4_reclaim_open_state: Lock reclaim failed
方法一 (未验证)
这个报错的原因是啥,我到现在也没搞定,有可能是内核的冲突。反正重启电脑了,这个问题就暂时不存在了。在网上搜到一个版本,不知道好不好使,先放在这,下次遇到的时候,可以试一下。
vim /etc/fstab
将
nfsserverip:/export/homes /home nfs rw 0 0
Changed to:
改成:
nfsserverip:/export/homes /home nfs nfsvers=3,rw 0 0
方法二(暂时好使)
NFS 的默认传输协议是 UDP,在一些特定的情况下网络不好,或者传输文件较大时会出现这种情况。原因可能是和服务端网卡传输速率冲突,使得目标机需要大量时间复制大量数据包。
fuser -m -v -k /data/ # kill掉进程,再unmount
umount /data/
mount -t nfs -o tcp,nolock id地址:/data/ /data/
3.挂载的硬盘非常卡,都没法使用ll 等命令
查看nfS的配置跟其他的几点是否一致:
grep nfs /proc/mounts
未找到原因,将NFS的协议从4改到3,已解决
mount -t nfs -o tcp,nolock,vers=3 ***:/test /mnt/nfs
4.解决mount时发生错误wrong fs type, bad option, bad superblock
centos中安装nfs-utils:
yum install nfs-utils
参考资料
个人公众号,比较懒,很少更新,可以在上面提问题,如果回复不及时,可发邮件给我: tiehan@sina.cn