一 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