菜单
本页目录

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服务端建立连接

image-20221103212509662

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)

image-20221122091546473

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_squashno_root_squashall_squashall_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
客户端:
	正常挂载即可