目录

一、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客户端(共享权限参数)
  • 分析
  1.     允许访问的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服务器,使用客户端成功访问
  1. 第一步:预处理
服务端
[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

nfs共享文件夹下 看不到主机挂载的nfs目录 查看nfs共享目录命令_客户端

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

  • 自动挂载大文件

(没有办法添加新分区,剩余空间很大的时候可以用)用

  1. 恢复快照 

关闭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

#注意:上述最后一行,可查看到大文件已挂载

#注意:上述最后一行,可查看到大文件已挂载