Linux - nfs服务器

五、nfs服务器

1、基础

NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统 中看来,那个远程主机的目录就好像是自己的一个磁盘分区一样。

由于NFS支持的功能比较多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些 端口来传输数据,因此NFS的功能所对应的端口并不固定,而是随机取用一些未被使用的小于1024的端 口用于传输。但如此一来就会产生客户端连接服务器的问题,因为客户端需要知道服务器端的相关端口 才能够连接。 此时就需要RPC(Remote Procedure Call,远程过程调用)的服务。由于当服务器在启动NFS时会随机 选取数个端口号,并主动向RPC注册,所以RPC知道每个NFS功能所对应的端口号,RPC将端口号通知给 客户端,让客户端可以连接到正确的端口上去。RPC采用固定端口号port 111来监听客户端的需求并向 客户端响应正确的端口号。 注:在启动NFS之前,要先启动RPC,否则NFS会无法向RPC注册。另外,RPC若重新启动,原来注册的 数据会消失不见,因此RPC重启后,它管理的所有服务都需要重新启动以重新向RPC注册。

安装

bash 复制代码
#nfs
yum install nfs-utils
#rpc
yum install rpcbind

2、简单配置

创建共享文件

bash 复制代码
[root@server ~]# mkdir /share -v
mkdir: 已创建目录 '/share'

开启目录共享(编辑配置文件)

bash 复制代码
[root@server ~]# vim /etc/exports
#编辑文件内容
/share	共享文件目录          192.168.5.0/24(rw)	共享的主机(网段,可以使用*代表所有)以及共享权限
#权限参数可以写多个,使用逗号隔开

相关权限参数

参数 说明
rw,ro 该目录共享的权限是可读写还是只读,但最终能否读写,还是与 文件系统的 rwx有关
sync,async sync代表数据会同步写入到内存与硬盘中,async则代表数据会先暂存于内存 当中,而非直接写入硬盘
no_root_squash root_squash 若客户端在共享目录里创建的文件的所属者和所属组是root用户 和root组, 那么显示文件的属主和属组时有以下两种情况: no_root_squash表示,文件 的所属者和所属组是root用户和 root组;root_squash表示将root用户和组 映射为匿名用户和组 (默认设置)。
all_squash no_all_squash all_squash表示客户端所有用户创建文件时,客户端会将文件的用户 和组映射为 匿名用户和组,而no_all_squash表示客户端普通用户创建的 文件的UID和GID是多 少,服务端就显示为多少(默认设置)
anonuid= anongid= 将文件的用户和组映射为指定的UID和GID,若不指定默认为 65534(nfsnobody)

客户端挂载

bash 复制代码
#查看可挂载的主机及其目录
[root@client ~]# showmount -e 192.168.5.100
Export list for 192.168.5.100:
/share 192.168.5.0
#创建文件并挂载
[root@client ~]# mount 192.168.5.100:/share /nfs

测试

bash 复制代码
#在服务端创建目录
[root@server ~]# mkdir /share/{1,2,3} -pv
mkdir: 已创建目录 '/share/1'
mkdir: 已创建目录 '/share/2'
mkdir: 已创建目录 '/share/3'
[root@server ~]# tree /share
/share
├── 1
│   └── test
├── 2
└── 3

3 directories, 1 file
[root@server ~]# echo hello > /share/1/test
#客户端查看
[root@client ~]# tree /nfs
/nfs
├── 1
│   └── test
├── 2
└── 3

