一、工作原理
1.NFS服务工作流程
2.NFS服务工作原理
二、RPC服务
1.RPC服务端口
默认端口:111
[root@nfs01 /]# systemctl restart rpcbind
[root@nfs01 /]# rpcinfo -p 172.16.1.131
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
2.RPC服务版本
Cent OS 5: portmap
Cent OS 6 & 7: rpcbind
3.RPC服务命令
rpcinfo IP地址 查询rpc服务注册信息
- -p 使用 rpcbind 协议的第 2 版本样式来探测 rpcbind
[root@nfs01 /]# systemctl restart rpcbind
[root@nfs01 /]# systemctl restart nfs
[root@nfs01 /]# rpcinfo -p 172.16.1.131 | egrep 'nfs|portmapper'
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
三、NFS服务相关文件及命令
1.服务端
- /var/lib/nfs/etab NFS服务端共享目录信息记录文件
[root@nfs01 /upload]# tail /var/lib/nfs/etab
/upload 172.16.1.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,secure,root_squash,no_all_squash)
以上为NFS服务缺省参数
- /etc/exports NFS服务端配置文件
NFS服务配置文件格式
共享目录 允许IP地址/子网掩码(参1,参2...)
|
[root@nfs01 /upload]# cat /etc/exports
#/var/www/images @ web01 share with /upload @ localhost
/upload 172.16.1.0/24(rw)
2.客户端
- /proc/mounts NFS客户端挂载信息记录文件
[root@web01 /var/www/images]# tail -2 /proc/mounts | head -1
172.16.1.131:/upload /var/www/images nfs4 rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.17,local_lock=none,addr=172.16.1.131 0 0
3.NFS服务命令
showmount IP地址 查询NFS服务器的相关信息
- -e 显示NFS服务器的共享目录
[root@nfs01 /]# showmount -e 172.16.1.131
Export list for 172.16.1.131:
/upload 172.16.1.0/24
四、NFS服务配置文件主要参数
- rw 读写权限
- ro 只读权限
- sync 同步(系统默认值)
同步:请求或写入数据时,数据同步写到NFS服务端硬盘后才返回
优点:数据安全不会丢
缺点:性能较异步要差
|
- async 异步
异步:写入数据时,数据暂时存放在内存缓冲区,NFS服务端硬盘空闲时,再写入磁盘
优点:写入效率提高
缺点:服务器宕机或非正常关机时,缓冲区数据丢失
|
- no_root_squash 保持root用户不压缩
- root_squash 保持root用户压缩(系统默认值)
- no_all_squash 保持所有用户不压缩(系统默认值)
- all_squash 保持所有用户压缩
压缩:代指转换该用户 - anonuid=UID 指定压缩用户的UID,默认是nfsnobody(UID=65534)
- anongid=GID 指定压缩用户的GID,默认是nfsnobody(GID=65534)
该UID和GID必须是共享目录的属主和属组 |
五、NFS服务挂载相关参数
1.性能相关
- rsize 指定NFS每次读的容量(单位:字节)
- wsize 指定NFS每次写的容量(单位:字节)
rsize和wsize的容量至少≥131072 |
- noatime 不更新文件的访问时间
- nodiratime 不更新目录的访问时间
2.安全相关
- nosuid 去掉文件的特殊权限
- noexec 去掉文件的执行权限
- nodev 去掉文件的特殊设备属性
[root@web01 ~]# mount -o rsize=131072,wsize=131072,noatime,nodiratime,nosuid,noexec,nodev 172.16.1.131:/upload /var/www/images/
[root@web01 ~]# grep '/upload' /proc/mounts
172.16.1.131:/upload /var/www/images nfs4 rw,nosuid,nodev,noexec,noatime,nodiratime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.17,local_lock=none,addr=172.16.1.131 0 0
[root@web01 ~]# cp /bin/ls /var/www/images/
[root@web01 ~]# cd /var/www/images/
[root@web01 /var/www/images]# ll
total 116
-rw-r--r-- 1 www www 0 Jun 21 16:16 aspen.txt
-rwxr-xr-x 1 www www 117680 Jun 21 16:36 ls
[root@web01 /var/www/images]# ./ls
-bash: ./ls: Permission denied
-----------------------------------------------------------------------------------------------------------------------
[root@web01 ~]# tail -1 /etc/fstab
172.16.1.131:/upload /var/www/images nfs rsize=131072,wsize=131072,noatime,nodiratime,noexec,nosuid,nodev 0 0
[root@web01 ~]# grep 'upload' /proc/mounts
172.16.1.131:/upload /var/www/images nfs4 rw,nosuid,nodev,noexec,noatime,nodiratime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=172.16.1.17,local_lock=none,addr=172.16.1.131 0 0
[root@web01 /var/www/images]# cp /bin/pwd ./
[root@web01 /var/www/images]# ll
total 152
-rw-r--r-- 1 www www 0 Jun 21 16:16 aspen.txt
-rwxr-xr-x 1 www www 117680 Jun 21 16:36 ls
-rwxr-xr-x 1 www www 33280 Jun 21 16:47 pwd
[root@web01 /var/www/images]# ./pwd
-bash: ./pwd: Permission denied
六、NFS服务部署流程
1.服务端
step1:安装RPC服务和NFS服务
安装NFS服务后,默认创建nfsnobody用户
yum install -y rpcbind nfs-utils |
[root@nfs01 /]# yum install -y nfs-utils.x86_64 rpcbind.x86_64
Loaded plugins: fastestmirror
Determining fastest mirrors
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
......
Installed:
nfs-utils.x86_64 1:1.3.0-0.61.el7 rpcbind.x86_64 0:0.2.0-47.el7
Dependency Installed:
gssproxy.x86_64 0:0.7.0-21.el7 keyutils.x86_64 0:1.5.8-3.el7
libbasicobjects.x86_64 0:0.1.1-32.el7 libcollection.x86_64 0:0.7.0-32.el7
libevent.x86_64 0:2.0.21-4.el7 libini_config.x86_64 0:1.3.1-32.el7
libnfsidmap.x86_64 0:0.25-19.el7 libpath_utils.x86_64 0:0.2.1-32.el7
libref_array.x86_64 0:0.1.5-32.el7 libtirpc.x86_64 0:0.2.4-0.15.el7
libverto-libevent.x86_64 0:0.2.5-4.el7 quota.x86_64 1:4.01-17.el7
quota-nls.noarch 1:4.01-17.el7 tcp_wrappers.x86_64 0:7.6-77.el7
Complete!
step2:启动RPC服务
systemctl restart rpcbind |
[root@nfs01 /]# systemctl restart rpcbind
[root@nfs01 /]# rpcinfo -p 172.16.1.131
program vers proto port service
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
step3:启动NFS服务
systemctl restart nfs |
[root@nfs01 /]# systemctl restart nfs
[root@nfs01 /]# rpcinfo -p 172.16.1.131 | grep nfs
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
step4:修改NFS配置文件(/etc/exports)
不指定NFS服务的UID与GID,默认使用nfsnobody用户
vim /etc/exports |
[root@nfs01 /]# groupadd -g 2000 www
[root@nfs01 /]# useradd -Ms /nologin -u 2000 -g www www
[root@nfs01 /]# vim /etc/exports
#/var/www/images @ web01 share with /upload @ localhost
/upload 172.16.1.0/24(rw,sync,anonuid=2000,anongid=2000)
step5:创建共享目录,并修改目录的属主和属组为nfs配置文件中指定用户
mkdir -p 目录 chown 属主.属组 目录 |
[root@nfs01 /]# chown www.www /upload/
[root@nfs01 /]# ll -d /upload/
drwxr-xr-x 2 www www 6 Jun 21 14:53 /upload/
step6:重启NFS服务
systemctl reload nfs
NFS服务不要用restart强制重启,会造成系统卡死90s;因为系统对NFS服务有一个90s的保护时间
|
[root@nfs01 /]# systemctl reload nfs
[root@nfs01 /]# showmount -e 172.16.1.131
Export list for 172.16.1.131:
/upload 172.16.1.0/24
step7:本地测试
mount -t nfs IP:目录 本地挂载点 touch 文件 本地挂载点 |
[root@nfs01 /]# mount -t nfs 172.16.1.131:/upload /mnt
[root@nfs01 /]# touch /mnt/image{1..5}.jpg
[root@nfs01 /]# ll /upload/
total 0
-rw-r--r-- 1 www www 0 Jun 21 14:57 image1.jpg
-rw-r--r-- 1 www www 0 Jun 21 14:57 image2.jpg
-rw-r--r-- 1 www www 0 Jun 21 14:57 image3.jpg
-rw-r--r-- 1 www www 0 Jun 21 14:57 image4.jpg
-rw-r--r-- 1 www www 0 Jun 21 14:57 image5.jpg
step8:nfs服务和rpcbind服务开机自启动
[root@nfs01 ~]# systemctl start rpcbind
[root@nfs01 ~]# systemctl enable rpcbind
[root@nfs01 ~]# systemctl start nfs
[root@nfs01 ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
2.客户端
step1:安装NFS服务
安装NFS服务后,默认创建nfsnobody用户
yum install -y nfs-utils |
[root@web01 ~]# yum install -y nfs-utils.x86_64
Loaded plugins: fastestmirror
Determining fastest mirrors
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
......
Installed:
nfs-utils.x86_64 1:1.3.0-0.61.el7
Dependency Installed:
gssproxy.x86_64 0:0.7.0-21.el7 keyutils.x86_64 0:1.5.8-3.el7
libbasicobjects.x86_64 0:0.1.1-32.el7 libcollection.x86_64 0:0.7.0-32.el7
libevent.x86_64 0:2.0.21-4.el7 libini_config.x86_64 0:1.3.1-32.el7
libnfsidmap.x86_64 0:0.25-19.el7 libpath_utils.x86_64 0:0.2.1-32.el7
libref_array.x86_64 0:0.1.5-32.el7 libtirpc.x86_64 0:0.2.4-0.15.el7
libverto-libevent.x86_64 0:0.2.5-4.el7 quota.x86_64 1:4.01-17.el7
quota-nls.noarch 1:4.01-17.el7 rpcbind.x86_64 0:0.2.0-47.el7
tcp_wrappers.x86_64 0:7.6-77.el7
Complete!
step2:创建共享目录
mkdir -p 目录 |
[root@web01 ~]# mkdir -p /var/www/images
[root@web01 ~]# ll -d /var/www/images/
drwxr-xr-x 2 root root 6 Jun 21 15:13 /var/www/images/
step3:查看NFS服务端共享目录
showmount -e IP地址 |
[root@web01 ~]# showmount -e 172.16.1.131
Export list for 172.16.1.131:
/upload 172.16.1.0/24
step4:挂载
mount -t nfs IP:目录 本地挂载目录 |
[root@web01 ~]# mount -t nfs 172.16.1.131:/upload /var/www/images/
[root@web01 ~]# df -h | tail -1
172.16.1.131:/upload 99G 1.7G 98G 2% /var/www/images
step5:永久挂载
vim /etc/rc.local vim /etc/fstab |
[root@web01 ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Sat May 11 15:50:18 2019
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
UUID=69d3eed0-c901-4e0e-ae98-4c31b2a23719 / xfs defaults 0 0
UUID=7e8b6491-678b-444f-bbdb-019eb0c2bf8c /boot xfs defaults 0 0
UUID=42eaa7c4-975b-4c3a-8301-1e4543eb730e swap swap defaults 0 0
172.16.1.131:/upload /var/www/images nfs defaults 0 0
在Cent OS 6中,采用修改/etc/fstab文件的方式挂载NFS服务,会报错! 解决方法:设置系统开机自启动netfs服务 |
3.功能验证
[NFS客户端]
[root@web01 /var/www/images]# ls
[root@web01 /var/www/images]# touch aspen{01..5}.jpeg
[root@web01 /var/www/images]# ll
total 0
-rw-r--r-- 1 2000 2000 0 Jun 21 15:43 aspen01.jpeg
-rw-r--r-- 1 2000 2000 0 Jun 21 15:43 aspen02.jpeg
-rw-r--r-- 1 2000 2000 0 Jun 21 15:43 aspen03.jpeg
-rw-r--r-- 1 2000 2000 0 Jun 21 15:43 aspen04.jpeg
-rw-r--r-- 1 2000 2000 0 Jun 21 15:43 aspen05.jpeg
-----------------------------------------------------------------------------------------------------------------------
[root@web01 /var/www/images]# groupadd -g 2000 www
[root@web01 /var/www/images]# useradd -Ms /sbin/nologin -u 2000 -g www www
[root@web01 /var/www/images]# ll
total 0
-rw-r--r-- 1 www www 0 Jun 21 15:43 aspen01.jpeg
-rw-r--r-- 1 www www 0 Jun 21 15:43 aspen02.jpeg
-rw-r--r-- 1 www www 0 Jun 21 15:43 aspen03.jpeg
-rw-r--r-- 1 www www 0 Jun 21 15:43 aspen04.jpeg
-rw-r--r-- 1 www www 0 Jun 21 15:43 aspen05.jpeg
使用NFS服务默认用户(nfsnobody)不会存在该问题
[NFS服务端]
[root@nfs01 /mnt]# cd /upload/
[root@nfs01 /upload]# ll
total 0
-rw-r--r-- 1 www www 0 Jun 21 15:43 aspen01.jpeg
-rw-r--r-- 1 www www 0 Jun 21 15:43 aspen02.jpeg
-rw-r--r-- 1 www www 0 Jun 21 15:43 aspen03.jpeg
-rw-r--r-- 1 www www 0 Jun 21 15:43 aspen04.jpeg
-rw-r--r-- 1 www www 0 Jun 21 15:43 aspen05.jpeg
NFS服务经典故障案例 在客户端挂载点目录创建文件时,系统提示:readonly file system 故障原因:磁盘故障或/etc/fstab书写故障
解决方案:mount -o rw,remount 挂载点
|
[root@web01 ~]# touch /var/www/images/aspen.txt
touch: cannot touch ‘/var/www/images/aspen.txt’: Read-only file system
[root@web01 ~]# mount -o rw,remount /var/www/images/
[root@web01 ~]# touch /var/www/images/aspen.txt
[root@web01 ~]# ls /var/www/images/
aspen.txt
七、NFS服务排错流程
step1:检查防火墙与SElinux的服务状态
[root@nfs01 /upload]# systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
Active: inactive (dead)
Docs: man:firewalld(1)
[root@nfs01 /upload]# getenforce
Disabled
step2:Ping服务(NFS)相应的地址
[root@web01 ~]# ping 172.16.1.131
PING 172.16.1.131 (172.16.1.131) 56(84) bytes of data.
64 bytes from 172.16.1.131: icmp_seq=1 ttl=64 time=0.210 ms
64 bytes from 172.16.1.131: icmp_seq=2 ttl=64 time=0.309 ms
64 bytes from 172.16.1.131: icmp_seq=3 ttl=64 time=0.401 ms
^C
--- 172.16.1.131 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.210/0.306/0.401/0.080 ms
step3:通过rpcinfo查看RPC服务信息
[root@web01 ~]# rpcinfo -p 172.16.1.131 |egrep 'portmapper|nfs'
100000 4 tcp 111 portmapper
100000 3 tcp 111 portmapper
100000 2 tcp 111 portmapper
100000 4 udp 111 portmapper
100000 3 udp 111 portmapper
100000 2 udp 111 portmapper
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100003 3 udp 2049 nfs
100003 4 udp 2049 nfs
100227 3 udp 2049 nfs_acl
step4:通过showmount查看NFS服务信息
[root@web01 ~]# showmount -e 172.16.1.131
Export list for 172.16.1.131:
/upload 172.16.1.0/24
step5:查看相关文件
服务端
/var/lib/nfs/etab
/etc/exports
客户端 /proc/mounts
|