脚本宝典收集整理的这篇文章主要介绍了Linux之NFS,脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
容许不同的客户端及服务端通过一组RPC分享相同的文件系统
,容许不同硬件及操作系统的系统共同进行文件的分享。查看系统
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
机器准备
名称 | IP | 描述 |
---|---|---|
Server | 10.100.22.160 | 服务端 |
Client | 10.100.22.161 | 客户端 |
服务端安装:在 CentOS 5.x 以前这个软件称为 portmap,在 CentOS 6.x 之后才称为 rpcbind 的
$ yum install nfs-utils -y
# 设置开机启动
$ systemctl enable nfs
$ systemctl enable rpcbind
# 启动
$ systemctl start rpcbind
$ systemctl start nfs
# 查看NFS开放的端口
$ netstat -tulnp| grep -E '(rpc|nfs)'
服务端配置:主要配置文件时/etc/exports
# 配置一个共享目录
$ mkdir -p /home/data/nfs
$ chmod 755 /home/data/nfs
# 设置导出目录
$ vim /etc/exports
/home/data/nfs 10.100.22.0/24(rw,sync,no_root_squash,no_all_squash)
# 重启nfs
$ systemctl restart nfs
# 检查一下服务端本地的共享目录
$ showmount -e localhost
Export list for localhost:
/home/data/nfs 10.100.22.0/24
/etc/exports
配置说明
/home/data/nfs
: 共享目录位置10.100.0.0/24
: 客户端 IP 范围,* 代表所有,即没有限制rw
: 权限设置,可读可写sync
: 将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;no_root_squash
: 可以使用 root 授权no_all_squash
: 可以使用普通用户授权如果重新处理/etc/exports
,不需要重启NFS(如果重启nfs,要再向RPC注册)
# 重新挂载一次 /etc/exports 的设定
$ exportfs -arv
# 将已经分享的 NFS 目录资源,通通都卸除
$ exportfs -auv
$ showmount -e localhost 看不到任何资源
主要配置文件:/etc/exports,配置文件并没有默认值,也不一定会存在此文件(需手动创建)。格式:<输出目录> [客户端1 选项(访问权限,用户映射,其他)]
NFS 文件系统维护指令:/usr/sbin/exportfs可以利用这个指令重新分享 /etc/exports 变更的目录资源、将 NFS Server 分享的目录卸除或重新分享等等
选项与参数:
-a :全部挂载(或卸除) /etc/exports 档案内的设定
-r :重新挂载 /etc/exports 里面的设定,此外,亦同步更新 /etc/exports
及 /var/lib/nfs/xtab 的内容!
-u :卸除某一目录
-v :在 export 的时候,将分享的目录显示到屏幕上!
分享资源的登录文件:/var/lib/nfs/*tab,NFS 服务器的登录文件都放置到此目录里面
客户端查询服务器分享资源的指令:/usr/sbin/showmount。exportfs 是用在 NFS Server 端,而 showmount 则主要用在 Client 端
查看系统
$ cat /etc/redhat-release
CentOS Linux release 7.9.2009 (Core)
安装,客户端不需要启动NFS服务
$ yum install nfs-utils -y
# 设置开机启动
$ systemctl enable rpcbind
# 启动
$ systemctl start rpcbind
# 查看服务端的共享目录
$ showmount -e 10.100.22.160
Export list for 10.100.22.160:
/home/data/nfs 10.100.0.0/24
# 创建客户端目录
$ mkdir -p /home/client
$ chmod 755 /home/client
# 挂载目录
$ mount -t nfs 10.100.22.160:/home/data/nfs /home/client
# 卸载目录
$ umount /home/client
# 如果NFS Server宕机,需要强制卸载(umount:/mnt:device is busy)
$ umount -lf /mnt
如果挂载出现错误,可以在服务端查看日志
$ cat /var/log/messages | grep mount
测试NFS
# 在客户端共享目录创建一个文件
$ cd /home/client && touch a.txt
# 在服务端
$ cd /home/data/nfs && touch b.txt
$ ll
# 查看NFS的共享状态
$ showmount -e 10.100.22.160
Export list for 10.100.22.160:
/home/data/nfs 10.100.22.0/24
设置自动挂载方法一:缺点是可能偶尔开机挂载不上,除了开机自启动配置,还要对是否挂载进行监控。
$ chmod +x /etc/rc.local
$ echo "#mount by oldboy" >> /etc/rc.local
$ echo "/bin/mount -t nfs nfs 10.100.22.160:/home/data/nfs /home/client" >> /etc/rc.local
$ tail -2 /etc/rc.local
设置自动挂载方法二:理论上开机启动过程中,fstab会优先于网络被Linux系统加载。网络没启动时执行fstab会导致连不上NFS服务器端,无法实现开机挂载。而且,即使是本地的文件系统,也要注意fstab中最后两列要设置0 0。否则有可能导致无法启动服务器的问题。因此,NFS网络文件系统最好不要放到fstab里实现开机挂载
$ vim /etc/fstab
/dev/mapper/centos-root / xfs defaults 0 0
UUID=39bc8e0d-efbd-4915-ae40-83402394aedc /boot xfs defaults 0 0
/dev/mapper/centos-home /home xfs defaults 0 0
/dev/mapper/centos-swap swap swap defaults 0 0
# 末尾新增配置
10.100.22.160:/home/data/nfs /home/client nfs defaults 0 0
$ systemctl daemon-reload
查看
$ mount
...省略...
10.100.22.160:/home/data/nfs on /home/client type nfs4 (rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.100.22.161,local_lock=none,addr=10.100.22.160)
# 可以重启客户端,查看是否生效
$ reboot
$ df -h |grep /home/client
10.100.22.160:/home/data/nfs 78G 357M 78G 1% /home/client
NFS服务端宕机后给NFS客户端带来的问题,NFS服务器宕机后,在客户端访问挂载点会处于挂掉状态,甚至早期系统执行Ctrl+C都无法退出,CentOS7客户端还可能无法重启,这个问题的解决方法有以下几种
在 cat /proc/mounts |grep nfs
找到挂载点,然后执行umount -lf /客户端目录
方式卸载即可
在mount挂载时增加soft或者intr,不让客户端持续呼叫NFS服务器。
如果是fstab里实现的挂载即可在第4列defaults后面增加soft或者intr
$ tail -2 /etc/fstab
10.100.22.160:/home/data/nfs /home/client nfs defaults,soft 0 0
#10.100.22.160:/home/data/nfs /home/client nfs defaults,intr 0 0
查看挂载配置
# 查看NFS服务器端配置参数的细节
$ cat /var/lib/nfs/etab
/home/data/nfs 10.100.22.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,no_root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,no_root_squash,no_all_squash)
# 查看客户端mount的挂载参数细节
$ cat /proc/mounts |grep nfs
sunrpc /var/lib/nfs/rpc_pipefs rpc_pipefs rw,relatime 0 0
10.100.22.160:/home/data/nfs /home/client nfs4 rw,relatime,vers=4.1,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.100.22.161,local_lock=none,addr=10.100.22.160 0 0
mount参数说明
挂载建议
noatime,nodiratime 减少更新访问时间戳产生的磁盘I/O.本地文件系统挂载时不能加odiratime选项,会报错
$ mount -t nfs -o noatime,nodiratime,intr,rsize=131072,wsize=131072
10.100.22.160:/home/data/nfs /home/client
NFS内核优化
cat >>/etc/sysctl.conf<<EOF
net.core.wmem_dafault = 8388608
net.core.rmem_dafault = 8388608
net.core.wmem_max = 16777216
net.core.rmem_max = 16777216
EOF
sysctl -p
Linux NFS 客户端对于同时发起的NFS请求数量进行了控制,若该参数配置较小,会降低 IO 性能。默认系统为2,最大值为256。可以使用root用户执行以下命令来提高该参数的值,取得较好的性能。
$ echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
$ echo "options sunrpc tcp_max_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
$ sysctl -w sunrpc.tcp_slot_table_entries=128
$ cat /proc/sys/sunrpc/tcp_slot_table_entries
以上是脚本宝典为你收集整理的Linux之NFS全部内容,希望文章能够帮你解决Linux之NFS所遇到的问题。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。