3 directories, 1 file
[root@client ~]# cat /nfs/1/test 
hello
#查看挂载情况
[root@client ~]# df -h
文件系统               容量  已用  可用 已用% 挂载点
devtmpfs               4.0M     0  4.0M    0% /dev
tmpfs                  866M     0  866M    0% /dev/shm
tmpfs                  347M  7.0M  340M    3% /run
/dev/mapper/rhel-root   17G  4.3G   13G   27% /
/dev/nvme0n1p2         960M  292M  669M   31% /boot
/dev/nvme0n1p1         599M  7.0M  592M    2% /boot/efi
tmpfs                  174M   52K  174M    1% /run/user/42
tmpfs                  174M   36K  174M    1% /run/user/0
192.168.5.100:/share    17G  4.4G   12G   27% /nfs	#挂载的服务器目录
#若客户端在具备该目录的写权限后,在该目录下创建的文件(在不指定anonuid=和anongid=两个参数的情况下)用户和用户组都为nobody
#服务器给权限
[root@server ~]# chmod 777 /share
#客户端修改目录
[root@client ~]# mkdir /nfs/{4,5,6} -pv
mkdir: 已创建目录 '/nfs/4'
mkdir: 已创建目录 '/nfs/5'
mkdir: 已创建目录 '/nfs/6'
#在客户端看
[root@client ~]# ll /nfs
总用量 0
drwxr-xr-x. 2 root   root   18 11月  8 20:24 1
drwxr-xr-x. 2 root   root    6 11月  8 20:23 2
drwxr-xr-x. 2 root   root    6 11月  8 20:23 3
drwxr-xr-x. 2 nobody nobody  6 11月  8 20:35 4
drwxr-xr-x. 2 nobody nobody  6 11月  8 20:35 5
drwxr-xr-x. 2 nobody nobody  6 11月  8 20:35 6
#服务端看
[root@server ~]# ll /share
总用量 0
drwxr-xr-x. 2 root   root   18 11月  8 12:24 1
drwxr-xr-x. 2 root   root    6 11月  8 12:23 2
drwxr-xr-x. 2 root   root    6 11月  8 12:23 3
drwxr-xr-x. 2 nobody nobody  6 11月  8 12:35 4
drwxr-xr-x. 2 nobody nobody  6 11月  8 12:35 5
drwxr-xr-x. 2 nobody nobody  6 11月  8 12:35 6

3、autofs自动挂载

在一般NFS文件系统的使用过程中,如果客户端要使用服务端所提供的文件系统,可以在 /etc/rc.d/rc.local 中设置开机时自动挂载( /etc/rc.d/rc.local 文件中写入的命令,在每次启动系统用户 登录之前都会执行一次)。但若对端宕机或根本没有启动,会导致主机超时等待。所以我们需要当客户端在有使用NFS文件系统的需求时才让系统自动挂载。当NFS文件系统使用完毕后,让NFS自动卸载。

autofs这个服务是在客户端的上面,它会持续的检测某个指定的目录,并预先设置当使用到该目录的某 个子目录时,将会取得来自服务器端的NFS文件系统资源,并进行自动挂载的操作。

安装软件(客户端)

bash 复制代码
yum install autofs -y

编辑配置文件

bash 复制代码
[root@client ~]# vim /etc/auto.master	主配置文件,定义了挂载点和自动挂载的规则
文件内添加:
 /nfs/test         /etc/auto.suibian
 #本地端目录    具体挂载配置文件
[root@client ~]# vim /etc/auto.suibian	挂载点的具体配置文件
添加:
*	192.168.5.100:/share	#*表示所有对/nfs/test目录的访问都会触发自动挂载 192.168.5.100:/share

重启服务开启自动挂载

bash 复制代码
[root@client ~]# systemctl restart nfs-server
[root@client test]# systemctl status autofs
[root@client ~]# cd /nfs/test/
[root@client test]# ll
总用量 0
drwxrwxrwx. 8 root root 60 11月  8 20:35 share
[root@client test]# tree
.
└── share
    ├── 1
    │   └── test
    ├── 2
    ├── 3
    ├── 4
    ├── 5
    └── 6

7 directories, 1 file
[root@client test]# 
#注意:以上操作在关闭防火墙以及selinux的情况下进行
相关推荐
DLYSB_2 小时前
存储运维实战:基于 Ceph Event 监听与 Python 适配器的分布式存储健康度物理声光响应架构
运维·ceph·python·报警灯
阿里云云原生3 小时前
可用性从 99.9% 跃升至 99.995%:畅捷通如何用 AI 重塑运维底座?
运维·网络·人工智能
k4m7v2pz4 小时前
把 Bevy 0.14 游戏移植到 R36S 掌机:一场与“无窗口系统“的搏斗
linux·rust·bevy·r36s·rk3326·开源掌机
阿童木写作4 小时前
Python实现Temu图片批量翻译自动化教程
运维·人工智能·python·自动化
iori97king5 小时前
库存不足自动通知:第一次使用自动化
运维·自动化
@insist1235 小时前
信息系统管理工程师-信息系统运维资源、技术与智能运维核心考点解析
运维·软考·信管·软件水平考试·信息系统管理工程师
木子欢儿5 小时前
Intel 架构的 MacBook Pro 运行 Linux 发热量高解决
linux·运维·服务器
KKKlucifer7 小时前
运营商全域安全运维支撑体系落地实践
运维·安全
EAIReport8 小时前
工业电气自动化数据治理破局:多Agent大模型赋能全景智能决策
大数据·运维·自动化
清水迎朝阳8 小时前
客户端软件 — 用户统计方案
服务器·c++·客户端·用户统计