记录用于 pve、openwrt 以及 centos 的nfs文件共享以及文件夹挂载,nfs相关的防火墙 iptables、firewall 设置。
开启文件共享
准备工作
准备好共享的文件目录,安装nfs服务,各linux的命令如下
1 | # pve\Debian\Ubuntu |
pve可以直接在pve服务器上安装,或者独立创建一个容器或虚拟机作为专用的nfs服务器
如果直接pve提供nfs服务,需要在pve节点上新建一个目录:磁盘 → 目录 → 创建: 目录 ,按需填写需要挂载的盘分区等即可
如果使用pve节点服务器上已有的目录也可以,注意目录权限以及安全问题
修改配置文件
按需要修改,新增 /etc/exports
条目
例如:
1 | # [共享的目录] [主机名1或IP地址1(参数1,参数2)] [主机名2或IP地址2(参数3,参数4)] |
授权IP或主机
- 可以写IP:10.10.10.1
- 可以写网段:10.10.0.0/16
- 可以写主机名:client.lab.com
- 可以写域:*.lab.com
- 可以所有,用
*
表示
参数列表
参数 | 作用 |
---|---|
ro | 只读访问 |
rw | 读写访问 |
sync | 资料同步写入到内存与硬盘当中 |
async | 资料会先暂存于内存当中,而非直接写入硬盘 |
secure | NFS通过1024以下的安全TCP/IP端口发送 |
insecure | NFS通过1024以上的端口发送 |
wdelay | 如果多个用户要写入NFS目录,则归组写入(默认) |
no_wdelay | 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置 |
hide | 在NFS共享目录中不共享其子目录 |
no_hide | 共享NFS目录的子目录 |
subtree_check | 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认) |
no_subtree_check | 和上面相对,不检查父目录权限 |
all_squash | 共享文件的UID和GID映射匿名用户anonymous,适合公用目录 |
no_all_squash | 保留共享文件的UID和GID(默认) |
root_squash | root用户的所有请求映射成如anonymous用户一样的权限(默认) |
no_root_squash | root用户具有根目录的完全管理访问权限 |
启动并设置自启动
1 | /etc/init.d/nfs-kernel-server start |
发布并查看共享目录
1 | # 发布共享(如果修改了/etc/exports 配置文件,此命令表示重读一遍/etc/exports,并生效) |
挂载nfs目录
- 直接命令挂载
1
2mkdir /test
mount -t nfs 192.168.1.1:/test /test - 开机自动挂载
- 修改
/etc/fstab
/etc/fstab 1
192.168.1.1:/test /test nfs defaults 0 0
- 对
/etc/fstab
内容立即生效1
mount -a
- 修改
- 取消挂载命令
1
umount /test
防火墙问题
如果客户端无法看到服务端共享,请注意防火墙是否开启或对应的端口是否放行
nfs服务需要开启 mountd
,nfs
,nlockmgr
,portmapper
,rquotad
这5个服务:nfs
固定为2049,portmapper
固定为111,其他的3个服务是用的随机端口。
nfs服务查看端口命令
rpcinfo -p
- 固定nfs端口,修改
/etc/sysconfig/nfs
/etc/sysconfig/nfs 1
2
3
4
5MOUNTD_PORT=4001
STATD_PORT=4002
LOCKD_TCPPORT=4003
LOCKD_UDPPORT=4003
RQUOTAD_PORT=4004 - 放开端口
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19# iptables
iptables -I INPUT 5 -p tcp -m tcp --dport 111 -j ACCEPT
iptables -I INPUT 5 -p udp -m udp --dport 111 -j ACCEPT
iptables -I INPUT 5 -p tcp -m tcp --dport 2049 -j ACCEPT
iptables -I INPUT 5 -p udp -m udp --dport 2049 -j ACCEPT
iptables -I INPUT 5 -p tcp -m tcp --dport 4001:4004 -j ACCEPT
iptables -I INPUT 5 -p udp -m udp --dport 4001:4004 -j ACCEPT
systemctl restart iptables
iptables -nvL –line
# firewall
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
firewall-cmd --permanent --add-port=40001-40004/tcp
firewall-cmd --permanent --add-port=40001-40004/udp
firewall-cmd --reload
firewall-cmd --list-all - 重启 nfs、rpcbind 服务