首页 > 系统相关 >linux学习笔记(29)linux共享目录,NFS,使用autofs实现NFS 自动挂载

linux学习笔记(29)linux共享目录,NFS,使用autofs实现NFS 自动挂载

时间:2023-05-03 18:33:22浏览次数:61  
标签:29 挂载 NFS linux nfs root junwu 客户端

 【1】 NFS简介

(1.1)什么是NFS

  •   NFS 是Network File System的缩写,即网络文件系统。英文Network File System(NFS),是基于UDP/IP协议的应用,可以通过网络,让不同的机器、不同的操作系统可以共享彼此的文件。

  •   NFS在文件传送或信息传送过程中依赖于RPC协议。RPC:远程过程调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制。

  •   NFS服务器可以看作是一个FILE SERVER。它可以让你的机器(客户端)通过网络将远端的NFS SERVER共享目录MOUNT到自己的系统中。

      在客户端看来使用NFS的远端文件就象是在使用本地文件一样,原理图如下:                

(1.2)NFS守护进程

  • nfsd:它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器;
  • mountd:它是RPC安装守护进程,主要功能是管理NFS的文件系统。当客户端登录到NFS服务器后,必须通过文件使用权限的验证。它会读取NFS的配置文件/etc/exports来对比客户端权限。
  • portmap:主要功能是进行端口映射工作。

(1.3)RPC服务

  RPC(Remote Procedure Call)即远程过程调用,记录NFS服务器使用的端口号,在NFS客户端发送请求时,将对应的端口号信息传递给客户端,确保客户端与服务端能连接上。

  注意:在启动NFS服务之前,必须先启动PRC服务,在Centos7中叫做 rpcbind 服务,否则 NFS Server 无法向RPC注册信息,另外,如果RPC服务重启,原来注册的NFS服务端的信息也就失效了,也必须重启NFS服务。

  特别要注意的是,修改NFS配置⽂件后不需要重启NFS,只需要执⾏ exportfs -rv 命令即可或是 systemctl reload nfs

原理

(1)服务端启动RPC服务,并开启111端口

(2)然后服务器端启动NFS服务,并向RPC注册端口信息

