一.概述
网络文件系统,英文Network File System(NFS),是由SUN公司研制的UNIX表示层协议(presentation layer protocol),能使使用者访问网络上别处的文件就像在使用自己的计算机一样。通过 NFS,我们本地 NFS 的客户端应用可以透明地读写位于服务端 NFS 服务器上的文件,就像访问本地文件一样方便。简单的理解,NFS 就是可以透过网络,让不同的主机、不同的操作系统可以共享存储的服务。
二.需要的资源
资源 | IP |
服务器端 | 47.97.112.209 |
客户端 | 192.168.132.64 |
三.服务器端
1.安装NFS
yum install -y nfs-utils
systemctl enable nfs-server rpcbind --now
2.创建nfs共享目录,授权
mkdir -p /home/ydxc && chmod -R 777 /home/ydxc
3.写入exports
cat > /etc/exports << EOF
/home/ydxc *(rw,sync,insecure,no_root_squash)
EOF
如果客户端 IP 不在该区间也想要挂载的话,可以设置 IP 区间更大或者设置为 * 即允许所有客户端挂载,例如:/home *(ro,sync,insecure,no_root_squash) 设置 /home 目录允许所有客户端只读挂载。
参数 说明
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async nfs 在写入数据前可以响应请求
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 用户具有根目录的完全管理访问权限
anonuid=xxx 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 UID
anongid=xxx 指定 nfs 服务器 /etc/passwd 文件中匿名用户的 GID
4.启动nfs
systemctl start nfs-server
四.客户端
1.安装NFS
yum install -y nfs-utils
2.验证能否正常连接
showmount -e 47.97.112.209
此时出现报错:clnt_create: RPC: Port mapper failure - Timed out 或者mount.nfs: Connection timed out 。
这是因为rpc端口或者NFS端口没有被开启。
将111/udp,111/tcp,20048/tcp,20048/udp,2049/tcp,2049/udp防火墙端口打开。
firewall-cmd --zone=public --add-port=111/tcp --permanent
firewall-cmd --zone=public --add-port=111/udp --permanent
firewall-cmd --zone=public --add-port=20048/tcp --permanent
firewall-cmd --zone=public --add-port=20048/udp --permanent
firewall-cmd --zone=public --add-port=2049/tcp --permanent
firewall-cmd --zone=public --add-port=2049/udp --permanent
firewall-cmd --reload
然后就能正常连接了:
3.挂载远端目录到本地目录。
客户端创建目录
mkdir -p /home/ydxc
挂载:
mount -t nfs 47.97.112.209:/home/ydxc /home/ydxc
4.测试文件能否正常读取写入
在服务器端共享目录/home/ydxc创建文件ai.txt:
登录客户端查看是否有该文件:
可以看到客户端可以看到有文件了。
在客户端创建文件夹upload:
服务器端可以看到已经客户端创建的文件了: