对于服务器的文件共享,可以部署一台文件共享服务器,通过 NFS 去挂载使用。
安装
CentOS 6.x
下载安装
1 | yum -y install rpcbind nfs |
配置开机启动
1 | chkconfig rpcbind on |
Centos 7.x
下载安装
1 | yum -y install rpcbind nfs-utils |
配置开机启动
1 | systemctl enable nfs-server.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 | |
指定所有主机:* | |
rw | rw: 输出目录读写;ro: 输出目录只读 |
all_squash | all_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 | 先添加默认端口,随后添加额外端口 |
重启防火墙,重启 rpcbind:
1 | rpcinfo -p |
启动
查看本机共享目录:
1 | showmount -e |
CentOS 6.x
1 | service rpcbind start |
CentOS 7.x
1 | systemctl start rpcbind.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 | # CentOS 6.x |
挂载测试
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 |
将列出端口都添加至防火墙规则,放行。