NFS服务
1、NFS工作原理图
NFS:Network File System 网络文件系统,基于内核的文件系统。
NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,以完成远程到本地的映射过程。
2、软件包
红帽系统: nfs-utils: 包括服务器和客户端相关工具,CentOS8 最小化安装时默认没有安装)
Ubuntu: nfs-kernel-server 服各器包名,nfs-common 客户端包名
3、NFS服务主要进程
rpcinfo 工具可以查看RPC相关信息
查看注册在指定主机的RPC程序
rpcinfo -p hostname
查看RPC注册程序
rpcinfo -s hostname
#查看远程主机的NFS共享
showmount -e hostname
[root@backup ~]# showmount -e 10.0.0.104
Export list for 10.0.0.104:
/data/nfs2 *
/data/nfs1 10.0.0.0/24
rpc.nfsd 最主要的NFS进程,管理客户端是否可登录
rpc.mountd 挂载和卸载NFS文件系统,包括权限管理
rpc.lockd 非必要,管理文件锁,避免同时写出错
rpc.statd 非必要,检查文件一致性,可修复文件
4、NFS配置文件:
/etc/exports
/etc/exports.d/*.exports
5、红帽系统安装
[root@nfs ~]# yum -y install nfs-utils
查看包文件
[root@nfs ~]# rpm -ql nfs-utils
/usr/lib/systemd/system/nfs-server.service
/etc/exports.d
/etc/gssproxy/24-nfs-server.conf
/etc/modprobe.d/lockd.conf
/etc/nfs.conf
/etc/nfsmount.conf
/etc/request-key.d/id_resolver.conf
[root@nfs ~]# systemctl enable --now nfs-server.service
查看状态,服务已经启动
[root@nfs ~]# systemctl status nfs-server.service
6、Ubuntu安装
服务器
[root@ubuntu2004 ~]#apt install nfs-kernel-server
客户端
[root@ubuntu2004 ~]#apt -y install nfs-common
7、NFS共享案例
(1)服务端
案例:
#创建文件夹/data/nfs1,文件夹所有者所有组为nobody
[root@nfs ~]# mkdir /data/nfs1 -p
[root@nfs ~]# chown nobody:nobody /data/nfs1
[root@nfs ~]# vim /etc/exports
#所有权限
/data/nfs1 *(rw,all_squash)
[root@nfs ~]# exportfs -r
案例2
#创建共享用户,指定UID,GID
[root@nfs ~]# groupadd -g 66 nfstest
[root@nfs ~]# useradd -u 66 -g 66 nfstest
#创建文件夹/data/nfs2,文件夹所有者所有组为nfstest
[root@nfs ~]# mkdir /data/nfs2 -p
[root@nfs ~]# chown nfstest:nfstest /data/nfs2
#指定主机范围,所有权限
/data/nfs1 10.0.0.0/24(rw,all_squash,anonuid=66,anongid=66)
[root@nfs ~]# exportfs -r
(2)客户端
未安装nfs客户端挂载失败
[root@backup ~]# mount 10.0.0.104:/data/nfs1 /mnt
mount: /data/nfs: bad option; for several filesystems (e.g. nfs, cifs) you might need a /sbin/mount.<type> helperprogram.
安装客户端
[root@backup ~]# yum -y install nfs-utils.x86_64
[root@backup ~]# mount 10.0.0.104:/data/nfs1 /mnt
[root@backup ~]# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
devtmpfs devtmpfs 379312 0 379312 0% /dev
tmpfs tmpfs 398024 0 398024 0% /dev/shm
tmpfs tmpfs 398024 5692 392332 2% /run
tmpfs tmpfs 398024 0 398024 0% /sys/fs/cgroup
/dev/nvme0n1p2 xfs 52403200 2172828 50230372 5% /
/dev/nvme0n1p1 xfs 1038336 206604 831732 20% /boot
tmpfs tmpfs 79604 0 79604 0% /run/user/0
10.0.0.104:/data/nfs1 52403200 2199936 50203264 5% /data/nfs
10.0.0.104:/data/nfs2 52403200 2199936 50203264 5% /mnt
开机自动挂载,使用defaults网络异常会开机启动不了 使用_netdev
[root@backup ~]# vim /etc/fstab
10.0.0.104:/data/nfs1 /data/nfs/ nfs _netdev 0 0
8、exportfs
exportfs:可用于管理NFS导出的文件系统
常见选项:
-v #查看本机所有NFS共享
-r #重读配置文件,并共享目录
-a #输出本机所有共享
-au #停止本机所有共享
案例
#重读配置文件,并共享目录
[root@nfs ~]# exportfs -r
#查看本机所有NFS共享
[root@nfs ~]# exportfs -v
/data/nfs1 10.0.0.0/24(sync,wdelay,hide,no_subtree_check,anonuid=66,anongid=66,sec=sys,rw,secure,root_squash,all_squash)
/data/nfs2 <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,root_squash,all_squash)
#停止本机所有共享
[root@nfs nfs1]# exportfs -au
#输出本机所有共享
[root@nfs nfs1]# exportfs -a
9、NFS共享配置文件格式
/共享的文件夹 主机1(opt1,opt2) 主机2(opt1,opt2)...
主机格式:
所有主机
*(rw,all_squash)
指定主机
10.0.0.100(rw,all_squash)
指定此网段主机可访问
10.0.0.0/24(rw,all_squash)
选项:
默认选项:(ro,sync,root_squash,no_all_squash)
ro,rw 只读和读写
async 异步,数据变化后不立即写磁盘,先写入到缓冲区中,过一段时间再写入磁盘,性能高,安全性低
sync(1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘,性能低,安全性高
root_squash (默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,CentOS7以前的版本为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使用