NFS是Network File System的缩写。
NFS最早由Sun公司开发,分2,3,4三个版本,2和3由Sun起草开发,4.0开始Netapp公司参与并主导开发,最新为4.1版本。
NFS数据传输基于RPC协议,RPC为Remote Procedure Call的简写。
NFS应用场景是:A,B,C三台机器上需要保证被访问到的文件是一样的,A共享数据出来,B和C分别去挂载A共享的数据目录,从而B和C访问到的数据和A上的一致。
NFS结构
NFS原理
在坐实验前,准备两台虚拟机,A服务端(192.168.242.128),B客户端(192.168.242.129)。
[root@zlinux ~]# yum install -y nfs-utils //yum工具安装nfs-utils时会一并安装recbind
[root@zlinux ~]# vim /etc/exports //加入以下内容
/home/nfstestdir 192.168.241.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
[root@zlinux ~]# mkdir /home/nfstestdir
[root@zlinux ~]# chmod 777 /home/nfstestdir/
[root@zlinux ~]# netstat -lntp //111端口说明rpcbind已启动
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 1/systemd
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 800/nginx: master p
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 781/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1321/master
tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 800/nginx: master p
tcp6 0 0 :::3306 :::* LISTEN 1331/mysqld
tcp6 0 0 :::111 :::* LISTEN 1/systemd
tcp6 0 0 :::22 :::* LISTEN 781/sshd
tcp6 0 0 ::1:25 :::* LISTEN 1321/master
[root@zlinux ~]# ps aux |grep rpc //rpcbind服务已启动
rpc 2476 0.0 0.0 64964 1048 ? Ss 19:11 0:00 /sbin/rpcbind -w
root 3931 0.0 0.0 112680 972 pts/0 R+ 21:02 0:00 grep --color=auto rpc
[root@zlinux ~]# systemctl start nfs //启动nfs服务
[root@zlinux ~]# ps aux |grep nfs
root 3983 0.0 0.0 0 0 ? S< 21:04 0:00 [nfsd4_callbacks]
root 3989 0.0 0.0 0 0 ? S 21:04 0:00 [nfsd]
root 3990 0.0 0.0 0 0 ? S 21:04 0:00 [nfsd]
root 3991 0.0 0.0 0 0 ? S 21:04 0:00 [nfsd]
root 3992 0.0 0.0 0 0 ? S 21:04 0:00 [nfsd]
root 3993 0.0 0.0 0 0 ? S 21:04 0:00 [nfsd]
root 3994 0.0 0.0 0 0 ? S 21:04 0:00 [nfsd]
root 3995 0.0 0.0 0 0 ? S 21:04 0:00 [nfsd]
root 3996 0.0 0.0 0 0 ? S 21:04 0:00 [nfsd]
root 4002 0.0 0.0 112680 976 pts/0 R+ 21:04 0:00 grep --color=auto nfs
[root@zlinux ~]# 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@zlinux ~]# systemctl enable rpcbind
先安装好nfs-utils
安装包。
[root@zlinux02 ~]# showmount -e 192.168.242.128
Export list for 192.168.242.128:
/home/nfstestdir 192.168.1.0/24
使用showmount -e IP
命令,可查看NFS共享情况。
[root@zlinux02 ~]# mount -t nfs 192.168.242.128:/home/nfstestdir /mnt/
[root@zlinux02 ~]# df -h //ke可以看到增加了/mnt分区。
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda3 26G 2.7G 24G 11% /
devtmpfs 903M 0 903M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 8.6M 904M 1% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 197M 109M 88M 56% /boot
tmpfs 183M 0 183M 0% /run/user/0
192.168.242.128:/home/nfstestdir 26G 3.4G 23G 14% /mnt
# 客户端创建查看
[root@zlinux02 ~]# cd /mnt/
[root@zlinux02 mnt]# touch nfstestfile.txt
[root@zlinux02 mnt]# ls -l
总用量 0
-rw-r--r--. 1 mysql mysql 0 3月 26 21:27 nfstestfile.txt
# 服务端查看
[root@zlinux ~]# ls -l /home/nfstestdir/
总用量 0
-rw-r--r--. 1 mysql mysql 0 3月 26 21:27 nfstestfile.txt
#不管用哪个用户操作,将以1000uid,1000gid 操作
[root@zlinux ~]# id mysql
uid=1000(mysql) gid=1000(mysql) 组=1000(mysql)
exportfs命令常用选项:
-a 全部挂载或者全部卸载
-r 重新挂载
-u 卸载某个目录
-v 显示共享目录
常用组合: exportfs -arv
服务端更改配置文件后,不重启服务,直接执行该命令就可以使更改后的配置文件生效。
注意: 在重启nfs服务之前需要先将所有挂载点卸载,否则将发生程序错误,严重者会拖垮系统。
服务端修改:
[root@zlinux ~]# vim /etc/exports //增加一行以下内容
/tmp/ 192.168.242.0/24(rw,sync,no_root_squash)
[root@zlinux ~]# exportfs -arv
exporting 192.168.242.0/24:/tmp
exporting 192.168.242.0/24:/home/nfstestdir
客户端查看:
[root@zlinux02 ~]# showmount -e 192.168.242.128
Export list for 192.168.242.128:
/tmp 192.168.242.0/24
/home/nfstestdir 192.168.242.0/24
[root@zlinux02 ~]# showmount -e 192.168.242.128
Export list for 192.168.242.128:
/tmp 192.168.242.0/24
/home/nfstestdir 192.168.242.0/24
客户端挂载共享目录后,不管是root用户还是普通用户,创建新文件时属主、属组为nobody
客户端挂载时加上-o nfsvers=3
客户端和服务端都需要
vim /etc/idmapd.conf
把 "#Domain = local.domain.edu" 改为 "Domain = xxx.com" (域名自定义),然后再重启rpcidmapd服务
原文:http://blog.51cto.com/3069201/2091374