介绍#
NFS 就是 Network File System 的缩写,它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。
NFS 服务器可以让 PC 将网络中的 NFS 服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;
NFS 一般用来存储共享视频,图片等静态数据;NFS 协议默认是不加密的,它不像 Samba,它不提供用户身份鉴别。服务端通过限定客户端的 IP 地址和端口来限制访问。
原理#
NFS 在文件传送或信息传送的过过程中,依赖于 RPC 协议。RPC,远程过程调用(Remote Procedure Call), 是使客户端能够执行其他系统中程序的一种机制。NFS 本身是没有提供信息传输的协议和功能的,但 NFS 却能让我们通过网络进行资料的分享,就是因为 NFS 使用了 RPC 提供的传输协议,可以说 NFS 就是使用 PRC 的一个程序
- 首先服务器端启动 RPC 服务,并开启 111 端口
- 服务器端启动 NFS 服务,并向 RPC 注册端口信息
- 客户端启动 RPC(portmap 服务),向服务端的 RPC(portmap) 服务请求服务端的 NFS 端口
- 服务端的 RPC(portmap) 服务反馈 NFS 端口信息给客户端。
- 客户端通过获取的 NFS 端口来建立和服务端的 NFS 连接并进行数据的传输
注意: 在启动 NFS SERVER 之前,首先要启动 RPC 服务(即 portmap 服务,下同)否则 NFS SERVER 就无法向 RPC 服务区注册,另外,如果 RPC 服务重新启动,原来已经注册好的 NFS 端口数据就会全部丢失。因此此时 RPC 服务管理的 NFS 程序也要重新启动以重新向 RPC 注册。
特别注意:一般修改 NFS 配置文档后,是不需要重启 NFS 的,直接在命令执行 systemctl reload nfs 或 exportfs –rv 即可使修改的 / etc/exports 生效
适用场景#
- NFS 最好是部署在局域网 ,不要在公网上 ;
- 适合在中小型企业使用;大型网站不会用 NFS 的, 用的都是 分布式存储
安装#
NFS 服务端#
安装 nfs-kernel-server:
$ sudo apt install nfs-kernel-server
NFS 客户端#
安装 nfs-common:
$ sudo apt install nfs-common
配置#
服务端配置#
创建共享目录
sudo mkdir -p /var/nfs/sharedir
配置 /etc/exports (NFS 挂载目录及权限由 / etc/exports 文件定义) ```null 格式: 共享目录的路径 允许访问的NFS客户端(共享权限参数)
参数:
- ro 只读
- rw 读写
- root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
- no_root_squash 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员
- all_squash 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户
- sync 同时将数据写入到内存与硬盘中,保证不丢失数据
- async 优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据
请注意,NFS客户端地址与权限之间没有空格
-
比如要将`/var/nfs/sharedir`目录共享, 则在该文件末尾添加下列语句:<br />
/home/lin/NFSshare 192.168.66.*(rw,sync,no_root_squash)
<br />`/var/nfs/sharedir *(rw,sync,no_root_squash,no_subtree_check)`
-
要限制客户端 IP, 添加下列语句:
<br />`/var/nfs/sharedir 122.111.222.111(rw,sync,no_subtree_check)`
-
共享目录为 / public , 允许访问的客户端为 192.168.245.0/24 网络用户,权限为只读
<br />`/public 192.168.245.0/24(ro)`
3.
重新加载 nfs-kernel-server 配置:
<br />`$ sudo systemctl reload nfs-kernel-server`
<a name="dc299cc9"></a>
### 客户端配置[#](#%E5%AE%A2%E6%88%B7%E7%AB%AF%E9%85%8D%E7%BD%AE)
1.
使用`showmount` 命令查看 nfs 服务器共享信息。
<br />输出格式为 “共享的目录名称 允许使用客户端地址”。<br />
showmount 命令参数:
- -a :显示目前主机与客户端的 NFS 联机分享的状态;
- -e :显示 / etc/exports 所分享的目录数据。
```null
user@k8s-node-01:~$ showmount -e 192.168.249.5
Export list for 192.168.249.5:
/var/nfs/sharedir *
在客户端创建目录,并挂载共享目录
$ sudo mkdir -p /mnt/nfs_sharedir
挂载远程共享目录:
$ sudo mount your_nfs_server_ip:/var/nfs/sharedir /mnt/nfs_sharedir
e.g.sudo mount 192.168.249.5:/var/nfs/sharedir /mnt/nfs_sharedir
- 编辑 fstab 文件, 使系统每次启动时都能自动挂载
$ sudo vim /etc/fstab
- 编辑 fstab 文件, 使系统每次启动时都能自动挂载
your_nfs_server_Ip:/var/nfs/sharedir /mnt/nfs_sharedir nfs defaults 0 0
卸载远程挂载
$ sudo umount /mnt/nfs_sharedir
https://www.cnblogs.com/FLY_DREAM/p/14094855.html