NFS server可以看作是一个FILE SERVER,它可以让你的PC通过网络将远端的NFS SERVER共享出来的档案MOUNT到自己的系统中,在CLIENT看来使用NFS的远端文件就象是在使用本地文件一样。
RPC(Remote Procedure Call)
NFS本身是没有提供信息传输的协议和功能,它使用RPC作为传输协议。可以这么理解RPC和NFS的关系:NFS是一个文件系统,而RPC是负责负责信息的传输。
NFS共享目录配置分为server端和client端,共享存储硬盘需挂载在server端,利用NFS可将目录export给其他的机器共享。配置过程分为如下几步(本次操作系统为Centos7.9):
server端IP:192.168.1.203
client端IP:192.168.1.201-205
1、server端的配置
server端需先安装下述两个库
yum install nfs-utils.x86_64
yum install rpcbind.x86_64
安装完之后开机默认开启nfs和rpcbind服务:
systemctl enable nfs
systemctl enable rpcbind
systemctl start nfs
systemctl start rpcbind
systemctl stop firewalld
systemctl disable firewalld
注意server端必须关闭防火墙,否则client不能与server进行连接。
编辑/etc/exports这个文件,把需要共享的目录及相关权限配置写到配置文件中。
在共享之前,本地共享存储硬盘已经挂载到了/public目录下
vim /etc/exports
在文件中添加如下内容:
/public *(rw,async,no_root_squash,no_subtree_check)
参数说明:
/public | 需要共享给其他机器的目录 |
* | 其他机器的IP地址,*代表任意机器都可以访问 |
ro | 该主机对该共享目录有只读权限 |
rw | 操作权限,rw代表其他机器对此目录具有可读写权限 |
async | 资料会先暂存于内存中,而非直接写入硬盘 |
sync | Sync 资料同步写入到内存与硬盘中 |
root_squash | 客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户 |
no_root_squash | 客户机用root访问该共享文件夹时,不映射root用户 |
all_squash | 客户机上的任何用户访问该共享目录时都映射成匿名用户 |
anonuid | 客户机上的用户映射成指定的本地用户ID的用户 |
anongid | 将客户机上的用户映射成属于指定的本地用户组ID |
insecure | 允许从这台机器过来的非授权访问 |
subtree_check | 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认) |
no_subtree_check | 不检查父目录权限 |
no_wdelay | 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置 |
wdelay | 如果多个用户要写入NFS目录,则归组写入 |
no_hide | 共享NFS目录的子目录 |
hide | 在NFS共享目录中不共享其子目录 |
编辑好保存之后退出,执行如下命令,nfs会重新读取配置文件,无需重启nfs服务。
exportfs -rv
2、client端的配置
同样,client端需先安装下述两个库
yum install nfs-utils.x86_64
yum install rpcbind.x86_64
安装完之后开机默认开启nfs和rpcbind服务:
systemctl enable nfs
systemctl enable rpcbind
systemctl start nfs
systemctl start rpcbind
systemctl stop firewalld
systemctl disable firewalld
开启服务后挂载进行挂载即可:
mount -t nfs 192.168.1.203:/public /public
3、常见报错处理
如果挂载ntfs出现错误,可查看server端的/var/log/messages日志文件,查看具体错误原因。
(1) mount.ntfs: no route to host
该错误出现原因为server端和client端的防火墙未关闭,在两边执行如下命令即可:
systemctl stop firewalld
(2) rpc.mountd[10301]: refused mount request from 192.168.1.204 for /public (/public): unmatched host
该错误出现原因为server端的/etc/exports文件中IP地址设置有问题,之前我设置的是:
/public 192.168.1.*(rw,async,no_root_squash,no_subtree_check)
以为这样能匹配以192.168.1.开头的所有IP地址,但实际不行,不知道为什么,后面直接用*通配符就可以了。
/public *(rw,async,no_root_squash,no_subtree_check)
(3) mount.ntfs: operation not permitted
报错原因:因为 nfs 默认配置选项是 secure,不允许客户端通过非特权端口访问。
在server端/etc/exports配置文件中添加insecure选项即可。
/public *(rw,async,insecure,no_root_squash,no_subtree_check)