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的情况下进行
相关推荐
摸鱼也很难12 分钟前
Docker 镜像加速和配置的分享 && 云服务器搭建beef-xss
运维·docker·容器
watermelonoops14 分钟前
Deepin和Windows传文件(Xftp,WinSCP)
linux·ssh·deepin·winscp·xftp
woshilys1 小时前
sql server 查询对象的修改时间
运维·数据库·sqlserver
疯狂飙车的蜗牛1 小时前
从零玩转CanMV-K230(4)-小核Linux驱动开发参考
linux·运维·驱动开发
恩爸编程2 小时前
探索 Nginx:Web 世界的幕后英雄
运维·nginx·nginx反向代理·nginx是什么·nginx静态资源服务器·nginx服务器·nginx解决哪些问题
Michaelwubo3 小时前
Docker dockerfile镜像编码 centos7
运维·docker·容器
远游客07133 小时前
centos stream 8下载安装遇到的坑
linux·服务器·centos
马甲是掉不了一点的<.<3 小时前
本地电脑使用命令行上传文件至远程服务器
linux·scp·cmd·远程文件上传
jingyu飞鸟3 小时前
centos-stream9系统安装docker
linux·docker·centos
好像是个likun4 小时前
使用docker拉取镜像很慢或者总是超时的问题
运维·docker·容器