0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

mount--bind的简单介绍和使用方法

dyquk4xk2p3d 来源:运维研习社 2023-11-03 09:27 次阅读

转自:运维研习社

Linux运维过程中,经常会遇到某个应用的存储目录跑满,提前又没有做任何规划,目录或磁盘无法扩容,这个时候,我们常用的解决方法是做软链接,通过ln,将原先存储的目录软链接到另外大的磁盘中的目录下,以此达到目的。

软链的弊端就是,多层软链之后,会被绕晕,很容易造成误操作,今天再介绍一种方法

mount --bind

mount命令运维小伙伴应该很熟悉,不做过多介绍 先来看下man里面的介绍

4c6f3530-79d9-11ee-939d-92fbcf53809c.png

通过mount --bind可以将文件目录结构重新挂载,连接两个目录,它是将前一个目录挂载到后一个目录上,所有对后一个目录的访问其实都是对前一个目录的访问

例子

通过例子看下,分别创建两个不同的目录,并在两个不同的目录下创建不同的文件

4c892f94-79d9-11ee-939d-92fbcf53809c.png

查看文件的inode

4c9e2e6c-79d9-11ee-939d-92fbcf53809c.png

通过mount --bind将test1挂载到test2上,重新查看inode和目录下内容

4cac670c-79d9-11ee-939d-92fbcf53809c.png

可以看到,inode号和文件,都是test1的 然后对test2目录下的文件访问修改,实际上改动的就是test1目录,我们测试下,在test2目录创建文件

4cbbde8a-79d9-11ee-939d-92fbcf53809c.png

然后接触mount之后,我们再查看下两个目录下的内容

4cd5d9de-79d9-11ee-939d-92fbcf53809c.png

可以看到,test1目录保持修改后的状态,test2目录文件仍然存在,且保持原来的不变

原理

以mount --bind test1 test2为例,当mount --bind命令执行后,Linux将会把被挂载目录的目录项(也就是该目录文件的block,记录了下级目录的信息)屏蔽,即test2的下级路径被隐藏起来了(注意,只是隐藏不是删除,数据都没有改变,只是访问不到了)。同时,内核将挂载目录(test1)的目录项记录在内存里的一个s_root对象里,在mount命令执行时,VFS会创建一个vfsmount对象,这个对象里包含了整个文件系统所有的mount信息,其中也会包括本次mount中的信息,这个对象是一个HASH值对应表(HASH值通过对路径字符串的计算得来),表里就有 /test1 到 /test2 两个目录的HASH值对应关系 命令执行完后,当访问 /test2下的文件时,系统会告知 /test2 的目录项被屏蔽掉了,自动转到内存里找VFS,通过vfsmount了解到 /test2 和 /test1 的对应关系,从而读取到 /test1 的inode,这样在 /test2 下读到的全是 /test1 目录下的文件

注意

两个目录的对应关系是存在于内存中的,一旦重启,挂载关系就没有了,所以需要将挂载关系,写入/etc/fstab中

高级用法

临时配置文件读取测试 有些应用场景下,需要修改配置文件进行测试,但是又不能影响正在运行中的业务,在没有把握的情况下,不愿意直接修改原有配置文件的话,我们可以通过在/tmp等目录,写一个测试的配置文件,通过mount --bind的方式挂载到配置文件读取目录,运行程序读取该临时配置文件,测试完成后,只需要umount,不影响原来的配置

只读挂载 在一些场景下,比如需要给开发人员查看一些配置的权限,但是又不允许它们修改配置的情况下,可以通过mount --bind,ro 挂载一个只读目录,原目录可写,挂载出来的目录只读,只需要将只读目录权限给开发人员即可

以上就是mount --bind的简单介绍,更多使用方法,各位小伙伴可以自行尝试。

审核编辑:汤梓红


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    87

    文章

    10994

    浏览量

    206782
  • 磁盘
    +关注

    关注

    1

    文章

    339

    浏览量

    24891
  • 文件
    +关注

    关注

    1

    文章

    540

    浏览量

    24402
  • 命令
    +关注

    关注

    5

    文章

    638

    浏览量

    21852

原文标题:教你在 Linux 下做到一个文件即可读写,又只读~

