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章 

posted @ 2020-09-20 10:04  努力吧阿团  阅读(389)  评论(0)    收藏  举报