目录
一、NFS介绍
二、NFS的使用
2.1 安装
2.2 配置文件
2.3 主配置文件分析
2.4 实验一
三、NFS的映射账户
3.1原理
3.2 实验二
3.3 exportfs 命令
四、autofs自动挂载
4.1.产生原因
4.2安装
4.3 配置文件分析
4.4 实验3
4.5 实验 4
4.6 实验 5
一、NFS介绍
NFS是当前互联网系统架构中常用的数据存储服务之一,中小型网站(2000万(页面浏览量)以下)公式应用频率居高,大公司或门户除外使用NFS外,还可能会使用更为复制的分布式文件系统。
二、NFS的使用
2.1 安装
[root@server ~]# yum install nfs-utils -y
[root@server ~]# yum install rpcbind -y ---默认已安装
2.2 配置文件
- 主配置文件:/etc/exports,文件不一定存在
- /usr/sbin/exportfs : 该文件是维护NFS共享目录资源的命令文件,可以使用命令重新共享/etc/exports的目录资源、卸载共享目录
- 日志目录:/var/lib/nfs
- 权限设置文件 : /var/lib/nfs/etab
2.3 主配置文件分析
- /etc/exports 文件默认为空文件,需输入nfs共享命令
- 格式:共享目录的路径 允许访问的NFS客户端(共享权限参数)
- 分析
- 允许访问的NFS客户端:可以写完整的IP地址或IP网段,如
192.168.145.128/24
192.168.145.128/255.255.255.0
192.168.145.0/24
* : 允许所有主机都可以访问
2.权限参数:必须卸载圆括号中,且括号是紧挨着主机名的,全选的相关参数如下,多个 参数之间使用逗号隔开
权限参数 | 作用 | |
ro | 只读 | |
rw | 读写(最终还要看文件系统rwx权限) | |
root_squash | 当NFS客户端以root账户访问时,映射为NFS服务器的匿名账户 (nobody) | |
no_root_squash | 当NFS客户端以root账户访问时,映射为root账户(不推荐、不安全) | |
all_squash | 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名账户(nobody)推荐 | |
no_all_squash | 客户端普通账户访问服务器的数据时,实际信息原样显示 | |
anonuid= anongid= | 将文件的用户和工作组映射为指定UID和GID,若不指定则默认为65534(nobody) | |
sync | 同步,同时将数据写入内存写硬盘中,保证数据不会丢失,推荐 | |
async | 异步,优化将数据保存到内存,然后写入硬盘,效率高,但可能丢失 |
- 示例
1./home/public *(rw,sync) ,对所有主机共享/home/public,可读可写,同步传输
2./home/public 192.168.145.128(rw,all_sqush,sync) 对192.168.145.128主机开放共享/home/public,具有读写权限,映射为nobody账户,同步传输。
3./home/public 192.168.145.0/24(re,sync,all_aquash,anonuid=2000,anongid=2000) 对192.168.145.0网段所有主机开放共享/home/public,具有读写权限、映射为nobody账户并修改uid及gid为2000,同步传输
2.4 实验一
- 建立NFS服务器,使用客户端成功访问
- 第一步:预处理
服务端
[root@server ~]# setenforce 0
setenforce: SELinux is disabled
[root@server ~]# systemctl stop firewalld
[root@server ~]# yum install nfs-utils -y
[root@server ~]# yum install rpcbind -y
客户端
[root@node2 ~]# setenforce 0
setenforce: SELinux is disabled
[root@node2 ~]# systemctl stop firewalld
[root@server ~]# yum install nfs-utils -y
#查看服务器与客户端的IP,确保可以ping通
2.在服务器端建立共享文件目录,并设置权限
[root@server ~]# mkdir /nfsfile
[root@server ~]# chmod -Rf 777 /nfsfile
[root@server ~]# echo 'welcome to www.openlab.com' > /nfsfile/readme
3.服务器端编辑主配置文件
[root@server ~]# vim /etc/exports
/nfsfile 192.168.145.130/24(rw,sync,all_squash)
4.先启动rpc后启动nfs服务
[root@server ~]# systemctl start rpcbind
[root@server ~]# systemctl start nfs-server
[root@server ~]# systemctl enable rpcbind
[root@server ~]# systemctl enable nfs-server
注意:若启动rpcbind报错,可以先停止服务在重新启动,如下:
[root@server ~]# systemctl stop rpcbind
[root@server ~]# systemctl start rpcbind
5.客户端新建挂载目录,并使用showmount命令查询NFS服务器的远程共享信息
- showmount 格式 :showmount -参数 服务器端IP地址
参数 | 作用 |
-e | 显示NFS服务器端的共享列表 |
-a | 显示本机挂载的文件资源信息 |
-v | 显示版本号 |
[root@node2 ~]# mkdir /nfsfile #新建一个挂载目录
[root@node2 ~]# showmount -e 192.168.145.128 #查看服务器端共享信息
#挂载远程目录到本地,需要增加-t参数,并指明文件系统类型为nfs
[root@node2 ~]# mount -t nfs 192.168.145.128:/nfsfile /nfsfile
[root@node2 ~]# cd /nfsfile/ #测试访问
[root@node2 nfsfile]# ls
readme
6.客户端要先共享一直有效,必须设置开机挂载
[root@node2 ~]# vim /etc/fstab #最后一行之后添加一个新行,输入以下内容:
192.168.145.128:/nfsfile /nfsfile nfs defaults 0 0
[root@node2 ~]# mount -a #测试
[root@node2 ~]# reboot #重启
[root@node2 ~]# cd /nfsfile #测试查看
[root@node2 nfsfile]# ls
readme t1.txt
三、NFS的映射账户
3.1原理
- NFS的权限本身没有用户密码和账户验证登录过程,所以客户端登录到服务器后,会把客户端的账户身份映射到服务器端
- NFS要访问成功,不仅与服务器端配置有关,还与操作系统多份目录文件权限有关
3.2 实验二
- 例1:基于上例,将nfs目录权限进行修改,查看客户端是否访问成功
#服务端
[root@server ~]# vim /etc/exports #查看是否为rw权限
[root@server ~]# cd /nfsfile/ #进入服务端查看共享目录文件权限
[root@server nfsfile]# ll
total 4
-rw-r--r-- 1 root root 27 Jul 14 18:11 readme
-rw-r--r-- 1 nobody nobody 0 Jul 14 20:27 t1.txt
[root@server nfsfile]# chmod -Rf 444 /nfsfile #设置为只读文件权限
[root@server nfsfile]# chmod -Rf 444 /nfsfile #多执行几次,由于延迟
[root@server nfsfile]# chmod -Rf 444 /nfsfile
[root@server nfsfile]# ll -d /nfsfile/ #查看共享目录权限
dr--r--r-- 2 root root 34 Jul 14 20:27 /nfsfile/
#客户端操作
[root@node2 nfsfile]# cd ~
[root@node2 ~]# cd /nfsfile/ #说明nfs权限最终依赖于文件系统权限
-bash: cd: /nfsfile/: Permission denied
#服务器端操作
[root@server nfsfile]# cd ~
[root@server ~]# chmod -Rf 777 /nfsfile/ #服务端改回原有的权限
[root@server ~]# chmod -Rf 777 /nfsfile/ #多执行几次
[root@server ~]# chmod -Rf 777 /nfsfile
#客户端操作
[root@node2 ~]# cd /nfsfile/ #正常访问
[root@node2 nfsfile]# ls
readme t1.txt
- 例2 :客户端访问服务端,默认使用服务端的映射账户为nobody账户,uid与gid为65534,可以修改映射id值,实验如下:
#服务端操作
#查看nfs 配置文件的映射属性,修改root_squash
[root@server ~]# vim /etc/exports
/nfsfile 192.168.145.130/24(rw,sync,root_squash)
[root@server ~]# exportfs -arv #不需要卸载设备,即可配置文件生效
exporting 192.168.145.130/24:/nfsfile
#客户端操作
[root@node2 ~]# cd /nfsfile/
[root@node2 nfsfile]# touch t2.txt
[root@node2 nfsfile]# ll
total 4
-rwxrwxrwx 1 root root 27 Jul 14 18:11 readme
-rwxrwxrwx 1 nobody nobody 0 Jul 14 20:27 t1.txt
-rw-r--r-- 1 nobody nobody 0 Jul 14 21:01 t2.txt
#以root账户访问共享目录,新建的文件会被映射为nobody账户
[root@node2 ~]# cd ~
[root@node2 ~]# su xixi #切换到普通目录
[xixi@node2 root]$ cd /nfsfile
[xixi@node2 nfsfile]$ touch t3.txt
[xixi@node2 nfsfile]$ ll
total 4
-rwxrwxrwx 1 root root 27 Jul 14 18:11 readme
-rwxrwxrwx 1 nobody nobody 0 Jul 14 20:27 t1.txt
-rw-r--r-- 1 nobody nobody 0 Jul 14 21:01 t2.txt
-rw-rw-r-- 1 xixi xixi 0 Jul 14 21:03 t3.txt
#以上使用xixi账户访问共享目录,新建的文件会被映射为普通账户
[xixi@node2 nfsfile]$ su root #切换回root账户,需要重新输入root密码
Password:
[root@node2 nfsfile]# cd ~
[root@node2 ~]#
[root@server ~]# vim /etc/exports #修改如下;
/nfsfile 192.168.145.130/24(rw,sync,all_squash,anonuid=3000,anongid=3000)
[root@server ~]# exportfs -arv #不需要卸载,即可生效
exporting 192.168.145.130/24:/nfsfile
#客户端
[root@node2 ~]# cd /nfsfile
[root@node2 nfsfile]# touch t4.txt
[root@node2 nfsfile]# ll
total 4
-rwxrwxrwx 1 root root 27 Jul 14 18:11 readme
-rwxrwxrwx 1 nobody nobody 0 Jul 14 20:27 t1.txt
-rw-r--r-- 1 nobody nobody 0 Jul 14 21:01 t2.txt
-rw-rw-r-- 1 xixi xixi 0 Jul 14 21:03 t3.txt
-rw-r--r-- 1 3000 3000 0 Jul 14 21:26 t4.txt #注意映射账户uid与gid
- 注意:NFS服务端与客户端的UID和GID最好相同
3.3 exportfs 命令
- 作用:在服务端上修改了NFS配置参数,此时需要重启服务,由此时客户端已经挂载,且正在读写文件,若重启服务则会对数据产生影响,使用exportfs命令可以使得不重启服务、不卸载设备即可重新加载NFS的配置文件使用生效
- 格式:exportfs -参数
命令 | 作用 |
exportfs -a | 全部挂载 |
exportfs -r | 重新挂载 |
exportfs -u | 卸载指定目录 |
exportfs -v | 显示已经共享的内容 |
常用命令 : exportfs -arv
四、autofs自动挂载
4.1.产生原因
4.2安装
[root@server ~]# yum install autofs -y #客户端安装
4.3 配置文件分析
配置文件路径:
- 作用:处于生成环境中的Linux服务器,一般会同时管理许多设备的挂载操作。如果把这些设备挂载信息都写入到autofs服务的主配置文件中,无疑会让主配置文件臃肿不堪,不利于服务执行效率,也不利于日后修改里面的配置内容,则需要将挂载的设备独立配置形成子文件,主配置文件只存储配置挂载设置的文件名
- /etc/auto.master文件内容格式: 挂载目录 子配置文件
1.挂载目录 :不需要事先存在,因为autofs会主动建立改目录
2.子配置文件:文件名可自定义
例 :/nfs /etc/atuo.nfs
- 子配置文件由自己创建,内容格式:
1.本地挂载目录 [-挂载参数] 服务器地址 :目录
2.例:testmnt 192.168.145.128:/data
3.挂载参数 :
参数 | 功能 |
fg/bg | 当执行挂载时,该挂载行为会在前台(fg)还是后台(bg)执行,若在前台执行,则mount会持续尝试挂载,直到成功或time out 为止;若为后台执行,则mount会在后台持续多次进行mount,而不会影响到前台的程序运行。 |
soft/hard | hard表示当两者之间的任何一台主机脱机,则RPC会持续地呼叫,直到对方恢复连接为止。如果时soft的话,那RPC会在time out 后重复呼叫,而非持续呼叫 |
Intr | 当使用上面提到的hard方式挂载时,若加上Intr这个参数,则当prc持续呼叫时,该次的呼叫是可以被中断的 |
rsize/wsize | 读出(rsize)与(wsize)的区块大小。这个设置值可以影响客户端与服务器 |
4.4 实验3
- 服务端创建共享目录,客户端实现自动挂载
1.服务端与客户端都恢复快照,关闭安全软件
- 恢复快照
- 关闭selinux 和防火墙
[root@server ~]# systemctl stop firewalld
[root@server ~]# setenforce 0
2.安装软件
#服务端
[root@server ~]# yum install nfs-utils -y
[root@server ~]# yum install rpcbind -y
#客户端
[root@server ~]# yum install nfs-utils -y
[root@server ~]# yum install rpcbind -y
[root@server ~]# yum install autofs -y
3.服务端操作,编辑配置文件
[root@server ~]# vim /etc/exports
/data *(ro)
4.服务端操作,建立共享目录并设置权限
[root@server ~]# mkdir /data
[root@server ~]# chmod -Rf 777 /data
[root@server ~]# echo "this is test" > /data/file.txt
5.服务端操作,重启服务,必须先启动rpcbind
[root@server ~]# systemctl start nfs-server
[root@server ~]# systemctl start rpcbind
[root@server ~]# systemctl enable rpcbind
[root@server ~]# systemctl enable nfs-server
6.客户端操作,编辑自动挂载的主配置文件,若设计客户挂载目录为:/nfs/testmnt
[root@node1 ~]# vim /etc/auto.master
#编辑autofs的主配置文件位置,定位第七行添加新行,添加如下内容:
/nfs /etc/auto.nfs
#/nfs被挂载的父目录,不需要新建,auto.nfs 名称任意
7.客户端操作,查看共享信息,编写autofs的配置文件
[root@node1 ~]# showmount -e 192.168.145.128
Export list for 192.168.145.128:
/data *
#编辑autofs的子配置文件,需与主配置文件中声明一致
[root@node1 ~]# vim /etc/auto.nfs #输入如下内容:
testmnt 192.168.145.128:/data
8.客户端操作,启动服务,测试触发自动挂载
[root@node1 ~]# systemctl start autofs
[root@node1 ~]# df -h #查看挂载信息,确保目录没有被拦截
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 872M 0 872M 0% /dev/shm
tmpfs 349M 9.7M 340M 3% /run
/dev/mapper/rhel-root 26G 5.1G 21G 21% /
/dev/nvme0n1p1 495M 274M 222M 56% /boot
/dev/sda1 3.9G 24K 3.7G 1% /mnt
tmpfs 175M 100K 175M 1% /run/user/0
/dev/sr0 8.5G 8.5G 0 100% /run/media/root/RHEL-9-1-0-BaseOS-x86_64
[root@node1 ~]# cd /nfs #进入父目录
[root@node1 nfs]# ls #浏览后,无内容
[root@node1 nfs]# cd testmnt #进入子目录,触发自动挂载
[root@node1 testmnt]# ls
file.txt
4.5 实验 4
- 服务端自动挂载光驱
1.准备工作
- 恢复快照
- 关闭selinux和防火墙
[root@server ~]# systemctl stop firewalld
[root@server ~]# setenforce 0
[root@server ~]# yum install autofs -y
2.修改autofs主配置文件,计划光盘到 :/media/cdrom
[root@server ~]#vim /etc/auto.master
#定位第7行,添加新行,输入以下内容:
/media /etc/iso.aa
#/media 是自动挂载的文件目录
#/etc/iso.aa 自定义的子目录
3.编写autofs 子配置文件
[root@server ~]#vim /etc/iso.aa #添加以下内容:
cdrom -fstype=iso9960,20,nosuid,nodev :/dev/sr0
4.重启服务
[root@server ~]#systemctl start autofs
[root@server ~]#systemctl enable autofs
5.测试
#注意:若已挂载必须先卸载设备
[root@server ~]# cd /media
[root@server media]# cd cdrom
[root@server cdrom]# ls
4.6 实验 5
- 自动挂载大文件
(没有办法添加新分区,剩余空间很大的时候可以用)用
- 恢复快照
关闭selinux 和 防火墙
[root@server ~]# systemctl stop firewalld
[root@server ~]# setenforce 0
[root@server ~]# yum install autofs -y
2.制作一个2GB大文件 /ddfile
[root@server ~]# dd if=/dev/zero of=/ddfile count=1 bs=2G #制作大文件
[root@server ~]# mkfs.xfs -f /ddfile #格式化
3.修改auto主配置文件,计划dd/auto/ddfile
[root@server ~]# vim /etc/auto.master #第八行添加
/dd /etc/auto.nfs
4.修改子配置文件
[root@server ~]# vim /etc/auto.nfs
auto -fstype=xfs,ro,nosuid,nodev :/ddfile
5.重启服务,测试
root@server ~]# systemctl start autofs #启动服务
[root@server ~]# systemctl enable autofs #开机启动
Created symlink /etc/systemd/system/multi-user.target.wants/autofs.service → /usr/lib/systemd/system/autofs.service.
[root@server ~]# df -h #查看已挂载的文件信息
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 872M 0 872M 0% /dev/shm
tmpfs 349M 9.6M 340M 3% /run
/dev/mapper/rhel-root 26G 7.9G 18G 32% /
/dev/nvme0n1p1 495M 274M 222M 56% /boot
/dev/sda1 3.9G 24K 3.7G 1% /mnt
tmpfs 175M 92K 175M 1% /run/user/0
/dev/sr0 8.5G 8.5G 0 100% /run/media/root/RHEL-9-1-0-BaseOS-x86_64
[root@server ~]# cd /dd
[root@server dd]# ls
[root@server dd]# cd auto #进入挂载目录,触发自动挂载
[root@server auto]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 872M 0 872M 0% /dev/shm
tmpfs 349M 9.6M 340M 3% /run
/dev/mapper/rhel-root 26G 7.9G 18G 32% /
/dev/nvme0n1p1 495M 274M 222M 56% /boot
/dev/sda1 3.9G 24K 3.7G 1% /mnt
tmpfs 175M 92K 175M 1% /run/user/0
/dev/sr0 8.5G 8.5G 0 100% /run/media/root/RHEL-9-1-0-BaseOS-x86_64
/dev/loop0 2.0G 256K 2.0G 1% /dd/auto
#注意:上述最后一行,可查看到大文件已挂载
#注意:上述最后一行,可查看到大文件已挂载