文章

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 进行授权