centos7 nfs文件共享
server端安装
- 检查是否安装
rpm -qa | grep nfs
- 下载
yum -y install nfs-utils rpcbind
# centos7自带了rpcbind,rpc监听在111端口。
- 配置
mkdir -p /data/nfs/share
chmod -R 777 /data/nfs/share
#创建配置文件
vi /etc/exports
# 增加如下内容
/data/nfs/share *(rw,all_squash)
#/data/nfs/share 为共享目录
#保存后,让配置立即生效
exportfs –arv
- 启动server端
#启动顺序rpcbind->nfs
# 开机启动
systemctl enable rpcbind.service
systemctl enable nfs-server.service
# 重启服务
systemctl restart rpcbind.service
systemctl restart nfs-server.service
- 设置防火墙
- 关闭防火墙
# 1.查看防火墙状态
systemctl status firewalld.service
# 2.关闭防火墙
systemctl stop firewalld.service
- 防火墙开放端口
# 永久开放
firewall-cmd --add-service=nfs --permanent
firewall-cmd --add-service=rpc-bind --permanent
firewall-cmd --add-service=mountd --permanent
# 使配置生效
firewall-cmd --reload
# 查看服务
firewall-cmd --list-service
client安装
- 下载
yum install -y nfs-utils rpcbind
# 此处nfs-utils 只安装不启动,方便执行查看命令。
- 启动
# 开机启动
systemctl enable rpcbind
# 重启服务
systemctl restart rpcbind
- 挂载
1,直接挂载
mkdir -p /tmpdata
mount -t nfs hadoop100:/data/nfs/share /tmpdata
也可将挂载配置写入fstab文件中,与普通磁盘挂载一样,挂载时同样可以指定权限,只是类型为nfs。
2,autofs挂载
# yum -y install autofs
# vi /etc/auto.master
#添加一行
/- /etc/auto.mount
# vi /etc/auto.mount
#添加一行
/data -fstype=nfs,rw hadoop100:/data/nfs/share
#启动服务
# systemctl start autofs
# systemctl enable autofs
故障
1、nfs只能挂载为nobody
同时修改服务端、客户端/etc/idmapd.conf中的Domain为一样的值,随后重启rpcidmapd服务,或重启所有服务
2、客户端无法卸载nfs目录
umount.nfs4: /var/nfs: device is busy
执行fuser -km /var/nfs/,然后再执行umount
3,卸载
sudo fuser -m -v -i -k /app/file
sudo umount /app/file
# 直接使用 umount /app/file 可能会报“Device is busy”错误。
error: mount.nfs: No route to host
[root@localhost ~]# mount -t nfs 192.168.38.128:/data/hab_data tmpdata
mount.nfs: No route to host
关闭防火墙重试
systemctl stop firewalld
systemctl disable firewalld
权限说明
- 1、普通用户
当设置all_squash时:访客时一律被映射为匿名用户(nfsnobody)
当设置no_all_squash时:访客被映射为服务器上相同uid的用户,因此在客户端应建立与服务端uid一致的用户,否则也映射为nfsnobody。root除外,因为root_suqash为默认选项,除非指定了no_root_squash
- 2、root用户
当设置root_squash时:访客以root用户访问NFS服务端时,被映射为nfsnobody用户
当设置no_root_squash时:访客以root用户访问NFS服务端时,被映射为root用户。以其他用户访问时同样映射为对应uid的用户,因为no_all_squash是默认选项
选项说明
ro:共享目录只读
rw:共享目录可读可写
all_squash:所有访问用户都映射为匿名用户或用户组
no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组
root_squash(默认):将来访的root用户映射为匿名用户或用户组
no_root_squash:来访的root用户保持root帐号权限
anonuid=:指定匿名访问用户的本地用户UID,默认为nfsnobody(65534)
anongid=:指定匿名访问用户的本地用户组GID,默认为nfsnobody(65534)
secure(默认):限制客户端只能从小于1024的tcp/ip端口连接服务器
insecure:允许客户端从大于1024的tcp/ip端口连接服务器
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
async:将数据先保存在内存缓冲区中,必要时才写入磁盘
wdelay(默认):检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率
no_wdelay:若有写操作则立即执行,应与sync配合使用
subtree_check(默认) :若输出目录是一个子目录,则nfs服务器将检查其父目录的权限
no_subtree_check :即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
以nfsuser(uid=1000)创建共享目录,参数默认rw
# mkdir /data/nfs/share
# chown nfsuser. -R /var/nfs
# vi /etc/exports
#/data/nfs/share 192.168.10.0/24(rw)
# exportfs -r #重载exports配置
# exportfs -v #查看共享参数
#/data/nfs/share 192.168.10.0/24(rw,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash)
- exportfs参数说明
-a 全部挂载或卸载 /etc/exports中的内容
-r 重新读取/etc/exports 中的信息 ,并同步更新/etc/exports、/var/lib/nfs/xtab
-u 卸载单一目录(和-a一起使用为卸载所有/etc/exports文件中的目录)
-v 输出详细的共享参数