NFS管理与autofs自动挂载
一、NFS工作原理
NFS:Network File System 网络文件系统,基于内核的文件系统。Sun公司开发,通过使用NFS,用户和程序可以像访问本地文件一样访问远端系统上的文件,基于RP(Remote Procedure Call Protocol远程过程调用)实现。
PC采用C/S模式,客户机请求程序调用进程发送一个有进程参数的调用信息到服务进程,然后等待应答信息。在服务器端,进程保持睡眠状态直到调用信息到达为止。当一个调用信息到达,服务器获得进程参数,计算结果,发送答复信息,然后等待下一个调用信息,最后,客户端调用进程接收答复信息,获得进程结果,然后调用执行继续进行。
NFS优势:节省本地存储空间,将常用的数据,如:/home目录,存放在NFS服务器上且可以通过网络访问,本地终端将可减少自身存储空间的使用
二、NFS配置
-
配置简单的一个共享目录
[root@localhost ~]#yum install nfs-utils [root@localhost ~]#cat /etc/exports /data/share1 *(rw) [root@localhost ~]#mkdir /data/share1 -p [root@localhost ~]#exportfs -r [root@localhost ~]#exportfs -v /data/share1 <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,root_squash,no_all_squash) [root@localhost ~]#
-
nfs配置文件目录
/etc/exports /etc/exports.d/*.exports
-
nfs共享目录的文件格式
/dir 主机1(opt1,opt2) 主机2(opt1,opt2)...
主机格式:
单个主机:ipv4,ipv6,FQDN
IP networks:两种掩码格式均支持
172.18.0.0/255.255.0.0
172.18.0.0/16
wildcards:主机名通配,例如*.xiapi.com,IP不可以
netgroups:NIS域的主机组,@group_name
anonymous:表示使用*通配所有客户端每个条目指定目录导出到的哪些主机,及相关的权限和选项:
默认选项:(ro,sync,root_squash,no_all_squash)
ro,rw 只读和读写
async 异步,数据变化后不立即写磁盘,性能高
sync(1.0.0后为默认)同步,数据在请求时立即写入共享存储磁盘
root_squash (默认)远程root映射为nfsnobody,UID为65534,CentOS8 为nobody,早期版本
是4294967294 (nfsnobody)
no_root_squash 远程root映射成root用户
all_squash 所有远程用户(包括root)都变成nfsnobody,CentOS8 为nobody
no_all_squash (默认)保留共享文件的UID和GID
anonuid和anongid 指明匿名用户映射为特定用户UID和组GID,而非nfsnobody,可配合all_squash使用
三、服务端工具
- exportfs
可用于管理NFS导出的文件系统
–v 查看本机所有NFS共享
–r 重读配置文件,并共享目录
–a 输出本机所有共享
–au 停止本机所有共享[root@localhost ~]#exportfs -v # 查看当前共享 /data/share1 <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,root_squash,no_all_squash) /data/share2 <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,root_squash,no_all_squash) [root@localhost ~]#exportfs -au # 停止所有共享 [root@localhost ~]#exportfs -v # 然后查看共享 ,发现已经没有共享的目录了 [root@localhost ~]#exportfs -r # 重读配置文件 [root@localhost ~]#exportfs -v # 共享目录便回来了 /data/share1 <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,root_squash,no_all_squash) /data/share2 <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,root_squash,no_all_squash) [root@localhost ~]#
- showmount 查看目标主机的共享目录
[root@localhost ~]#showmount -e 192.168.19.10 clnt_create: RPC: Program not registered [root@localhost ~]#systemctl restart nfs [root@localhost ~]# [root@localhost ~]#showmount -e 192.168.19.10 Export list for 192.168.19.10: /data/share2 * /data/share1 * [root@localhost ~]#
四、客户端工具
- mount.nfs
虽然共享目录允许了写,但是文件系统不允许,默认root是被压缩权限,变成了id为65534的用户,压缩权限是默认的选项,可以使用exportfs -v,查看有一个root_squash选项
服务端给予文件系统权限[root@localhost ~]#yum install nfs-utils [root@localhost ~]#rpm -qf `which mount.nfs` nfs-utils-1.3.0-0.65.el7.x86_64 [root@localhost ~]# mount 192.168.19.10:/data/share1 /mnt [root@localhost ~]#df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 736M 0 736M 0% /dev tmpfs 748M 0 748M 0% /dev/shm tmpfs 748M 9.6M 738M 2% /run tmpfs 748M 0 748M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 1.6G 16G 10% / /dev/sda1 1014M 136M 879M 14% /boot tmpfs 150M 0 150M 0% /run/user/0 192.168.19.10:/data/share1 17G 1.4G 16G 9% /mnt [root@localhost ~]#cd /mnt [root@localhost mnt]#touch 1.txt touch: cannot touch ‘1.txt’: Permission denied [root@localhost mnt]#touch 1.txt [root@localhost mnt]#
[root@localhost ~]#id nfsnobody uid=65534(nfsnobody) gid=65534(nfsnobody) groups=65534(nfsnobody) [root@localhost ~]#setfacl -m u:nfsnobody:rwx /data/share1 [root@localhost ~]#
- 开机自动挂载
[root@localhost ~]#vi /etc/fstab 192.168.19.10:/data/share1 /mnt nfs defaults,_netdev 0 0
五、autofs自动挂载
可使用 autofs 服务按需要挂载外围设备(iso,u盘等),NFS共享等,并在空闲5分钟后后自动卸载
- 相关文件
软件包:autofs
服务文件:/usr/lib/systemd/system/autofs.service
配置文件:/etc/auto.master - 安装后,已经可以使用的功能(自动挂载光盘)
初始是没有这个挂载点的,当你访问的时候,就会自动帮你挂载上光盘
其实autofs已经做了配置,在文件里,当访问misc的cd文件夹时候,自动挂载/dev/cdrom[root@localhost ~]#yum install autofs [root@localhost cd]#systemctl restart autofs [root@localhost ~]#cd /misc/ [root@localhost misc]#ls [root@localhost misc]#cd cd [root@localhost cd]#ls CentOS_BuildTag EULA images LiveOS repodata RPM-GPG-KEY-CentOS-Testing-7 EFI GPL isolinux Packages RPM-GPG-KEY-CentOS-7 TRANS.TBL [root@localhost cd]#df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 736M 0 736M 0% /dev tmpfs 748M 0 748M 0% /dev/shm tmpfs 748M 9.6M 738M 2% /run tmpfs 748M 0 748M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 1.6G 16G 10% / /dev/sda1 1014M 136M 879M 14% /boot tmpfs 150M 0 150M 0% /run/user/0 /dev/sr0 11G 11G 0 100% /misc/cd [root@localhost cd]#
[root@localhost cd]#grep -v "^$\|^#" /etc/auto.master /misc /etc/auto.misc /net -hosts +dir:/etc/auto.master.d +auto.master [root@localhost cd]# [root@localhost cd]#grep -v "^$\|^#" /etc/auto.misc cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom [root@localhost cd]#
- 配置文件格式
/etc/auto.master 格式
挂载点的dirname 指定目录的配置文件路径
eg:
指定目录的配置文件格式[root@localhost cd]#grep -v "^$\|^#" /etc/auto.master /misc /etc/auto.misc
挂载点的basename 挂载选项 选项设备
eg:[root@localhost cd]#grep -v "^$\|^#" /etc/auto.misc cd -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom [root@localhost cd]#
- 自动挂载资源有两种格式
绝对路径法:直接匹配全部绝对路径名称,不会影响本地目录结构。
相对路径法:将mount point 路径分成 dirname 和 basename 分别配置,可能会影响现有的目录
结构。
该方法支持通配符写法(也就是进入目录,进任何目录,都会挂载,也可使用&后向引用):[root@localhost cd]#grep -v "^$\|^#" /etc/auto.misc * -fstype=iso9660,ro,nosuid,nodev :/dev/cdrom [root@localhost cd]#systemctl restart autofs [root@localhost cd]#cd [root@localhost ~]#cd /misc/lksdfj [root@localhost lksdfj]#cd [root@localhost ~]#df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 736M 0 736M 0% /dev tmpfs 748M 0 748M 0% /dev/shm tmpfs 748M 9.6M 738M 2% /run tmpfs 748M 0 748M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 1.6G 16G 10% / /dev/sda1 1014M 136M 879M 14% /boot tmpfs 150M 0 150M 0% /run/user/0 /dev/sr0 11G 11G 0 100% /misc/cd [root@localhost ~]#umount /misc/cd [root@localhost ~]#df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 736M 0 736M 0% /dev tmpfs 748M 0 748M 0% /dev/shm tmpfs 748M 9.6M 738M 2% /run tmpfs 748M 0 748M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 1.6G 16G 10% / /dev/sda1 1014M 136M 879M 14% /boot tmpfs 150M 0 150M 0% /run/user/0 /dev/sr0 11G 11G 0 100% /misc/lksdfj [root@localhost ~]#
- 使用两种格式来实现自动挂载
share1,使用相对路径来写,share2 使用绝对路径来写[root@localhost ~]#grep -v "^$\|^#" /etc/auto.master /misc /etc/auto.misc /mnt /etc/autoshare1 /- /etc/autoshare2 [root@localhost ~]#cat /etc/autoshare1 f1 -fstype=nfs 192.168.19.10:/data/share1 [root@localhost ~]#cat /etc/autoshare2 /mnt/f2 -fstype=nfs 192.168.19.10:/data/share2 [root@localhost ~]#systemctl restart autofs.service [root@localhost ~]#cd /mnt [root@localhost mnt]#ls f2 [root@localhost mnt]#cd f2 [root@localhost f2]#cd ../ [root@localhost mnt]#cd f1 [root@localhost f1]#ls 1.txt [root@localhost f1]#cd ../ [root@localhost mnt]#ls f1 f2 [root@localhost mnt]#df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 736M 0 736M 0% /dev tmpfs 748M 0 748M 0% /dev/shm tmpfs 748M 9.6M 738M 2% /run tmpfs 748M 0 748M 0% /sys/fs/cgroup /dev/mapper/centos-root 17G 1.6G 16G 10% / /dev/sda1 1014M 136M 879M 14% /boot tmpfs 150M 0 150M 0% /run/user/0 192.168.19.10:/data/share2 17G 1.4G 16G 9% /mnt/f2 192.168.19.10:/data/share1 17G 1.4G 16G 9% /mnt/f1 [root@localhost mnt]#