NFS文件存储
一、概述
NFS是Network File System的缩写,默认监听2049端口号。它最大的功能就是可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。
NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;NFS一般用来存储共享视频,图片等静态数据。
NFS分为服务端和客户端。服务端提供共享目录或文件,客户端对服务端共享的目录或文件挂载后,就可以读取到服务端提供的文件或目录,在客户端看来就像访问本地一样。
RPC,远程过程调用协议。可以通过网络从远程主机程序上请求服务,而不需要了解底层网络技术。最重要的功能是远程连接、端口注册。使用UDP的111端口监听客户请求。
NFS挂载原理

NFS工作原理
NFS服务端和客户端之间通过随机选择端口来传输数据,NFS服务端利用RPC协议与客户端进行沟通决定使用的随机端口,然后利用这个端口来传输数据,使用的随机端口通常小于1024。RPC协议用来统一管理NFS的随机端口,其使用的端口默认为111。
RPC与NFS通讯过程
首先服务器端启动RPC服务,并开启111端口
服务器端启动NFS服务,并向RPC注册端口信息
客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
二、NFS服务安装与启停
NFS服务安装
[root@nginx1 ~]# yum install -y nfs-utils
NFS服务启停
[root@localhost ~]# systemctl start nfs [root@localhost ~]# systemctl stop nfs [root@localhost ~]# systemctl enable --now nfs
三、NFS服务配置文件
####不用修改,知道即可###### [root@localhost ~]# cat /etc/nfs.conf # 这是一个NFS服务器的配置文件 # This is a general configuration for the NFS daemons and tools #[general] # pipefs-directory=/var/lib/nfs/rpc_pipefs # 设置RPC管道文件系统的目录 #[exportfs] # debug=0 # 设置导出时的调试级别为0 #[gssd] # verbosity=0 # 设置GSSAPI的日志级别为0 # rpc-verbosity=0 # 设置RPC日志级别为0 # use-memcache=0 # 是否使用内存缓存,这里设置为0,不使用 # use-machine-creds=1 # 是否使用机器凭证,这里设置为1,使用 # avoid-dns=1 # 是否避免DNS查找,这里设置为1,避免 # limit-to-legacy-enctypes=0 # 是否限制使用旧的对等体类型,这里设置为0,不限制 # context-timeout=0 # 设置上下文超时时间为0,即无超时时间 # rpc-timeout=5 # 设置RPC超时时间为5秒 # keytab-file=/etc/krb5.keytab # 指定Kerberos的keytab文件路径 # cred-cache-directory= # 凭证缓存目录为空,可能这个配置项被注释掉了或者不存在 # preferred-realm= # 首选领域为空,可能是默认的领域值 #[lockd] # port=0 # 锁管理器监听的端口为0,可能未配置或默认值 # udp-port=0 # UDP端口为0,可能未配置或默认值 #[mountd] # debug=0 # 挂载时的调试级别为0 # manage-gids=n # 是否管理组ID,这里设置为n,不管理 # descriptors=0 # 描述符数量为0,可能未配置或默认值 #[nfsdcltrack] # debug=0 # NFS数据流跟踪的调试级别为0 # storagedir=/var/lib/nfs/nfsdcltrack # 数据存储目录为空,可能这个配置项被注释掉了或者不存在 #[nfsd] # debug=0 # NFS服务的调试级别为0 # threads=8 # 并发线程数为8,可以提供更高的性能 # host= # 主机的IP地址或域名,这里为空,可能是默认值或未配置 #[statd] # debug=0 # 设置statd服务的调试级别为0,即不进行调试 # port=0 # 设置statd服务的监听端口为0,可能表示默认值或未配置 # outgoing-port=0 # 设置statd服务发送数据的端口为0,可能表示默认值或未配置 # name= # 设置statd服务的名称为空,可能表示默认值或未配置 # state-directory-path=/var/lib/nfs/statd # 设置statd服务的状态目录路径为/var/lib/nfs/statd # ha-callout= # 设置高可用调用为空,可能表示未配置 # no-notify=0 # 设置是否禁用通知为0,即不禁用通知 #[sm-notify] # debug=0 # 设置sm-notify服务的调试级别为0,即不进行调试 # force=0 # 设置是否强制发送通知为0,即不强制发送 # retry-time=900 # 设置发送通知请求的延迟时间为900秒 # outgoing-port= # 设置发送数据的端口为空,可能表示默认值或未配置 # outgoing-addr= # 设置发送数据的地址为空,可能表示默认值或未配置 # lift-grace=y # 设置是否解除宽限期为y,即解除宽限期
四、NFS文件共享配置文件
[root@localhost ~]# cat /etc/exports ###默认是空的
配置参数说明
| 参数 | 作用 |
|---|---|
| ro | 只读 |
| rw | 读写 |
| root_squash | 当以root身份访问时,映射为NFS服务端的匿名用户 |
| no_root_squash | 当以root身份访问时,映射为NFS服务端的root用户 |
| all_squash | 无论使用什么账户访问,均映射为NFS服务端的匿名用户 |
| sync | 同时将数据写入内存和硬盘中,保证不丢失数据 |
| async | 先将数据写入内存,然后写入硬盘中,可能会造成数据丢失 |
五、命令解析
| 命令字 | 选项 | 作用 |
|---|---|---|
| exportfs | -d | 开启调试模式。有效的调试类型包括:all, auth, call, general 和 parse。在/etc/nfs.conf的[exportfs]部分中设置debug=也可以开启调试模式。 |
| -a | 导出或取消导出所有目录。 | |
| -o | 指定一个与exports(5)文件中的导出选项列表相同的选项列表。 | |
| -i | 忽略/etc/exports文件和/etc/exports.d目录下的文件,仅使用命令行中给出的默认选项和选项。 | |
| -r | 重导出所有目录,将/var/lib/nfs/etab与/etc/exports和/etc/exports.d下的文件同步。该选项会删除来自/var/lib/nfs/etab中已从/etc/exports或/etc/exports.d下的文件的删除条目,并删除内核导出表中已不再有效的条目。 | |
| -u | 取消导出一个或多个目录。 | |
| -f | 如果/proc/fs/nfsd或/proc/fs/nfs被挂载,则将内核的导出表中的所有内容清除。活跃客户端的新的内核导出表条目是由rpc.mountd在它们下次发出NFS挂载请求时添加的。 | |
| -v | 显示详细信息。在导出或取消导出时,显示正在进行的事情。在显示当前导出列表时,还会显示导出选项列表。 | |
| -s | 显示适合/etc/exports的当前导出列表 | |
| shoumount | showmount [ -adehv ] [ --all ] [ --directories ] [ --exports ] [ --help ] [ --version ] [ host ] | |
| -a | 列出客户端主机名或IP地址以及以主机目录格式表示的挂载目录。 | |
| -d | 仅列出由客户端挂载的目录。 | |
| -e | 显示NFS服务器的导出列表。(常用) | |
| -h | 提供简短的帮助摘要。 | |
| -v | 报告程序的当前版本号。 |
六、客户端访问
#####查看nfs服务器192.168.115.128的共享目录 [root@localhost ~]# showmount -e 192.168.115.128
七、客户端挂载
####手动挂载## [root@localhost ~]# mount 192.168.115.128:/nfsdir /mnt ###自动挂载,建议启动挂载NFS文件系统的主机前,先去查看NFS服务器是否能够正常提供服务!!## [root@localhost ~]# vim /etc/fstab 192.168.115.128:/nfsdir /mnt nfs4 defaults 0 0 ###测试挂载#### [root@localhost ~]# mount -a ####查看挂载### [root@localhost ~]# df -Th 文件系统 类型 容量 已用 可用 已用% 挂载点 devtmpfs devtmpfs 475M 0 475M 0% /dev tmpfs tmpfs 487M 0 487M 0% /dev/shm tmpfs tmpfs 487M 7.6M 479M 2% /run tmpfs tmpfs 487M 0 487M 0% /sys/fs/cgroup /dev/mapper/centos-root xfs 116G 1.9G 114G 2% / /dev/sda1 xfs 497M 131M 367M 27% /boot tmpfs tmpfs 98M 0 98M 0% /run/user/0 192.168.115.111:/nfsdir nfs4 116G 1.9G 114G 2% /mnt
八、实战项目
项目需求
构建vsftpd服务,samba服务,两个服务对应的数据存储目录由NFS服务器提供,NFS的共享目录为/nfsdir,vsftpd服务器的数据目录名称为:ftproot;samba服务器的数据目录名称为:smbroot;
vsftpd服务器只能由upuser和downuser两个用户登录,在数据目录ftproot中包含三个目录,public、upload、download,两个用户对public具有只读权限;upuser对upload具有只能上传的权限,不能查看目录内容;upuser对download目录没有任何权限;downuser对upload目录没有任何权限;downuser对download目录只有下载权限,没有上传权限。
samba服务器只能由smbuser1和smbuser2登录,smbuser1用户对数据目录由所有权限;smbuser2用户对数据目录只有下载权限。
