NFS文件同步
# NFS文件同步必须要安装的包
客户端和服务器都需要安装
nfs-utils,rpcbind:yum install nfs-utils rpcbind -y
nfs-utils 是 NFS 主要工作的软件包,包含了 NFS 服务器和客户端所需的工具和守护进程
NFS 本身没有做端口映射,所以需要 RPC 机制进行网络服务,rpcbind 是一个关键的组件,负责将客户端的 RPC 请求映射到实际的服务进程,总而言之,当需要 NFS 服务时,需要将 NFS 和 RPC 一起安装
# 启动服务
在服务端启动 NFS 和 RPC服务,并设置开机自启,客户端只需要启动 RPC 就可以,主要是需要 RPC 提供的守护进程
sudo systemctl start rpcbind
sudo systemctl enable rpcbind
sudo systemctl start nfs-server
sudo systemctl enable nfs-server
2
3
4
# 在服务端共享文件设置
先了解共享文件语法:
基本语法:<directory> <host>(<options>)
<directory>:要共享的目录路径
<host>:允许访问该共享的客户端,可以是主机名、IP 地址或网络地址
<options>:访问选项,用逗号分隔
常用选项:
rw
:读写权限ro
:只读权限sync
:数据在请求写入时同步到磁盘async
:数据在请求写入时不立即同步到磁盘no_root_squash
:允许根用户访问(不进行 UID 映射),远程 root 用户拥有与本地 root 用户相同的权限root_squash
:将根用户映射为匿名用户(默认),远程 root 用户被降级为匿名用户all_squash
:将所有用户映射为匿名用户,所有远程用户都被降级为匿名用户subtree_check
:检查子目录的权限no_subtree_check
:不检查子目录的权限insecure
:允许客户端使用不安全端口(大于1024的端口)anonuid
:设置映射用户的UIDanongid
:设置映射用户的GID
1.首先设置需要共享的文件和相关权限
比如我现在需要在服务器共享 /html/www 下的文件
- 如果选择 no_root_squash 的方式同步文件,则无需更改文件权限
- 如果选择 root_squash 的方式同步文件,用户通常被映射为 nfsnobody:nfsnobody,需要给同步文件设置其他组的权限
- groupadd -g 65534 nfsnobody ; useradd -u 65534 -g nfsnobody -s /sbin/nologin -c "NFS Nobody" nfsnobody
- 如果选择 all_squash 的方式同步文件,代表 所有用户都被映射为 匿名用户
chmod -R 744 /html/www
如果你想严谨一点,可以设置 /html/www 下所有文件的属主和属组
2.设置共享文件
vim /etc/exports
假如我要 /html/www 下的文件共享给 192.168.3.0/24
如果你的文件系统级别权限设置为“其他组只能读”(即文件或目录的权限为744),而在NFS导出选项中设置为 rw,那么最终权限是受限于文件系统级别的权限,换句话说,客户端用户会受到文件系统权限的限制,即使NFS导出选项是 rw,用户也只能读取而不能写入
设置为 root_squash 后,客户端会使用服务器预设的 nfsnobody 用户和组
/html/www 192.168.3.0/24(ro,sync,root_squash,no_subtree_check)
在更改 exports 文件后,使用 exportfs -r 重新加载该文件
# 开放 NFS 端口和 RPC 端口
如果有云控制台,还需要额外去配置防火墙信息
NFS 主要使用以下端口:
2049:NFS 服务器端口
111:rpcbind 端口
20048:rpc.mountd 端口
sudo firewall-cmd --permanent --add-port=2049/tcp
sudo firewall-cmd --permanent --add-port=2049/udp
sudo firewall-cmd --permanent --add-port=111/tcp
sudo firewall-cmd --permanent --add-port=111/udp
sudo firewall-cmd --permanent --add-port=20048/tcp
sudo firewall-cmd --permanent --add-port=20048/udp
2
3
4
5
6
# 客户端挂载文件
mount -t nfs [options] <server_ip>:/remote/share /local/mount/point
mount -t nfs 49.235.177.56:/var/temp/ /var/temp/nfs3/
选项:
-t nfs
: 指定挂载的文件系统类型为 NFS
[options]
: 这里可以指定挂载选项,例如 rw
、ro
、vers=4
等。选项用于控制挂载的行为,下面列举一些常见的选项:
rw
:以读写模式挂载ro
:以只读模式挂载vers=4
:指定 NFS 版本为 4,如果不指定,系统可能使用默认版本(通常是 NFSv3)nolock
:禁用锁定机制timeo=600
:设置挂载超时时间(以十分之一秒为单位)
<server_ip>:/remote/share
: 远程 NFS 服务器的 IP 地址和共享目录路径
<server_ip>
: NFS 服务器的 IP 地址或主机名/remote/share
: NFS 服务器上共享的目录路径,确保这个路径在 NFS 服务器的/etc/exports
文件中正确配置并导出
/local/mount/point
: 本地挂载点目录,即 NFS 共享目录将被挂载到本地文件系统的哪个目录,这个目录必须在客户端系统中存在且为空
# NFS 设置永久挂载
vim /etc/fstab
添加类似:server_ip:/exported/directory /mnt/nfs_share nfs defaults 0 0
server_ip
是 NFS 服务器的 IP 地址或主机名/exported/directory
是 NFS 服务器上导出的目录/mnt/nfs_share
是客户端系统上的挂载点目录nfs
是文件系统类型defaults
是挂载选项,可以根据需要进行调整
在编辑 /etc/fstab 之后,可以直接用 mount -a 挂载
验证挂载:df -h