1、NFS介绍
NFS原理图
2、NFS服务端安装配置
[root@aminglinux ~]# yum install -y nfs-utils rpcbind
[root@aminglinux ~]# vim /etc/exports
/home/nfstestdir 192.168.222.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
[root@aminglinux ~]# mkdir /home/nfstestdir
[root@aminglinux ~]# chmod 777 /home/nfstestdir/
[root@aminglinux ~]# systemctl start rpcbind
[root@aminglinux ~]# systemctl start nfs
[root@aminglinux ~]# systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@aminglinux ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1549/rpcbind
tcp 0 0 0.0.0.0:20048 0.0.0.0:* LISTEN 1580/rpc.mountd
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 930/sshd
tcp 0 0 0.0.0.0:38329 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1131/master
tcp 0 0 0.0.0.0:42267 0.0.0.0:* LISTEN 1567/rpc.statd
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp6 0 0 :::111 :::* LISTEN 1549/rpcbind
tcp6 0 0 :::20048 :::* LISTEN 1580/rpc.mountd
tcp6 0 0 :::22 :::* LISTEN 930/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1131/master
tcp6 0 0 :::44669 :::* LISTEN -
tcp6 0 0 :::59232 :::* LISTEN 1567/rpc.statd
tcp6 0 0 :::2049 :::* LISTEN -
tcp6 0 0 :::3306 :::* LISTEN 1089/mysqld
[root@aminglinux ~]# ps aux |grep rpc
rpc 1549 0.0 0.1 65000 1420 ? Ss 14:51 0:00 /sbin/rpcbind -w
rpcuser 1567 0.0 0.1 42420 1752 ? Ss 14:51 0:00 /usr/sbin/rpc.statd
root 1574 0.0 0.0 0 0 ? S< 14:51 0:00 [rpciod]
root 1580 0.0 0.0 42608 944 ? Ss 14:51 0:00 /usr/sbin/rpc.mountd
root 1587 0.0 0.0 43860 544 ? Ss 14:51 0:00 /usr/sbin/rpc.idmapd
root 1636 0.0 0.0 112720 984 pts/0 S+ 14:53 0:00 grep --color=auto rpc
[root@localhost ~]# yum install -y nfs-utils
[root@localhost ~]# systemctl start rpcbind
[root@localhost ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2071/rpcbind
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1031/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1140/master
tcp6 0 0 :::111 :::* LISTEN 2071/rpcbind
tcp6 0 0 :::22 :::* LISTEN 1031/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1140/master
[root@localhost ~]# ps aux |grep rpc
rpc 2071 0.0 0.1 64956 1048 ? Ss 14:55 0:00 /sbin/rpcbind -w
root 2074 0.0 0.0 112676 984 pts/0 S+ 14:56 0:00 grep --color=auto rpc
no_root_squash 客户端挂载NFS共享目录后,root用户不受约束,权限很大
NFS,要想在客户端上去使用服务端上共享的目录,需要去把它挂载到客户端上的一个挂载点,那就跟本地上的目录是一样的,在操作本地的目录时候,肯定会有一些权限设置,如果加上no_root_squash,这样root用户去共享目录下读写文件的时候,就不会受到限制(就相当于root用户在本地上读写)
root_squash 与上面选项相对,客户端上的root用户收到约束,被限定成某个普通用户
all_squash 客户端上所有用户(包括root用户)在使用NFS共享目录时都被限定为一个普通用户
anonuid/anongid 和上面几个选项搭配使用,定义被限定用户的uid和gid
编辑配置文件: /etc/exports
[root@aminglinux ~]# vim /etc/exports
/home/nfstestdir 192.168.222.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
#rw 读写;ro 只读
#sync 同步模式,内存数据实时写入磁盘
#async 非同步模式
#no_root_squash 客户端挂载NFS服务后,root用户不受约束,权限很大
#root_squash 与上面选项相对,客户端上的root用户受到约束,被限定成某个普通用户
#all_squash 客户端上所有用户在使用NFS共享目录时都被限定为一个普通用户
#anonuid/anongid 和上面几个选项搭配使用,定义被限定用户的uid和gid
客户端连接服务端:showmount -e 192.168.222.110 //查看在NFS服务端是否有权限
此时如果报错:可能有以下原因
[root@localhost ~]# showmount -e 192.168.222.110
Export list for 192.168.222.110:
/home/nfstestdir 192.168.222.0/24
[root@localhost ~]# mount -t nfs 192.168.222.110:/home/nfstestdir /mnt/
[root@localhost ~]# df -h //查看是否挂载成功
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/centos-root 18G 1002M 17G 6% /
devtmpfs 482M 0 482M 0% /dev
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 493M 6.8M 486M 2% /run
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/sda1 197M 103M 95M 53% /boot
tmpfs 99M 0 99M 0% /run/user/0
192.168.222.110:/home/nfstestdir 18G 6.7G 12G 38% /mnt
[root@localhost ~]# cd /mnt/
[root@localhost mnt]# ls
[root@localhost mnt]# touch nfstest.txt
[root@localhost mnt]# ll
总用量 0
-rw-r--r--. 1 1000 1000 0 7月 15 15:22 nfstest.txt
[root@aminglinux ~]# ll /home/nfstestdir/
总用量 0
-rw-r--r-- 1 mysql mysql 0 7月 15 15:22 nfstest.txt
4、exportfs命令
当我们修改nfs的配置文件exports后,需要重新启动nfs服务才能让配置文件生效。但是很多情况下nfs的客户端还挂载着服务端的共享目录,如果重启就会影响客户端的使用。
如果把客户端卸载,再修改配置文件,再重启nfs,客户端再重新挂载,客户端很多的情况下,这样操作会很繁琐。
我们可以使用exportfs命令,可以不用卸载客户端和nfs服务不停止的情况下,重载配置文件。
exportfs命令常用选项:
-a:表示全部挂载或者全部卸载
-r:表示重新挂载
-u:表示卸载某一个目录
-v:表示显示共享目录
在服务端上修改配置文件:增加共享目录/tmp/
[root@aminglinux ~]# vim /etc/exports
/home/nfstestdir 192.168.222.0/24(rw,sync,all_squash,anonuid=1000,anongid=1000)
/tmp/ 192.168.222.110(rw,sync,no_root_squash)
[root@aminglinux ~]# exportfs -arv
exporting 192.168.222.110:/tmp 共享目录/tmp/已增加
exporting 192.168.222.0/24:/home/nfstestdir
[root@localhost mnt]# showmount -e 192.168.222.110
Export list for 192.168.222.110:
/home/nfstestdir 192.168.222.0/24
/tmp 192.168.222.110
5、NFS客户端问题
[root@localhost mnt]# monunt -t nfs -o nfsvers=3 192.168.222.110:/tmp/ /mnt/
如果目录已经挂载,而又不想卸载,执行:
[root@localhost mnt]# monunt -t nfs -o remount,nfsvers=3 192.168.222.110:/tmp/ /mnt/
[root@aminglinux ~]# vim /etc/idmapd.conf
[General]
#Verbosity = 0
# The following should be set to the local NFSv4 domain name
# The default is the host's DNS domain name.
#Domain = local.domain.edu 改成Domain = xxx.com