文章出处:【微信号:良许Linux,微信公众号:良许Linux】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    英飞凌MEMTOOL软件介绍使用方法

    ,附件中详细介绍了这款软件支持的操作系统平台、支持烧录的英飞凌MCU系列和具体型号,并详细介绍了软件的使用方法。MEMTOOL软件介绍使用方法
    发表于 12-14 09:39

    全面介绍docker的使用方法

    docker使用方法
    发表于 07-25 14:22

    介绍示波器的特殊使用方法

    本文介绍了示波器的特殊使用方法
    发表于 05-06 10:36

    介绍独立按键基本的使用方法

    独立按键基本的使用方法——状态机(有人也喜欢用三行代码的方法。当然这都无所谓,萝卜白菜各有所爱,只要别用主时序给按键消抖就行!)1、要使用独立按键,那么开发板上的J5跳帽必须接到BTN(独立按键)。...
    发表于 01-06 06:30

    介绍SPI的使用方法

    写在最前使用RT-Thread Studio开发环境开发STM32单片机程序,与MDK使用env有一定的差别,对于刚开始使用的程序员来说,主要是找不到配置选项在哪里,上一篇介绍了TIM设备的使用方法
    发表于 02-17 06:32

    示波器的使用方法

    示波器的使用方法 1 示波器使用        本节介绍示波器的使用方法。示波器种类、型号很多,功能也不同。
    发表于 01-14 13:06 1.8w次阅读

    Bind源代码包安装

    先到官方下载Bind的安装包 wgetftp://ftp.isc.org/isc/bind9/9.6.0-P1/bind-9.6.0-P1.tar.gz tar xzvf
    发表于 04-04 20:30 23次下载

    Verilog HDL语言的文件调用问题:include使用方法介绍

    本文简单介绍在使用Verilog HDL语言时文件的调用问题之include使用方法介绍及举例说明,详见本文...
    发表于 01-24 14:40 6467次阅读
    Verilog HDL语言的文件调用问题:include<b class='flag-5'>使用方法</b><b class='flag-5'>介绍</b>

    钳型表如何使用_钳型表使用方法图解大全

    本文介绍了什么是钳形表以及钳形表结构及原理,其次介绍了 钳形表使用要点与钳形表的使用方法图解,最后介绍了DT266型电流钳形表使用方法
    发表于 01-19 11:39 9.9w次阅读
    钳型表如何使用_钳型表<b class='flag-5'>使用方法</b>图解大全

    面包板的结构和使用方法详细介绍

    面包板是实验室中用于搭接电路的重要工具,熟练掌握面包板的使用方法是提高实验效率,减少实验故障出现几率的重要基础之一。下面就面包板的结构和使用方法简单介绍
    发表于 10-31 08:00 0次下载
    面包板的结构和<b class='flag-5'>使用方法</b>详细<b class='flag-5'>介绍</b>

    真空包装机怎么用_使用方法介绍

    本文主要介绍了真空包装机的使用方法,另外还简单介绍了真空包装主要结构与工作原理,还介绍了真空包装机的使用维护
    发表于 05-06 17:18 3.4w次阅读

    示波器的使用方法(三):示波器的使用方法详解

    示波器的使用方法并非很难,重点在于正确使用示波器的使用方法。往期文章中,小编对模拟示波器的使用方法和数字示波器的使用方法均有所介绍。为增进大
    的头像 发表于 12-24 20:37 2487次阅读

    WinCC中定时器使用方法介绍

    WinCC中定时器使用方法介绍说明。
    发表于 04-22 14:50 8次下载

    微小电流钳的使用方法

    微小电流钳是一种用于测量微小电流的仪器,它通常由一个夹子和一个电流表组成。微小电流钳的使用方法非常简单,但需要注意一些要点,下面将详细介绍
    的头像 发表于 04-07 14:37 1223次阅读

    什么是bind?你真的熟悉bind吗?

    bind()方法创建一个新的函数,在bind()被调用时,这个新函数的this被指定 bind()的第一个参数,而其余参数将作为新函数的参数,供调用时使用。
    的头像 发表于 07-13 09:56 1888次阅读