博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
mount --bind使用方法
阅读量:6509 次
发布时间:2019-06-24

本文共 2594 字,大约阅读时间需要 8 分钟。

我们可以通过mount --bind命令来将两个目录连接起来,mount --bind命令是将前一个目录挂载到后一个目录上,所有对后一个目录的访问其实都是对前一个目录的访问,如下所示:

## test1 test2为两个不同的目录linux-UMLhEm:/home/test/linux # ls test111.test  1.testlinux-UMLhEm:/home/test/linux # ls test222.test  2.testlinux-UMLhEm:/home/test/linux # ls -lid test1drwx------ 2 root root 4096 Feb 13 09:50 test1linux-UMLhEm:/home/test/linux # ls -lid test2drwx------ 2 root root 4096 Feb 13 09:51 test2## 执行mount --bind 将test1挂载到test2上,inode号都变为test1的inodelinux-UMLhEm:/home/test/linux # mount --bind test1 test2linux-UMLhEm:/home/test/linux # ls -lid test1drwx------ 2 root root 4096 Feb 13 09:50 test1linux-UMLhEm:/home/test/linux # ls -lid test2drwx------ 2 root root 4096 Feb 13 09:50 test2linux-UMLhEm:/home/test/linux # ls test211.test  1.test## 对test2的访问或修改实际上是改动test1目录linux-UMLhEm:/home/test/linux # cd test2linux-UMLhEm:/home/test/linux/test2 # touch 3.testlinux-UMLhEm:/home/test/linux/test2 # ls11.test  1.test  3.testlinux-UMLhEm:/home/test/linux/test2 # cd ..linux-UMLhEm:/home/test/linux # ls test111.test  1.test  3.test## 解挂载后,test1目录保持修改,test2保持不变linux-UMLhEm:/home/test/linux # umount test2linux-UMLhEm:/home/test/linux # ls test111.test  1.test  3.testlinux-UMLhEm:/home/test/linux # ls test222.test  2.test## 将test2挂载到test1上linux-UMLhEm:/home/test/linux # ls -lid test2drwx------ 2 root root 4096 Feb 13 09:51 test2linux-UMLhEm:/home/test/linux # mount --bind test2 test1linux-UMLhEm:/home/test/linux # ls -lid test1drwx------ 2 root root 4096 Feb 13 09:51 test1linux-UMLhEm:/home/test/linux # ls -lid test2drwx------ 2 root root 4096 Feb 13 09:51 test2linux-UMLhEm:/home/test/linux # ls test122.test  2.test

 

 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 目录下的文件。

1.mount --bind连接的两个目录的inode号码并不一样,只是被挂载目录的block被屏蔽掉,inode被重定向到挂载目录的inode(被挂载目录的inode和block依然没变)。

2.两个目录的对应关系存在于内存里,一旦重启挂载关系就不存在了。

    在固件开发过程中常常遇到这样的情况:为测试某个新功能,必需修改某个系统文件。而这个文件在只读文件系统上(总不能为一个小小的测试就重刷固件吧),或者是虽然文件可写,但是自己对这个改动没有把握,不愿意直接修改。这时候mount --bind就是你的好帮手。 

假设我们要改的文件是/etc/hosts,可按下面的步骤操作: 
1. 把新的hosts文件放在/tmp下。当然也可放在硬盘或U盘上。 
2. mount --bind /tmp/hosts /etc/hosts       此时的/etc目录是可写的,所做修改不会应用到原来的/etc目录,可以放心测试。测试完成了执行 umount /etc/hosts 断开绑定。 

转载于:https://www.cnblogs.com/charon2/p/10355572.html

你可能感兴趣的文章
address元素
查看>>
Android View体系(六)从源码解析Activity的构成
查看>>
详解ASP.NET Core Docker部署
查看>>
fnmatch源码阅读
查看>>
U9249 【模板】BSGS
查看>>
单片机小白学步系列(九) 用万用焊板搭建实验电路
查看>>
Tomcat PK Resin
查看>>
(转)全文检索技术学习(三)——Lucene支持中文分词
查看>>
Node.js+Koa开发微信公众号个人笔记(一)准备工作
查看>>
Android 图片缓存处理
查看>>
MySQL数据库锁定机制
查看>>
elasticsearch
查看>>
阿里盒马领域驱动设计实践
查看>>
vuex 存值 及 取值 的操作
查看>>
HDU 2242 考研路茫茫——空调教室(边双连通)
查看>>
如何在C#项目中使用NHibernate
查看>>
使用vigil 监控微服务系统包含可视化界面
查看>>
安装python包到指定虚拟环境
查看>>
力扣(LeetCode)21
查看>>
网页视频流m3u8/ts视频下载
查看>>