CentOS 配置部署 NFS

对于服务器的文件共享,可以部署一台文件共享服务器,通过 NFS 去挂载使用。

安装

CentOS 6.x

下载安装

1
yum -y install rpcbind nfs

配置开机启动

1
2
chkconfig rpcbind on
chkconfig nfs on

Centos 7.x

下载安装

1
yum -y install rpcbind nfs-utils

配置开机启动

1
2
systemctl enable nfs-server.service
systemctl enable rpcbind.service

服务端配置

配置

在服务端,编辑配置文件 /etc/exports,添加如下行

1
/home/uploads 192.168.221.101(rw,all_squash,anonuid=0,anongid=0)

配置说明:

192.168.221.101 客户端 ip
rw 读写 ro 只读
all_squash 无论客户端以何用户连接服务端,对服务端而言均为匿名用户
anonuid 匿名用户的 uid
anongid 匿名用户的 gid

查看共享目录的 uid 和 gid,使用命令:

1
ls -nd /home/nfs

uid 和 gid 最好为客户端和服务端都存在的 uid 和 gid 值。

可用的配置说明列表:

配置项说明
/home/nfs共享目录,权限必须为 755
192.168.221.101指定客户端,指定方式:
Ip: 192.168.221.101
子网主机:192.168.221.0/24 192.168.221.0/225.225.225.0
指定域名的主机:share.uploads.com
指定域名所有主机:*.uploads.com
指定所有主机:*
rwrw: 输出目录读写;ro: 输出目录只读
all_squashall_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody)
no_all_squash:与all_squash取反(默认设置)
root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置)
no_root_squash:与rootsquash取反
anonuid=xxx将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx)
anongid=xxx将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx)
其它可配置选项secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
no_wdelay:若有写操作则立即执行,应与sync配合使用;
subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
1
exportfs -r # 生效

若在服务启动后修改了 /etc/exports 配置文件,执行该命令后,无需重启 nfs 服务和 rpcbind 服务。对该命令的说明如下:

-a 全部挂载或卸载 /etc/exports中的内容

-r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab

-u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)

-v 在export的时候,将详细的信息输出到屏幕上。

防火墙端口配置

NFS 除 111 和 2049 外,其它端口均为随机生成,若 NFS 服务端需要启用防火墙,需要固定其它端口。

参考文章:http://linux.vbird.org/linux_server/0330nfs.php#nfsserver_security

1
2
3
4
5
6
# 先添加默认端口,随后添加额外端口
firewall-cmd --permanent --add-port=111/tcp
firewall-cmd --permanent --add-port=111/udp
firewall-cmd --permanent --add-port=2049/tcp
firewall-cmd --permanent --add-port=2049/udp
...

重启防火墙,重启 rpcbind:

1
rpcinfo -p

启动

查看本机共享目录:

1
showmount -e

CentOS 6.x

1
2
service rpcbind start
service nfs start

CentOS 7.x

1
2
systemctl start rpcbind.service
systemctl start nfs-server.service

客户端配置

查看服务端共享目录:

1
showmount -e server_ip

配置自动挂载:

1
vim /etc/fstab

添加一行

1
192.168.221.100:/home/nfs/ /home/test/uploads/ nfs defaults 0 0

在客户端,只需要启动 rpcbind 服务,但仍需要安装 nfs

1
2
3
4
5
6
7
# CentOS 6.x
chkconfig rpcbind on
service rpcbind start

# CentOS 7.x
systemctl enable rpcbind
systemctl start rpcbind

挂载测试

1
mount -a

查看挂载

1
nfsstat -m

错误解决

执行 mount 报错

clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

关闭防火墙,或者执行如下:

1
rpcinfo  -p  192.168.221.100

将列出端口都添加至防火墙规则,放行。

参考

本博客所有文章除特别声明外,均采用 CC BY-NC-ND 4.0 许可协议。转载请注明出处! © 雨落
  1. 1. 安装
    1. 1.1. CentOS 6.x
    2. 1.2. Centos 7.x
  2. 2. 服务端配置
    1. 2.1. 配置
    2. 2.2. 防火墙端口配置
    3. 2.3. 启动
  3. 3. 客户端配置
  4. 4. 错误解决
  5. 5. 参考