1 NFS简介
NFS(Network File System 网络文件服务),是一种基于 TCP/IP 传输的网络文件系统协议,最初由 Sun 公司开发。
NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,通过使用 NFS 协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。(远端过程调用:自己没有这种功能,调用别人的功能) NFS 也是 NAS 存储 设备必然支持的一种协议,以完成远程到本地的映射过程。
在 CentOS 7 系统中,需要安装 nfs-utils、rpcbind 软件包来提供 NFS 共享服务,前者用于 NFS 共享发布和访问,后者用于 RPC 支持。手动加载 NFS 共享服务时,应该先启动 rpcbind,再启动 nfs。
NFS的特点:
- 采用TCP/IP传输网络文件
- 安全性低
- 简单易操作
- 适合局域网环境
与FTP不同,FTP是普通的文件共享软件。
而NFS 是文件系统,是操作系统内核来管理的:
[root@localhost ~]#ls /lib/modules/3.10.0-693.el7.x86_64/kernel/fs/ binfmt_misc.ko.xz ceph dlm fat gfs2 lockd nfs_common overlayfs udf btrfs cifs exofs fscache isofs mbcache.ko.xz nfsd pstore xfs cachefiles cramfs ext4 fuse jbd2 nfs nls squashfs 复制代码
2 NFS原理
网络异常,图片无法展示
|
NFS优势:
节省本地存储空间,将常用的数据如:/home 目录,存放在NFS服务器上且可以通过网络访问,将减少本地磁盘的使用率。
3 NFS软件介绍
软件包 (包括服务器端和客户端):
- nfs-utils(nfs端口号 2049/tcp)
- rpcbind(RPC端口号 111/tcp)
相关软件包(可不安装):tcp_wappers
NFS服务主要进程:
- rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
- rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
- rpc.lockd 非必要,管理文件锁,避免同时写出错
- rpc.statd 非必要,检查文件一致性,可修复文件
4 配置文件
配置文件位置:/etc/exports
配置文件格式:
/dir 主机1(参数1,参数2) 主机2(参数1,参数2)... #分享的目录(绝对路径) 共享给谁(允许哪些主机访问) #示例: /share * #表示将/share目录共享给任何主机 ,*代表任意(注意此时未给权限) (内网中可以用*) /share 192.168.72.0/24 #表示将/share目录共享给192.168.72.0网段内的任意主机 复制代码
配置说明:
# 一、主机: 1.通配符:表示使用*通配所有客户端 2.单个主机:ipv4,ipv6,FQDN 3.网段:两种掩码格式均支持(内网情况下) 172.18.0.0/255.255.0.0 172.18.0.0/16 wildcards:主机名通配,例如:*.kgc.com,IP不可以 netgroups:NIS域的主机组,@group_name # 二、常用参数:(默认参数:ro,sync,root_squash,no_all_squash) 1.读写权限 ro,rw 只读和读写 2.异步/同步 async:异步,数据变化后不立即写磁盘,先写入到缓冲区中,过一段时间再写入磁盘,性能高,安全性 低 sync(1.0.0后为默认):同步,数据在请求时立即写入共享存储磁盘,性能低,安全性高 3.压缩权限 root_squash(默认):远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,CentOS 7以前的版本为nfsnobody。 no_root_squash :远程root映射成NFS服务器的root用户。 all_squash :所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody。 no_all_squash (默认):保留共享文件的UID和GID。 anonuid和anongid:指明匿名用户映射为特定用户UID和组GID,而非nobody,可配合all_squash使用。 复制代码
参数 | 作用 |
ro | 只读 |
rw | 读写 |
sync | 同步写入。同时将数据写入到内存与硬盘中,保证不丢失数据 |
async | 异步写入。优先将数据保存到内存,然后再写入硬盘;这样效率更高,但可能会丢失数据 |
root_squash | 当NFS客户端以root访问时,映射为NFS服务器的匿名用户 |
no_root_quash | 当NFS客户端以root访问时,映射为NFS服务器的root用 |
all_squash | 无论NFS客户端使用什么身份登录,都映射为NFS服务器的匿名用户 |
no_all_squash(默认) | 访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组; |
anonuid=< UID> | 指定匿名访问用户的本地用户UID,默认为nfsnobody(65534) |
anongid=< GID> | 指定匿名访问用户的本地用户组GID,默认为nfsnobody(65534) |
exportfs 命令可用于管理 nfs
exportfs -v : 查看本机所有nfs共享目录,及其详细信息 exportfs -r : 重新读取配置文件,重新加载配置 showmount -e : 查看本机发布的NFS共享目录 showmount -e 192.168.72.10 : 查看服务器192.168.72.10提供的共享目录 复制代码
5 NFS共享存储服务的操作步骤
实验环境:
服务端:192.168.72.10
客户端:192.168.72.129
实验步骤:
1、服务端设置:
#1.关闭防火墙和selinux [root@localhost ~]# systemctl stop firewalld [root@localhost ~]# setenforce 0 setenforce: SELinux is disabled #2.安装nfs-utils和rpcbind软件包 [root@localhost ~]# yum install nfs-utils rpcbind -y #3.新建共享目录,在目录内创建文件 [root@localhost ~]# mkdir /share [root@localhost ~]# touch /share/f1.txt #4.编辑nfs配置文件 [root@localhost ~]# vim /etc/exports /share 192.168.72.0/24 #5.启动两个服务,查看详细的nfs信息 [root@localhost ~]# systemctl start nfs [root@localhost ~]# systemctl start rpcbind [root@localhost ~]# showmount -e //查看本机发布的NFS共享目录 Export list for localhost.localdomain: /share 192.168.72.0/24 [root@localhost ~]# exportfs -v //查看NFS共享目录的详细信息 /share 192.168.72.0/24(ro,sync,wdelay,hide,no_subtree_check,sec=sys,secure,root_squash,no_all_squash) 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
2、客户端设置:
#1.检查nfs-utils和rpcbind两个软件是否已安装。 [root@192 ~]# rpm -q rpcbind rpcbind-0.2.0-42.el7.x86_64 [root@192 ~]# rpm -q nfs-utils nfs-utils-1.3.0-0.48.el7.x86_64 #2.将服务端的共享目录/share,挂载到本地的/mnt目录下。 [root@192 ~]# mount 192.168.72.10:/share /mnt [root@192 ~]# df -Th 文件系统 类型 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root xfs 17G 5.0G 13G 29% / devtmpfs devtmpfs 897M 0 897M 0% /dev tmpfs tmpfs 912M 0 912M 0% /dev/shm tmpfs tmpfs 912M 9.1M 903M 1% /run tmpfs tmpfs 912M 0 912M 0% /sys/fs/cgroup /dev/sda1 xfs 1014M 179M 836M 18% /boot tmpfs tmpfs 183M 12K 183M 1% /run/user/42 tmpfs tmpfs 183M 0 183M 0% /run/user/0 192.168.72.10:/share nfs4 10G 4.0G 6.1G 40% /mnt #3.查看共享目录内的文件 [root@192 ~]# ls /mnt f1.txt 复制代码
网络异常,图片无法展示
|
3、测试在服务端的共享目录中新建文件f2,观察客户端能否查看到
#1.服务端,在/share目录中新建文件f2 [root@localhost ~]# cd /share [root@localhost share]# touch f2 [root@localhost share]# ls f1.txt f2 #2.客户端,查看共享目录挂载点内的文件 [root@192 ~]# ls /mnt f1.txt f2 复制代码
6 小贴士
- 启动服务后,可以使用 "ss -ntuap | grep 111" 命令查看端口是否已开启,以便确认服务是否正常启动了。
- 使用mount命令只是临时挂载,如果想要将NFS共享目录永久挂载到本地,需要修改配置文件/etc/fstab。挂载参数为:defaults,_netdev。
网络异常,图片无法展示
|
- 但如果在本机配置文件/etc/fstab中写入了永久挂载,之后服务端取消了对本机的NFS共享,那么本机重启时会出现 “CRTL-D” 报错,此时需要进入但用户模式,编辑/etc/fstab,将NFS共享目录的挂载信息删除。
- 强制卸载 NFS:umount -lf 挂载设备/挂载点
- 如果服务器端NFS服务突然间停掉了,而客户端正在挂载使用时,在客户端就会出现执行 df -h 命令卡死的现象。这个时候直接使用umount 命令是无法直接卸载的,需要加上 -lf 选项才能卸载。