(3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口

(4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。

(5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。

【2】NFS服务 server 端部

NFS属于C/S模式,准备两台linux机器,一个server端,一个client端

2.1 安装nfs服务,需要安装如下软件包

  1. nfs-utils:NFS服务的主程序,包括了rpc.nfsd、rpc.mountd这两个守
  2. nfs守护进程:以及相关⽂档,命令(见1.2)
  3. rpcbind:是centos7/6环境下的RPC程序
复制代码
##安装软件包
[root@junwu_server ~]# yum install nfs-utils rpcbind -y
##检查安装情况
[root@junwu_server ~]# rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-49.el7.x86_64
nfs-utils-1.3.0-0.68.el7.2.x86_64
复制代码

2.2 创建用于NFS共享的文件夹,并设置好权限

[root@junwu_server ~]# mkdir /opt/nfsShare
[root@junwu_server ~]# chmod -Rf 777 /opt/nfsShare/

2.3 修改NFS服务默认配置文件

[root@junwu_server ~]# cat /etc/exports
/opt/nfsShare/ *(insecure,rw,sync,root_squash)

*表示所有网段的机器都可以进行访问

注意,修改NFS配置⽂件后不需要重启NFS,只需要执⾏ exportfs -rv 命令即可或是 systemctl reload nfs
##exports配置文件语法   NFS共享目录  NFS客户端地址(参数1、2、....) 客户端地址2(参数1、2、....) 举例:   /opt/public  10.0.0.11(rw)  10.0.0.12(rw,no_root_squash)   ##语法解释 (1)NFS共享⽬录:为NFS服务器要共享的实际⽬录,必须绝对路径 (2)NFS客户端地址,也就是NFS服务器端授权可以访问共享⽬录的客户端地址 (3)权限参数,对授权的NFS客户端访问权限设置 ##NFS客户端地址配置
客户端地址 具体地址 说明
单一客户端  10.0.0.10 用的少
整个网端 10.0.0.10/24 指定网段,常用
授权域名客户端 nfs.cnblogs.com 弃用
授权整个域名客户端 *.nfs.com 弃用

 

权限参数说明:

参数说明
ro 只读访问
rw 读写访问
sync 所有数据在请求时写入共享
async nfs在写入数据前可以响应请求
secure nfs通过1024以下的安全TCP/IP端口发送
insecure nfs通过1024以上的端口发送
wdelay 如果多个用户要写入nfs目录,则归组写入(默认)
no_wdelay 如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置
hide 在nfs共享目录中不共享其子目录
no_hide 共享nfs目录的子目录
subtree_check 如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)
no_subtree_check 不检查父目录权限
all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录
no_all_squash 保留共享文件的UID和GID(默认)
root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squash root用户具有根目录的完全管理访问权限
anonuid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的UID
anongid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的GID
  • 注1:尽量指定IP段最小化授权可以访问NFS 挂载的资源的客户端
  • 注2:经测试参数 insecure 必须要加,否则客户端挂载出错 mount.nfs: access denied by server while mounting
例子:

2.4 启动RPC和NFS服务 

[root@NFS ~]# systemctl start rpcbind # 启动rpc
[root@NFS ~]# systemctl start nfs-server #启动nfs
[root@NFS ~]# systemctl enable rpcbind  #设置开机自启
[root@NFS ~]# systemctl enable nfs-server #设置开机自启

2.4 创建文件并挂载,测试

在客户端做一个简单的测试,创建文件并进行挂载,检查是否存在

[root@junwu_server ~]# cd /opt/nfsShare/
[root@junwu_server nfsShare]# touch nfs_test.txt
复制代码
#检查服务端NFS挂载情况,查看NFS服务端默认挂载的参数

[root@junwu_server nfsShare]# showmount -e
Export list for junwu_server:
/opt/nfsShare *

[root@junwu_server nfsShare]# cat /var/lib/nfs/etab
/opt/nfsShare *(rw,sync,wdelay,hide,nocrossmnt,insecure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,no_pnfs,anonuid=65534,anongid=65534,sec=sys,rw,insecure,root_squash,no_all_squash)

##把本地机器当作客户端挂载到本地目录测试

[root@junwu_server nfsShare]# mount -t nfs 10.0.0.10:/opt/nfsShare/ /mnt/

[root@junwu_server nfsShare]# ls /mnt/
nfs_test.txt
复制代码

2.6 检查挂载情况

复制代码
[root@junwu_server nfsShare]# df -h|tail -1
10.0.0.10:/opt/nfsShare 20G 2.3G 17G 12% /mnt

[root@junwu_server nfsShare]# mount |tail -1
10.0.0.10:/opt/nfsShare on /mnt type nfs4 (rw,relatime,vers=4.1,rsize=131072,wsize=131072,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=10.0.0.10,local_lock=none,addr=10.0.0.10)

服务端配置完毕
复制代码

【3】NFS Client 端

3.1 安装软件、开启服务

安装软件包,并开启服务,nfs-server默认开启

[root@junwu_client ~]# yum install nfs-utils rpcbind -y
[root@junwu_client ~]# systemctl start rpcbind

3.2、showmount -e ip 检查远程挂载情况

(注意:需要服务端关闭防火墙,或是配置了规则)

复制代码
[root@junwu_client ~]# showmount -e 10.0.0.10
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

##server端关闭防火墙

[root@junwu_server nfsShare]# systemctl stop firewalld 

##client端再进行访问

[root@junwu_client ~]# showmount -e 10.0.0.10
Export list for 10.0.0.10:
/opt/nfsShare *
复制代码

3.3 以nfs协议挂载

[root@junwu_client ~]# mount -t nfs 10.0.0.10:/opt/nfsShare /mnt/

##进入挂载目录,查看远程NFS服务端的文件夹
[root@junwu_client ~]# ls /mnt/
nfs_test.txt

如果挂载出现错误

(1)检查服务端防火墙是否开启

3.4 配置开机自动挂载

##将挂载命令写入到

[root@junwu_client ~]# tail -2 /etc/fstab
10.0.0.10:/opt/nfsShare /mnt nfs defaults 0 0

【Autofs自动挂载服务】

Autofs 和mount的不同点在于,Autofs是⼀种守护进程。   它在后台检测⽤户是否要访问⼀个还没有挂载的⽂件系统,autofs会⾃动检查该⽂件系统是否存在,存在则⾃动挂载。   且autofs检测到已经挂载的⽂件系统有⼀段时间没⽤,则会⾃动将其卸载,省去了⼈⼒维护挂载设备的成本,以及不会造成服务器资源浪费。 autofs的缺点:   autofs特点是只有⽤户请求时才执⾏挂载,所以当⾼并发访问时,开始请求的瞬间需要执⾏挂载,性能较差,因此在⾼并发业务场景下,宁愿保持挂载也不使⽤autofs⾃动挂载。 

(1)安装autofs

##我们应该在需要挂载的机器上执行

[root@junwu_client ~]# yum install autofs -y

(2)修改autofs配置文件如下

复制代码
[root@junwu_client ~]# grep -v '^#' /etc/auto.master
/misc /etc/auto.misc
/net -hosts
+dir:/etc/auto.master.d
+auto.master
/opt/nfsShare /- /etc/auto.home  ##在/etc/auto.home 自定义挂载动作
复制代码

(3)自定义子配置文件挂载内容(将共享目录挂载到本地/mnt/nfs_autofs)

[root@junwu_client ~]# cat /etc/auto.home
/mnt/nfs_autofs rw,soft,intr 10.0.0.10:/opt/nfsShare  

(4)检查系统文件挂载情况

复制代码
[root@junwu_client ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 1.8G 16G 11% /
/dev/sda1 1014M 138M 877M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
10.0.0.10:/opt/nfsShare 20G 2.3G 17G 12% /mnt

[root@junwu_client ~]# umount /mnt/
复制代码

(5)启动autofs

[root@junwu_client ~]# systemctl restart autofs

(6)当我们进入/mnt/nfs_autofs目录后,检查有没有自动挂载

复制代码
[root@junwu_client ~]# cd /mnt/nfs_autofs/
[root@junwu_client nfs_autofs]# ls
[root@junwu_client nfs_autofs]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 475M 0 475M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 479M 2% /run
tmpfs 487M 0 487M 0% /sys/fs/cgroup
/dev/mapper/centos-root 17G 1.8G 16G 11% /
/dev/sda1 1014M 138M 877M 14% /boot
tmpfs 98M 0 98M 0% /run/user/0
复制代码

并没有,这是为什么!

终于找到原因了

在第二步的时候,修改autofs主配置文件时的要指定挂载点的父目录(或者使用固定搭配 /- )和子配置文件

/- /etc/auto.home

 【故障处理】

报错一 clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)

这个出现在客户端用 showmount -e 检查与服务端共享情况时报得错,一般原因是因为服务端nfs服务没启动或者是防火墙没关闭。  

报错二 exportfs:  192.168.3.87:/data/share: Function not implemented

这个报错一般出现在exportfs -r 设置配置文件生效时出现的,可能是因为相关nfs服务没启动或者相关服务器需要加端口号才能访问。 解决方法让如下:   1. 尝试重启nfs服务和rpc服务   2. 配置文件加上端口号如:/data/share/ 192.168.3.87/22(rw,no_root_squash,no_all_squash,sync)  

报错三  -bash: showmount: command not found

 在客户端测试时,发现无法使用showmount命令,需要执行命令yum -y install nfs-utils安装相关命令

【参考文档】

绝大部分转载自:https://www.cnblogs.com/junwured/p/16924028.html

参考:https://www.cnblogs.com/lei-z/p/16478032.html

标签:29,挂载,NFS,linux,nfs,root,junwu,客户端
From: https://www.cnblogs.com/gered/p/17369505.html

相关文章

  • Linux xargs 命令
    xargs是一个强有力的命令,是自动化必须掌握的命令xargs通awk命令一样Linuxxargs命令xargs(英文全拼:eXtendedARGuments)是给命令传递参数的一个过滤器,也是组合多个命令的一个工具。xargs可以将管道或标准输入(stdin)数据转换成命令行参数,也能够从文件的输出中读取数据。xarg......
  • Linux ip 命令
    Linuxip命令Linuxip命令与ifconfig命令类似,但比ifconfig命令更加强大,主要功能是用于显示或设置网络设备。ip命令是Linux加强版的的网络配置工具,用于代替ifconfig命令。语法ip[OPTIONS]OBJECT{COMMAND|help}OBJECT为常用对象,值可以是以下几种:OBJECT={......
  • Linux command line editor nano All In One
    LinuxcommandlineeditornanoAllInOneCtrl+X退出窗口Ctrl+G打开帮助文档LinuxexitnanoeditorAllInOnehttps://www.cnblogs.com/xgqfrms/p/16560419.htmlnanoeditor$nano-h用法:nano[选项][[+行[,列]]文件名]...如需启动时将游标置放在文件的......
  • Linux tail 命令
    这个命令非常重要,尤其对于运维人员进行日志跟踪Linuxtail命令tail命令可用于查看文件的内容,有一个常用的参数-f常用于查阅正在改变的日志文件。tail-ffilename会把filename文件里的最尾部的内容显示在屏幕上,并且不断刷新,只要filename更新就可以看到最新的文件内容......
  • Linux head 命令
    head、less、more、tail、cat、vi、vim是一类命令,作为日志追溯,配置管理常用命令Linuxhead命令head命令可用于查看文件的开头部分的内容,有一个常用的参数-n用于显示行数,默认为10,即显示10行的内容。命令格式:head[参数][文件]参数:-q隐藏文件名-v显示文件名......
  • Linux zip 命令
    linux压缩文件到windows使用,常用命令压缩:zip-q-rhtml.zip*Linuxzip命令Linuxzip命令用于压缩文件。zip是个使用广泛的压缩程序,压缩后的文件后缀名为.zip。语法zip[-AcdDfFghjJKlLmoqrSTuvVwXyz$][-b<工作目录>][-ll][-n<字尾字符串>][-t<日期时间>][-<压缩......
  • Linux poweroff 命令
    Linuxpoweroff命令poweroff命令命令用于关闭计算器并切断电源。使用权限:系统管理者。语法poweroff[-n][-w][-d][-f][-i][-h]参数说明:-n:在关机前不做将记忆体资料写回硬盘的动作-w:并不会真的关机,只是把记录写到/var/log/wtmp档案里-d:不把记录写到/v......
  • Linux bc 命令
    打开计算器相当于windows下的calcLinuxbc命令bc命令是任意精度计算器语言,通常在linux下当计算器用。它类似基本的计算器,使用这个计算器可以做基本的数学运算。常用的运算:+加法-减法*乘法/除法^指数%余数语法bc(选项)(参数)选项值-i:强制进入交互式模......
  • linux设备树-基于pinctrl的LED字符设备驱动
    在前面我们已经介绍了pinctrlsubsystem相关的基础知识,这一节我们尝试修改设备树,在pincontrollernode下添加两个子节点分别用来控制LED1~LED4的全亮/全灭。然后我们编写LED驱动程序,配置LED的两种状态:default:默认状态,LED1~LED4全亮;myled-off:LED1~LED4全灭;一、修改设备树1.1......
  • Linux tar 命令
    这个命令没什么好说的必须要熟练掌握的压缩文件:tar-czvfopenresty.tar.gzopenresty解压文件:tar-xzvfopenresty.tar.gzopenrestyLinuxtar命令Linuxtar(英文全拼:tapearchive)命令用于备份文件。tar是用来建立,还原备份文件的工具程序,它可以加入,解开备份文件内的文件......