NFS文件共享
NFS服务器配置
服务器地址为10.154.0.110
共享文件夹/var/web跟/var/cloud
不屏蔽root用户对web目录异步可读可写访问(异步同步说明)
所有用户对cloud目录都有同步可读可写访问
yum -y install nfs-utils rpcbind
rpm -qa | grep nfs-utils rpm -qa | grep rpcbind mkdir /var/{web,cloud} chmod a+w /var/web
#编辑配置文件 cat /etc/exports /var/web/ 10.154.0.111(rw,async,no_root_squash) /var/cloud/ *(ro,sync)
exportfs -r #重新读取配置文件,可以不用重启服务 systemctl restart nfs systemctl enable nfs
关闭防火墙个selinux
[root@nfs ~]# setenforce 0 setenforce: SELinux is disabled [root@nfs ~]# getenforce Disabled [root@nfs ~]# systemctl stop firewalld
注意必须关闭防火墙,除非你配置了相关端口开放策略,不然客户端showmount会报错
客户端client1访问NFS共享
IP地址为10.154.0.111
安装nfs-utils包
yum -y install nfs-utils
查看nfs服务器共享信息
[root@client1 ~]# showmount -e 10.154.0.110 Export list for 10.154.0.110: /var/cloud * /var/web 10.154.0.111
创建/var/web目录并挂载
mkdir /var/web mount 10.154.0.110:/var/web /var/web #手动挂载 echo \ "10.154.0.110:/var/web /var/web nfs defaults 0 0" >> /etc/fstab #开机自动挂载 #-o指定挂载nfs服务版本 mount -o nfsvers=3 10.154.0.110:/var/web /var/web echo \ "10.154.0.110:/var/web /var/web nfs defaults,nfsvers=3 0 0" >> /etc/fstab
创建文件权限对比
#在client1上查看创建的文件 [root@client1 web]# ll total 0 -rw-r--r--. 1 root root 0 Sep 23 10:38 client1.txt #client1客户端创建 -rw-r--r--. 1 root root 0 Sep 23 10:38 nfs.txt #nfs服务器创建 #在nfs服务器上查看创建的文件 [root@nfs web]# ll total 0 -rw-r--r-- 1 root root 0 Sep 23 10:38 client1.txt -rw-r--r-- 1 root root 0 Sep 23 10:38 nfs.txt
可以看到创建的文件所有者跟属主都是root,在client1上使用root用户操作会映射成nfs上使用root操作,称为root权限保留
客户端client2访问NFS共享
客户机client2,10.154.0.112
client2挂载使用NFS服务器的/var/cloud目录至本机/var/cloud目录。该目录为只读共享,默认root权限账号会映射成nfsnobody账号
安装nfs-utils包
yum -y install nfs-utils
创建挂载文件并挂载
mkdir /var/cloud
useradd -u 1000 jerry #我这里创建了id1000的jerry账户,在nfs服务器上也要创建一个id1000 jerry的账户
mount 10.154.0.110:/var/cloud /var/cloud
echo \
"10.154.0.110:/var/cloud /var/cloud nfs defaults 0 0" >> /etc/fstab
最后实验结果:
使用no_root_squash不屏蔽root权限
客户端使用root在挂载文件中创建文件属主跟组都为root,普通用户如uid 1000创建的文件属主跟属组为nfs服务器上对应uid为1000的用户的属主跟组
使用root_squash屏蔽root权限
客户端使用root挂载文件中创建文件属主跟组都为nfsnobody,普通用户如uid 1000创建的文件属主跟属组为nfs服务器上对应uid为1000的用户的属主跟组
更改了/etc/exports配置文件后,需要重启服务(或使用exportfs -r重新读取配置文件),且客户端需要重新挂载。
解决umount.nfs: /data: device is busy 问题
yum install psmisc fuser -m -v /var/web #找到进程号 kill -9 xxxx #或者 fuser –k /path/to/your/filename fuser -v -n tcp 80 #查看哪些进程再使用80端口
转载于:https://www.cnblogs.com/saneri/p/5465718.html
解决mount时会报错
出现以下错误为没有安装nfs-utils
[root@client2 ~]# mount 10.154.0.110:/var/cloud /var/cloud
mount: wrong fs type, bad option, bad superblock on 10.154.0.110:/var/cloud,
missing codepage or helper program, or other error
(for several filesystems (e.g. nfs, cifs) you might
need a /sbin/mount.<type> helper program)
In some cases useful info is found in syslog - try
dmesg | tail or so.
NFS选项
| NFS选项 | 描述 | NFS选项 | 描述 |
| ro | 只读共享 | rw | 可读可写共享 |
| sync | 同步写操作 | async | 异步写操作 |
| wdelay | 延迟写操作 | root_squash | 屏蔽远程root权限 |
| no_root_squash | 不屏蔽远程root权限 | all_squash | 屏蔽所有远程用户权限 |
NFS默认选项为ro 、sync 、wdelay 、root_squash。这一点书中有误,默认为屏蔽远程root权限
计算机对数据的修改会先将修改内容写到内存中,然后再慢慢写入慢速的硬盘中。
async:允许NFS服务器没有把数据写入硬盘前就返回成功消息给客户端,此时数据还在内存中,客户端就收到写入成功消息。
sync:确定数据已写入存储设备后才会返回成功消息。
wdelay:延迟写入选项,它决定先将多个写入请求在内存中合并后写入硬盘,减少对硬盘I/O的次数,从而优化NFS性能。
no_wdelay:与wdelay相反,与async选项一起使用时不会生效。
root_squash:客户端使用root账号访问NFS时,NFS服务器会自动将root映射为服务器本地的匿名账号,通过anonuid可以指定匿名账号ID,默认为65534也就是nfsnobody账号。
all_squash:屏蔽所有账户权限统统映射为服务器本地匿名账号。
扩展
NFS(Network File System)
网络文件系统
由Sun公司开发,是一种通过网络方式共享文件系统的通用共享解决方案。
三个版本
NFSv2:老版本,支持多种操作系统,兼容性好。
NFSv3:快,支持单个文件大小更大,支持TCP协议。
NFSv4:提供有状态连接,能追踪连接状态,增加安全性。是Centos7默认使用版本,监听TCP 2049端口。
RPC(Remote Procedure Call)
远程过程调用协议
当计算机通过网络相连接时就需要记住彼此的基本信息如IP、服务端口等。这些信息可以委托RPC管理。
Centos7由rpcbind服务提供RPC协议支持。
故NFS服务所需软件包括:nfs-utils、rpcbind
这篇博文写的不错:点击传送
学习来自:《Linux运维之道 第2版》第4章

浙公网安备 33010602011771号