Linux下NFS服务的搭建与配置

发布时间 2023-08-16 10:06:31作者: 明天很明

一 NFS服务介绍

NFS 就是 Network FileSystem 的缩写,它最大的功能就是可以透过网络,让不同的机器、不同的操作系统、可以彼此分享个别的档案 (share files)。

NFS 支持的功能相当的多,而不同的功能都会使用不同的程序来启动, 每启动一个功能就会启用一些端口来传输数据,因此, NFS 的功能所对应的端口才没有固定住, 而是随机取用一些未被使用的小于 1024 的埠口来作为传输之用。因此,当客户端想要连上服务器,就得需要远程过程调用 (RPC) 的服务。RPC 最主要的功能就是在指定每个 NFS 功能所对应的 port number ,并且回报给客户端,让客户端可以连结到正确的埠口上去。

 

当客户端有 NFS 档案存取需求时,他会如何向服务器端要求数据呢?

  • 客户端会向服务器端的 RPC (port 111) 发出 NFS 档案存取功能的询问要求;
  • 服务器端找到对应的已注册的 NFS daemon 埠口后,会回报给客户端;

客户端了解正确的埠口后,就可以直接与 NFS daemon 来联机。

二 所需软件及软件结构

要设定好 NFS 服务器我们必须要有两个软件才行,分别是:

  • RPC 主程序:rpcbind
  • NFS 主程序:nfs-utils

涉及的配置文件:

  • 主要配置文件:/etc/exports
  • NFS 文件系统维护指令:/usr/sbin/exportfs
  • 分享资源的登录档:/var/lib/nfs/*tab
  • 客户端查询服务器分享资源的指令:/usr/sbin/showmount

三 系统环境

系统CentOS7.2

四 安装NFS服务

查看系统是否已安装nfs与rpcbind

[apps@db1n18 ~]$ rpm -qa | grep nfs

nfs-utils-1.3.0-0.21.el7.x86_64

[apps@db1n18 ~]$ $ rpm -qa | grep rpcbind

rpcbind-0.2.0-32.el7.x86_64

如果未安装,则需要安装nfs-utils与rpcbind

五、服务器配置

nfs服务器上创建共享目录/data1/apps/nfs_server/并设置权限

[apps@db1n18 ~]$ mkdir -p nfs_server

[apps@db1n18 ~]$ sudo chmod 666 /data1/apps/nfs_server/

编辑export文件

[apps@db1n18 ~]$ sudo vim /etc/exports

/data1/apps/nfs_server $(server_ip)/24(rw,no_root_squash,no_all_squash,sync)

 

常见的参数则有:

参数值    内容说明

rw  ro    该目录分享的权限是可擦写 (read-write) 或只读 (read-only),但最终能不能读写,还是与文件系统的 rwx 及身份有关。

sync  async    sync 代表数据会同步写入到内存与硬盘中,async 则代表数据会先暂存于内存当中,而非直接写入硬盘!

no_root_squash  root_squash    客户端使用 NFS 文件系统的账号若为root 时,系统该如何判断这个账号的身份?预设的情况下,客户端 root 的身份会由 root_squash 的设定压缩成 nfsnobody, 如此对服务器的系统会较有保障。但如果你想要开放客户端使用 root 身份来操作服务器的文件系统,那么这里就得要开 no_root_squash 才行!

all_squash    不论登入 NFS 的使用者身份为何,他的身份都会被压缩成为匿名用户,通常也就是 nobody(nfsnobody) 啦!

anonuid  anongid    anon意指 anonymous (匿名者) 前面关于 *_squash 提到的匿名用户的 UID 设定值,通常为 nobody(nfsnobody),但是你可以自行设定这个 UID 的值!当然,这个 UID 必需要存在于你的 /etc/passwd 当中! anonuid 指的是 UID 而 anongid 则是群组的 GID 啰。

 

使配置生效

[apps@db1n18 ~]$ sudo exportfs -r

启动rpcbind、nfs服务

[apps@db1n18 ~]$ sudo service rpcbind start

Redirecting to /bin/systemctl start  rpcbind.service

[apps@db1n18 ~]$ sudo service nfs start

Redirecting to /bin/systemctl start  nfs.service

六 客户端配置

跟服务端一样,先查看客户端是否安装了nfs

[apps@bssmysql028 ~]$ rpm -qa | grep nfs

nfs-utils-1.3.0-0.21.el7.x86_64

创建挂载目录

[apps@bssmysql028 ~]$ mkdir -p nfs_client

查看服务器抛出的共享目录信息

[apps@bssmysql028 ~]$ showmount -e $(server_ip)

Export list for $(server_ip):

/data1/apps/nfs_server $(server_ip)/24

为了提高NFS的稳定性,使用TCP协议挂载,NFS默认用UDP协议

[apps@bssmysql028 ~]$ sudo mount -t nfs $(server_ip):/data1/apps/nfs_server /data1/apps/nfs_client -o proto=tcp -o nolock

七 测试结果

查看挂载结果(其他的在此省略)

[apps@bssmysql028 ~]$ df -h

Filesystem                           Size  Used Avail Use% Mounted on

$(server_ip):/data1/apps/nfs_server  2.2T  1.3T  785G  63% /data1/apps/nfs_client

 

卸载已挂载的NFS

[apps@bssmysql028 ~]$ sudo umount /data1/apps/nfs_client

[apps@bssmysql028 ~]$ df -h

Filesystem                         Size  Used Avail Use% Mounted on