Windows/Linux客户端挂载NFS共享存储
1. Linux搭建NFS共享存储
1.1. NFS概述
NFS 是一种基于 TCP/IP 传输的网络文件系统协议,通过使用 NFS协议,客户机可以像访问本地目录一样访问远程 NFS 服务器中的共享资源。同时NFS 也是 NAS存储设备必然支持的一种协议,但是因为没有用户认证机制,而且数据在网络上明文传输,安全性很差,所以一般只能在局域网中使用。
1.2. 安装并配置NFS Server
NFS 服务的实现依赖于 RPC (Remote Process Call,远端过程调用)机制,以完成远程到本地的映射过程。在Linux操作系统中,需要安装 nfs-utils、rpcbind 软件包来提供 NFS 共享服务,前者用于 NFS 共享发布和访问,后者用于 RPC 支持。
关闭防火墙和SELinux:
systemctl disable firewalld
systemctl stop firewalld
sed -ri '#^SELINUX=#cSELINUX=Disabled' /etc/selinux/config
setenforce 0
df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 1.9G 0 1.9G 0% /dev
tmpfs 1.9G 0 1.9G 0% /dev/shm
tmpfs 1.9G 8.5M 1.9G 1% /run
tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
/dev/vda1 20G 1.6G 18G 9% /
/dev/vdb1 985G 77M 935G 1% /wangzynfs # 使用一块单独的硬盘充当共享存储空间
tmpfs 379M 0 379M 0% /run/user/0
vim /etc/fstab
UUID=d92f2371-9009-4fc9-bd60-7c468c780ce1 / ext4 defaults 1 1
/dev/vdb1 /wangzynfs ext4 defaults 1 1
安装nfs-utils和rpcbind软件包:
yum install -y nfs-utils rpcbind
1.3. 启动并验证NFS Server
说明: 手动加载NFS共享服务时,应该先启动/停止rpcbind,再启动/停止nfs,一定要按顺序启动和停止。
启动rpcbind和nfs服务:
systemctl start rpcbind
systemctl start nfs
systemctl enable rpcbind
systemctl enable nfs
设置共享目录:
NFS的配置文件为 /etc/exports,文件内容默认为空,即无任何共享。
在exports文件中设置共享资源时,记录格式为“目录位置 客户机地址(权限选项)
cat /etc/exports
/wangzynfs 192.168.24.0/24(rw,sync,no_root_squash,insecure)
- rw 表示允许读写
- ro 表示为只读
- sync 表示同步写入到内存与硬盘中
- no_root_squash表示当客户机以root身份访问时赋予本地root权限(默认是- root_squash),如果不加那么客户端无法在里面编辑或写入文件,因为默认以nfsnobody的权限
- root_squash 表示客户机用root用户访问该共享目录时,将root用户映射成匿名用户
- all_squash 所有访问用户都映射为匿名用户或用户组
- async 将数据先保存在内存缓冲区中,必要时才写入磁盘,速度快但会丢失数据
- subtree_check(默认) 若输出目录是一个子目录,则nfs服务器将检查其父目录的权限
- no_subtree_check 即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率
- insecure必须加,否则会报“无法创建映射网络驱动器 网络错误-53”错误
重启NFS服务并验证:
systemctl stop rpcbind
systemctl stop nfs
systemctl start rpcbind # 注意先启动rpcbind服务
systemctl start nfs
exportfs -v
/wangzynfs 192.168.24.xxx/32(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
showmount -e localhost
Export list for localhost:
/wangzynfs 192.168.24.xxx/32
2. 客户端挂载NFS共享存储
2.1. Windows操作系统挂载NFS共享存储
打开控制面板—程序—找到“启用或关闭Windows功能”—启用NFS服务,完成之后不需要重启Windows操作系统
说明:NFS服务默认关闭,家庭中文版不支持该功能奥
-
选择映射网络驱动器:
-
输入:\NFS Server的IP地址\共享路径
-
挂载完成之后,往共享存储写入文件,会报“需要权限来执行此操作”
接下来需要修改注册表,在注册表中添加匿名用户的默认UID和GID
- 在运行中输入regedit,打开注册表编辑器:
按照如下顺序检索:计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\ClientForNFS\CurrentVersion\Default
新建AnonymousGig和AnonymousUid,其值都设置为0。修改完成之后,需要重启Windows客户端操作系统,注册表才会生效
查看共享存储NFS属性信息:
2.2. Linux操作系统挂载NFS共享存储
- Linux客户端安装如下软件包:
yum install -y nfs-utils rpcbind
- 验证服务端挂载点:
showmount -e 172.26.xxx.xxx
Export list for 172.26.xxx.xxx:
/wangzynfs 172.26.xxx.xxx/32
- 安装HTTP服务挂载共享存储:
yum install -y httpd
mount -t nfs 172.26.xxx.xxx:/wangzynfs /var/www/html/
# NFS 共享的访问使用 mount 命令来进行挂载,对应的文件系统类型为 nfs
手动挂载NFS共享目录:
mount -t nfs 172.26.xxx.xxx:/wangzynfs /var/www/html
df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 486M 0 486M 0% /dev
tmpfs 496M 0 496M 0% /dev/shm
tmpfs 496M 6.7M 489M 2% /run
tmpfs 496M 0 496M 0% /sys/fs/cgroup
/dev/vda1 20G 1.7G 17G 9% /
tmpfs 100M 0 100M 0% /run/user/0
172.26.xxx.xxx:/wangzynfs 985G 76M 935G 1% /var/www/html
自动挂载NFS共享目录:
修改 /etc/fstab 配置文件,加入NFS共享目录的挂载设置,文件系统类型为nfs
vim /etc/fstab
172.26.xxx.xxx:/wangzynfs /var/www/html nfs defaults,_netdev 1 1
3. 强制卸载NFS共享存储
NFS客户端与服务器端的耦合度是非常高的,如果客户端正在挂载使用,服务器端NFS服务突然间停掉了,那么在客户端就会出现执行df -h命令卡死的现象。
这个时候使用umount命令是无法直接卸载的,需要加上-lf 选项才能卸载。
当出现卡死现象时,要重新开一个终端,执行cat /etc/rc.local命令,查看挂载点。然后使用umount命令卸载,其中-l 选项表示解除正在繁忙的文件系统,-f 选项表示强制。
模拟NFS服务端故障
systemctl stop nfs
客户端执行如下命令都会卡住
umount /var/www/html
df -h
需要在客户端强制解除挂载
umount -lf /var/www/html