开发者

linux部署NFS和autofs自动挂载实现过程

开发者 https://www.devze.com 2025-09-24 10:12 出处:网络 作者: 九制橘皮茶
目录(一)NFS1. 什么是NFS2.NFS守护进程3.RPC服务4. 原理5. 部署5.1安装NFS服务5.2配置防火墙5.3创建服务端共享目录5.4修改服务端配置文件5.5启动nfs并加入自启5.6客户端创建挂载目录并挂载5.7设置开机自动挂载5.8测
目录
  • (一)NFS
    • 1. 什么是NFS
    • 2.NFS守护进程
    • 3.RPC服务
    • 4. 原理
    • 5. 部署
      • 5.1安装NFS服务
      • 5.2配置防火墙
      • 5.3创建服务端共享目录
      • 5.4修改服务端配置文件
      • 5.5启动nfs并加入自启
      • 5.6客户端创建挂载目录并挂载
      • 5.7设置开机自动挂载
      • 5.8测试
      • 5.9补充
  • (二)Autofs
    • 1. 挂载点和配置
      • 2. 事件驱动
        • 3. 后台守护进程
          • 4. 超时机制
            • 5. 挂载方式
              • 6. 错误处理
                • 7. 配置autofs
                  • 7.1安装autofs
                  • 7.2 服务端配置
                  • 7.3 客户端配置
                  • 7.4补充
              • 总结

                (一)NFS

                1. 什么是NFS

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

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

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

                2.NFS守护进程

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

                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。

                4. 原理

                1. 服务端启动RPC服务,并开启111端口。
                2. 然后服务器端启动NFS服务,并向RPC注册端口信息。
                3. 客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口
                4. 服务端的RPC(portmap)服务反馈NFS端口信息给客户端。
                5. 客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。
                [root@node2 elysia]# rpcinfo -p 192.168.240.151
                   program vers proto   port  service
                1000004   tcp111  portmapper
                1000003   tcp111  portmapper
                1000002   tcp111  portmapper
                1000004   udp111  portmapper
                1000003   udp111  portmapper
                1000002   udp111  portmapper

                5. 部署

                操作系统版本:centos 7

                服务端:192.168.240.151/24(node1)

                客户端:192.168.240.152/24 (node2)

                5.1安装NFS服务

                从原理可以看出,服务端和客户端都是需要下载nfs-utils和rpcbind的。

                yum -y install nfs-utils rpcbind

                5.2配置防火墙

                服务端和客户端同时配置即可。

                #iptables -F #使防火墙的策略恢复到默认状态,没有任何过滤规则
                #iptables-save #输出当前的 iptables 配置和规则
                #防火墙放行nfs,mountd,rpc-bind服务
                firewall-cmd --permanent --add-service=nfs
                firewall-cmd --permanent --add-service=mountd
                firewall-cmd --permanent --add-service=rpc-bind
                #重载防火墙
                firewall-cmd --reload

                5.3创建服务端共享目录

                nfs服务端上建立用于nfs文件共享的目录,并设置足够的权限确保其他人也有写入权限,我们创建一个测试文件readme.txt。

                mkdir -p /mnt/shared
                chmod 777 /mnt/shared
                echo "hello world" > hello.txt

                5.4修改服务端配置文件

                NFS服务程序的配置文件为/etc/exports,默认情况下里面没有任何内容。我们可以按照“共享目录的路径允许访问的NFS客户端(共享权限参数)”的格式,定义要共享的目录与相应权限。

                配置 NFS(网络文件系统)服务时,主要涉及两个配置文件:/etc/exportsnfs.conf。以下是这些文件中常用的参数:

                (1)./etc/exports

                这个文件用于定义哪些目录可以被共享,以及它们的访问权限。常用参数包括:

                • 共享目录:指定要共享的目录路径。
                • 客户端:指定可以访问该目录的客户端,可以是 IP 地址、主机名或网络段,可以使用通配符来指定网络段。

                访问权限

                • rw:读写权限。
                • ro:只读权限。
                • no_root_squash:允许客户端以 root 用户访问共享。默认会将 root 权限映射为普通用户。
                • root_squash:当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户
                • all_squash:将所有客户端请求映射为匿名用户。

                异步/同步

                • async:允许 NFS 在将数据写入磁盘之前返回响应,提高性能。
                • sync:确保数据在响应前写入磁盘,增加安全性,但性能较低。

                示例

                /srv/nfs 192.168.1.0/24(rw,sync,no_root_squash)
                
                /srv/nfs/docs *.example.com(ro)

                (2).nfs.conf

                这个文件通常位于 /etc/nfs.conf,用于配置 NFS 服务的全局参数。常用的参数包括:

                [nfs]:NFS 相关设置。

                • vers:指定 NFS 版本。
                • mountd_port:指定 mountd 的端口号。
                • rpcbind_port:指定 rpcbind 的端口号。

                [rpcd]:RPC 相关设置。

                我们在/etc/exports文件中加入以下行即可,nfs.conf文件有要求自行更改。

                /mnt/shared 192.168.240.*(rw,sync,no_root_squash)
                #/mnt/shared:服务端共享的目录
                #192.168.240.*:允许访问的NFS客户端,这里是一个网段内的主机,也可以是某一个指定的主机
                #(rw,sync,no_root_squash):共享权限参数

                5.5启动nfs并加入自启

                服务端配置即可。

                systemctl start rpcbind # 启动rpc
                systemctl start nfs-server #启动nfs
                systemctl enable rpcbind  #设置开机自启
                systemctl enable nfs-server #设置开机自启

                5.6客户端创建挂载目录并挂载

                挂载之前,我们可以使用showmount查看一下NFS服务端的可共享目录:

                [root@node2 ~]# showmount -e 192.168.240.151
                Export list for 192.168.240.151:
                /mnt/shared 192.168.240.*

                http://www.devze.comNFS客户端创建一个挂载目录,使用mount命令并结合-t参数,指定要挂载的文件系统类型,并在命令后面写上服务器IP地址,服务器上的共享目录以及要挂载到客户端的目录。

                mkdir -p /mnt/nfs
                mount -t nfs 192.168.240.151:/mnt/shared /mnt/nfs
                #-t nfs:挂载的文件系统类型为nfs
                #192.168.240.151:/mnt/shared:NFS服务端IP地址以及共享目录
                #/mnt/nfs:共享目录挂载到的客户端本地目录

                使用df -h查看挂载情况:

                [root@node2 ~]# df -h | tail -n 1
                192.168.240.151:/mnt/shared   18G  5.1G   13G  29% /mnt/nfs
                

                linux部署NFS和autofs自动挂载实现过程

                5.7设置开机自动挂载

                上面我们虽然挂载好了,但是每次开机都需要重新挂载,非常麻烦,我们只需要在/etc/fstab文件中加入以下配置即可,之后每次开机系统就会帮我们自动挂载了。

                echo "192.168.240.151:/mnt/shared /mnt/nfs nfs defaults 0 0" >> /etc/fstab

                5.8测试

                客户端进入挂载目录,查看是否存在hello.txt文件

                cd /mnt/nfs
                cat hello.txt
                [root@node2 ~]# cd /mnt/nfs
                [root@node2 nfs]# ls
                hello.txt
                [root@node2 nfs]# cat hello.txt
                hello world

                出现hello.txt测试文件,配置完成。

                5.9补充

                卸载目录:

                umount 是一个用于卸载文件系统的命令。

                在 linux 和 Unix 系统中,使用 umount 可以安全地断开挂载的设备或目录。以下是 umount 的基本用法:

                基本语法:

                umount [选项] <挂载点或设备>

                示例:

                1.卸载挂载点:

                umount /mnt/mydrive

                这将卸载 /mnt/mydrive 目录下的文件系统。

                2.卸载特定设备:

                umount /dev/sdb1

                这将卸载 /dev/sdb1 设备。

                常用选项:

                • -l:懒惰卸载,立即卸载但在文件系统不再被使用时才真正完javascript成。
                • -f:强制卸载,即使设备忙也尝试卸载。
                • --timeout:超时时间。

                注意事项:

                • 在卸载之前,确保没有进程正在使用该文件系统。
                • 如果有数据未写入,则可能会导致数据丢失。

                修改超时卸载时间:

                在 NFS(网络文件系统)中,修改默认的超时卸载时间可以通过调整挂载选项来实现。NF编程客栈S 的挂载通常是在 /etc/fstab 文件中配置,也可以在命令行中使用 mount 命令进行挂载。以下是如何修改默认超时卸载时间的方法:

                (1).mount命令:

                在挂载 NFS 文件系统时,可以使用 timeoretrans 选项来控制超时行为。

                • timeo:设置 NFS 客户端的请求超时时间(以 1/10 秒为单位)。
                • retrans:设置请求失败后重试的次数。

                例如,假设你想设置超js时时间为 30 秒(即 300 个 1/10 秒),并指定重试次数为 5,可以使用如下命令:

                mount -o timeo=300,retrans=5 nfs_server:/path/to/share /mnt/mountpoint

                (2). 修改/etc/fstab

                如果希望在系统启动时自动挂载 NFS,并应用相同的超时设置,可以将挂载选项添加到 /etc/fstab 文件中。

                示例如下:

                nfs_server:/path/to/share /mnt/mountpoint nfs defaults,timeo=300,retrans=5 0 0

                注意事项

                • timeo的单位是 1/10 秒,因此在设置时需要将秒数乘以 10。
                • 调整这些参数时,请根据网络条件和应用需求进行合理配置,以避免过于频繁的重试或过长的等待时间。

                (二)Autofs

                与mount命令不同,autofs服务程序是一种Linux系统守护进程,当检测到用户试图访问一个尚未挂载的文件系统时,将自动挂载该文件系统。换句话说,将挂载信息填入/etc/fstab文件后,系统在每次开机时都自动将其挂载,而autofs服务程序则是在用户需要使用该文件系统时才去动态挂载,从而节约了网络资源和服务器的硬件资源。

                autofs的缺点:autofs特点是只有⽤户请求时才执⾏挂载,所以当⾼并发访问时,开始请求的瞬间需要执⾏挂载,性能较差,因此在⾼并发业务场景下,宁愿保持挂载也不使⽤autofs⾃动挂载。

                autofs工作原理主要基于以下几个关键概念和步骤:

                1. 挂载点和配置

                autofs 通过配置文件来定义挂载点以及每个挂载点所对应的具体文件系统。

                最常用的配置文件是 /etc/auto.master 和相应的子配置文件(如 /etc/auto.mnt)。

                在这些文件中,你可以指定需要自动挂载的目录及其挂载选项。

                2. 事件驱动

                autofs 的核心原理是事件驱动。当用户尝试访问一个未挂载的目录时,autofs 会检测到这个访问请求并触发挂载操作。

                这种机制使得只有在需要时才会挂载文件系统,从而节省了系统资源。

                3. 后台守护进程

                autofs 由一个后台守护进程运行,通常为 automountd。该守护进程负责监视挂载请求,并根据配置文件中的设定自动执行挂载和卸载操作。

                4. 超时机制

                一旦文件系统被挂载,autofs 会启动一个超时计时器。

                如果在预设的时间内没有任何对该挂载点的访问,autofs 将自动卸载该文件系统。

                这一特性可以减少不必要的资源占用,同时提高系统性能。

                5. 挂载方式

                在挂载时,autofs 会调用相应的挂载命令(如 mount),并使用配置文件中指定的选项进行挂载。例如,对于 NFS,可以指定远程服务器和共享路径。

                6. 错误处理

                当发生错误(如网络问题)导致挂载失败时,autofs 能够处理这些错误,并根据配置中的选项决定如何响应,例如是否重试或返回错误信息。

                autofs 的设计理念是将挂载操作与用户的实际需求紧密结合,通过事件驱动和超时机制实现高效的资源管理。其主要优点包括:

                • 节省资源:仅在需要时挂载文件系统。
                • 简化用户操作:用户无需手动挂载或卸载文件系统。
                • 自动管理:能够自动卸载不再使用的文件系统。

                这种机制特别适合于需要频繁访问网络文件系统(如 NFS)的环境,提高了访问效率和用户体验。

                7. 配置autofs

                autofs 是一种用于自动挂载文件系统的工具,通常用于在 Linux 系统上动态挂载 NFS 或其他类型的文件系统。

                它使用主配置文件和子配置文件来定义挂载规则和行为。

                主配置文件格式

                主配置文件通常位于 /etc/auto.master,其格式如下:

                /path/to/mountpoint /etc/auto.subfile --timeout=60

                解释:

                • /path/to/mountpoint:指定要挂载的目录(挂载点)。
                • /etc/auto.subfile:指向包含子配置的文件。
                • --timeout=60:可选参数,设置超时时间,表示在闲置 60 秒后卸载挂载点。

                子配置文件格式

                子配置文件的格式通常是在指定的文件中定义,假设为 /etc/auto.subfile,其格式如下:

                key -options nfs_server:/path/to/share

                解释:

                • key:挂载点的关键字,通常是该挂载点的名称,它将成为/path/to/mountpoint/key的实际挂载点。
                • -options:挂载选项,如rw(读写)、ro(只读)等。
                • nfs_server:/path/to/share:指定要挂载的 NFS 服务器及共享路径。

                示例

                • 主配置文件 (/etc/auto.master)
                /mnt/nfs /etc/auto.nfs --timeout=60
                • 子配置文件 (/etc/auto.nfs)
                data1 -fstype=nfs,rw nfs_server:/export/data1 data2 -fstype=nfs,ro nfs_server:/export/data2

                在这个示例中,当访问 /mnt/nfs/data1 时,autofs 会自动挂载 nfs_server:/export/data1,并且允许读写;

                访问 /mnt/nfs/data2 时,则会自动挂载 nfs_server:/export/data2,但为只读模式。

                总结:

                • 主配置文件:定义了挂载点和关联的子配置文件,以及一些全局选项。
                • 子配置文件:定义具体的挂载规则,包括挂载的关键字、选项和目标资源。

                7.1安装autofs

                客户端安装即可

                yum -y install autofs

                注意,刚才做NFS实验时,服务端和客户端都下载rpcbindnfs-utils,如果没下再次下载即可

                yum -y install nfs-utils rpcbind

                本次autofs实验是基于上面NFS的,所以我们的autofs结合NFS一同实现自动挂载,服务端基本不变,我们主要修改客户端配置。先配置服务端,这里就不多讲了,和前面类似。

                记得做好防火墙和selinux的相关配置,并且确保相关服务都开启了。

                7.2 服务端配置

                mkdir -p /usr/elysia
                chmod 777 /usr/elysia
                echo "/usr/elysia 192.168.240.*(rw,sync,no_root_squash)" >> /etc/exports
                exportfs -rv
                [root@node1 elysia]# exportfs -rv
                exporting 192.168.240.*:/mnt/shared
                exporting 192.168.240.*:/usr/elysia

                7.3 客户端配置

                (1). 使用showmount命令查看服务端的可共享目录。

                showmount -e 192.168.240.151
                [root@node2 ~]# showmount -e 192.168.240.151
                Export list for 192.168.240.151:
                /mnt/shared 192.168.240.*
                /usr编程客栈/seele  192.168.240.*
                /usr/elysia 192.168.240.* #目标目录

                包含了我们服务端创建的/usr/elysia目录。

                (2). 修改主配置文件

                vim /etc/auto.master
                加入以下行
                /data   /etc/auto.misc #/data是我们想要挂载的目录的父目录

                (3).修改子配置文件

                vim /etc/auto.misc
                加入以下行
                elysia  -rw 192.168.240.151:/usr/elysia

                注意,子配置文件的命名不一定要以".misc"为后缀。成功挂载并且cd后会自动生成/data/elysia目录

                (4).重启autofs服务

                systemctl restart autofs

                (5).测试

                客户端切换到/data目录,查看是否存在/data/elysia

                [root@node2 ~]# df -h | grep elysia
                [root@node2 ~]##不存在

                cd到/data/elysia。

                [root@node2 ~]# df -h | grep elysia
                [root@node2 ~]# cd /data/elysia
                [root@node2 elysia]# df -h | grep elysia
                192.168.240.151:/usr/elysia   18G  5.1G   13G  29% /data/elysia
                #出现挂载目录,auto配置完成

                7.4补充

                /etc/auto.master配置可选参数
                参数实现功能
                fg/bgfg表示挂载行为在前台执行,bg表示挂载行为在后台执行。前台执行,则mount会持续尝试挂载,直到成功或超时为止。后台执行,mount会在后台持续多次进行mount,不会影响到前台的程序运行。
                soft/hardhard表示当两者之间的任何一台主机脱机,则RPC会持续地呼叫,直到对方恢复连接为止。如果是soft的话,那RPC会在超时后重复呼叫,非持续呼叫
                intr当使用hard方式挂载时,若加上intr这个参数,则当RPC持续呼叫时,该次的呼叫是可以被中断的
                rsize/wsize读出(rsize)与写入(wsize)的区块大小,设置值可以影响客户端与服务器端传输数据的缓冲记忆容量

                总结

                以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程客栈(www.devze.com)。

                0

                精彩评论

                暂无评论...
                验证码 换一张
                取 消

                关注公众号