12 NFS
1、复习
Linux基础阶段: 单机存储模式:
1. 磁盘的操作管理命令:fdisk、gdisk、parted、mkfs.*、mount、df
lsblk
blkid
msdos(dos):指的就是mbr分区表
GUID:指的就是gpt分区表
parted /dev/sdb
> mklabel gpt|msdos
2. 多磁盘管管理工具:raid、lvm
raid:
raid 0
raid 1
raid 5
raid 6
raid 10
raid 50
lvm:
磁盘|分区:
物理卷: pvcreate、pvremove、pvdisplay、pvscan、pvresize
卷组: vgcreate、vgremove、vgdisplay、vgscan、vgextend、vgreduce
逻辑卷: lvcreate、lvremove、lvdisplay、lvscan、lvresize
#逻辑卷扩容:先进行存储空间扩容,再进行文件系统扩容
2、NFS概述
NFS:网络文件系统,实现网络之间存储空间的共享
类似技术: samba
3、NFS挂载原理
NFS 随机端口——rpc服务——客户端rpc
启动顺序: (2) (1)
1)rpc服务端 启动,开启111端口
2)NFS服务端启动,向rpc注册端口信息
3)客户端启动rpc,向rpc服务端请求
4)rpc服务端发送NFS的端口给客户端
5)客户端接受后与NFS服务端建立连接

4、NFS 协议,软件
协议:rpc
配置文件: /etc/exports
软件:
nfs-utils-*
rpcbind-*
注意:
在server端安装nfs:为了配置共享、处理来源请求
在client端安装nfs:为了兼容文件系统,连接、使用服务端的共享空间
5、NFS的守护进程:rpc
端口映射、rpcbind端口为111
6、实验
server 7-1
1)yum安装nfs-utils
2)创建新分区、格式化
3)创建共享目录 /data ,并将新分区挂载到 /data
4)修改 nfs配置文件 /etc/exports
/data 192.168.18.202(rw)
5)启动nfs,检查端口是否开启
systemctl restart nfs
client 7-2
1)yum安装nfs-utils
2)创建 /abc,将NFS服务的共享目录挂载到此
3)挂载
[root@localhost ~]# mount 192.168.18.201:/data /abc
4)确定服务端的三权限,进行测试
windows 挂载:程序中开启nfs客户端
1、在打开或关闭Windows功能中,选择安装NFS客户端
2、在命令行中,输入“mount \172.24.184.31data x:”,输入mount查看详细挂载参数(注意此时uid、gid均为2)

3、挂载成功后,在Windows资源管理器中可以看到X盘,图中Z盘为通过网络映射的驱动器,显示略有不同
4、NFS共享目录挂载时uid和gid均为2,而NFS服务的默认uid和gid为65534,因此此时仅有共享目录的读权限。
修改注册表在HKEY_LOCAL_MACHINESOFTWAREMicrosoftClientForNFSCurrentVersionDefault中,添加DWORD值两项:AnonymousUid,AnonymousGid,如下图(此处使用NFS服务器其默认uid、gid已修改为1033)
5、重启电脑,此时客户端uid、gid已修改为NFS服务端的uid、gid,获得NFS共享目录读写权限。
7、三项权限:
(共享权限、安全权限、挂载权限)
1.贡献权限:服务端配置文件设置的权限
2.目录对于其他人的权限(建议给acl权限,nfs客户端的用户为:nfsnobody)
3.客户端挂载时的权限
8、/etc/exports 文件详解
共享目录 客户端1(访问权限,用户映射,其他) 客户端2(访问权限,用户映射,其他)
访问权限:ro|rw
其他:sync同步
async异步
客户端常用的指定方式:
指定ip地址的主机:192.168.0.200
指定子网中的所有主机:192.168.88.0
指定域名的主机:www.kernel.com
指定域中的所有主机:*.kernel.com
所有主机:*
用户映射选项:
root_squash:将root用户的访问映射为匿名(nfsnobody)用户uid和gid;(默认生效)
no_root_squash:保留管理员权限,以服务器管理员的权限管理;
all_squash:将远程访问的用户及所属组都映射为指定uid、gid的匿名用户;
anonuid=xxx:将远程访问的所有用户都映射为指定uid的匿名用户;
anongid=xxx:将远程访问的所有用户组都映射为指定gid匿名组账户;
客户端使用哪种用户身份创建文件时,借用哪个用户身份,进行文件管理?
| 用户 | root_squash | no_root_squash | all_squash | all_squash,anonuid=10086,anongid=10086 |
|---|---|---|---|---|
| root | 借用server的nfsnobody身份 | 不借用server任何身份 | 借用server的nfsnobydy身份 | 借用server指定的uid、gid身份 |
| 普通管理员zhangsan | 不借用server任何身份 | 不借用server任何身份 | 借用server的nfsnobydy身份 | 借用server指定的uid、gid身份 |
客户端root用户:
使用root_squash映射时:**借用server的nfsnobody身份**进行文件管理
使用no_root_squash映射时:**不借用server任何身份**用客户端本身的身份进行文件管理(只是在服务端,通过服务端自身的uid对应显示)
使用all_squash映射时:**借用server的nfsnobydy身份**进行文件管理
使用all_squash,anonuid=xxx,anongid=xxx映射时:**借用server指定的uid、gid身份**进行文件管理
客户端普通用户:
使用root_squash映射时:**不借用server任何身份**,用自己本身身份进行文件管理
使用no_root_squash映射时:**不借用server任何身份**,用自己本身身份进行文件管理
使用all_squash映射时:**借用server的nfsnobydy身份**进行文件管理
使使用all_squash,anonuid=xxx,anongid=xxx映射时:**借用server指定的uid、gid身份**进行文件管理
测试实验:
servevr分别修改 /etc/exports文件中的用户映射项
client 用root、普通用户分别创建文件
检查文件身份
9、命令相关
rpcinfo -p localhost #查rpc开启端口所提供的对应程序
showmount -e localhost #查本机共享状态
showmount -e IP
永久挂载: 修改配置文件 /etc/fstab
192.168.18.201:/data /abc nfs defaults 0 0
服务器强制且在,挂载(在server端执行)
exportfs -au #停止所有共享
exportfs -ar #启用所有共享
一个问题:
问题现象:
NFS客户端在使用v4版本挂载NFS服务器共享目录时,所创建的文件属于nobody用户
问题原因:
NFS 在 v4 版本中修改了用户映射关系模式,通过调用NIS服务来完成用户映射,但NIS服务在未配置的情况下无法提供正常映射关系,所以出现了上述错误。
#拓展:NIS(Network Information Service)网络信息服务
#相关配置文件:/etc/idmapd.conf
问题解决方案:
服务器端:
1. 创建并编写配置文件
/etc/modprobe.d/nfs.conf
options nfs nfs4_disable_idmapping=1
#关闭掉RPC服务对rpc.idmapd模块的调用
2. 正常编辑NFS配置文件并重启
/etc/exports
service nfs restart
3. 手动关闭rpcidmapd服务
service rpcidmapd stop
客户端:
正常挂载即可