nfs-部署
======1. CentOS7======
服务端
1. 安装
1
yum -y install nfs-utils
2. 创建共享目录并设置权限
1
2
mkdir /data/nfs_share
chown -R nfsnobody.nfsnobody /data/nfs_share
3. 配置nfs使用端口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
修改 /etc/sysconfig/nfs 文件
MOUNTD_PORT=20048
STATD_PORT=20049
LOCKD_TCPPORT=20050
LOCKD_UDPPORT=20051
#默认
RPCNFSDARGS=""
RPCMOUNTDOPTS=""
STATDARG=""
SMNOTIFYARGS=""
RPCIDMAPDARGS=""
RPCGSSDARGS=""
GSS_USE_PROXY="yes"
BLKMAPDARGS=""
4. 配置共享目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
vim /etc/exports
/data/nfs_share *(rw,sync,no_root_squash,no_subtree_check,insecure)
/data/nfs_share 172.17.0.0/16(rw)
Exports文件中可以设定的参数主要有以下这些:
参数 说明
(1) Ro 该主机对该共享目录有只读权限
(2) Rw 该主机对该共享目录有读写权限
(3) Root_squash 客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户
(4) No_root_squash 客户机用root访问该共享文件夹时,不映射root用户
(5) All_squash 客户机上的任何用户访问该共享目录时都映射成匿名用户
(6) Anonuid 将客户机上的用户映射成指定的本地用户ID的用户
(7) Anongid 将客户机上的用户映射成属于指定的本地用户组ID
(8) Sync 资料同步写入到内存与硬盘中
(9) Async 资料会先暂存于内存中,而非直接写入硬盘
(10) Insecure 允许从这台机器过来的非授权访问
(11) subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
(12) no_subtree_check 和上面相对,不检查父目录权限
(13) wdelay 如果多个用户要写入NFS目录,则归组写入(默认)
(14 )no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。
(15) hide 在NFS共享目录中不共享其子目录
(16) no_hide 共享NFS目录的子目录
(17) secure NFS通过1024以下的安全TCP/IP端口发送
(18) insecure NFS通过1024以上的端口发送
5. 启动nfs服务,
1
2
3
4
5
systemctl start nfs
查看状态
rpcinfo -p 172.17.0.2
showmount -e localhost
6. 防火墙配置
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 注意有UDP协议
NFS_PORT=" 111 2049 20048 20049 20050 20051"
# NFS 文件共享
for ip in ${NET_TRUES_LIST}
do
# 开放 tcp 规则
for tcpport in ${NFS_PORT}
do
$IPT -A INPUT -s $ip -p tcp -m state --state NEW -m tcp --dport ${tcpport} -j ACCEPT
done
# 开放 udp 规则
for udpport in ${NFS_PORT}
do
$IPT -A INPUT -s $ip -p udp -m udp --dport ${udpport} -j ACCEPT
done
done
客户端
1. 安装
1
2
3
4
5
6
7
yum -y install nfs-utils
mkdir /data/nfs_share
#测试是否能联通
showmount -e 172.17.0.2
mount -t nfs 172.17.0.2:/data/nfs_share /data/nfs_share
2.开机加载
1
2
3
4
vim /etc/fstab
#在该文件中挂载,使系统每次启动时都能自动挂载
172.17.0.2:/data/nfs_share /data/nfs_share nfs defaults 0 0
mount -a #是文件/etc/fstab生效
3. 卸载目录
1
2
umount /data/nfs_share
df -h
======2. MacOS======
1. 启动
1
2
3
4
nfsd status
nfsd start
nfsd stop
nfsd restart
2. 配置文件
1
2
3
4
5
6
7
8
9
vim /etc/exports
/Users/De-lovely/DataStorage/Mac_nfs_share -alldirs -ro -maproot=root:wheel -network=172.17.0.0 -mask=255.255.0.0
默认为可读写,加入
-ro 为只读 readonly
-alldirs 是共享 /Users 目录下所有文件 -network -mask 制定工作在那个网段内 -maproot=root:wheel,把client端的root用户映射为Mac OS上的root,client端的root组映射为Mac OS上的wheel (gid=0) 组。这个参数非常重要,否则会nfsroot链接失败
修改配置后使用下面命令,进行检查。
sudo nfsd checkexports
======3. Ubuntu======
1. 客户端/服务端
1
2
apt-get install -y nfs-kernel-server nfs-common
systemctl enable nfs-kernel-server.service
2. 配置文件
1
2
3
4
echo "/data/nfs_share *(rw,sync,no_root_squash)" >> /etc/exports
systemctl restart nfs-kernel-server.service
systemctl status nfs-kernel-server.service
3. 客户端挂载
1
2
3
4
5
## 挂载服务端共享目录
mount -t nfs 10.20.0.22:/data/nfs_share /data -o nolock
## 开机启动
echo "10.20.0.22:/data/nfs_share /data nfs defaults 0 0" >> /etc/fstab
问题
1
2
3
4
1. 如果服务端有问题,客户端一直卡着不动
解决:
强制卸载(force): umount -f /data/nfs_share
延迟卸载(lazy) : umount -l /data/nfs_share
本文由作者按照
CC BY 4.0
进行授权