mount --bind 的妙用

文章转自:http://www.cnitblog.com/gouzhuang/archive/2010/04/21/mount_bind.html

 

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

假设我们要改的文件是/etc/hosts,可按下面的步骤操作:

1. 把新的hosts文件放在/tmp下。当然也可放在硬盘或U盘上。
2. mount --bind /tmp/hosts /etc/hosts

测试完成了执行 umount /etc/hosts 断开绑定。

如果我需要在/etc下面增加一个exports文件怎么办?原来没有这个文件,不能直接bind。我们有两个方法:

方法1:绑定整个/etc目录,绑定前先复制/etc

# cp  - / etc  / tmp
# mount 
-- bind  / tmp / etc  / etc

此时的/etc目录是可写的,所做修改不会应用到原来的/etc目录,可以放心测试。

方法2:挂载ramfs到/etc,同样要先复制/etc

挂载ramfs
# mkdir 
/ tmp / etc
# mount 
- t ramfs none  / tmp / etc

复制
/ etc,这里我们不能用cp  - a,改用tar
# cd 
/ etc
# tar cf 
-  .  | (cd  / tmp / etc; tar xf  - )
# cd 
/

覆盖
/ etc
# mount 
-- move  / tmp / etc  / etc

测试完了记着 umount /etc

<think>好的,用户问到了mount -o bindmount --bind的区别,需要详细解释这两个命令的异同。首先,我得回忆一下mount命令的基本用法和相关选项。 记得mount命令用于挂载文件系统,而bind选项允许将一个目录挂载到另一个目录,实现目录树的镜像。那用户提到的两种写法,-o bind--bind,可能只是不同的选项指定方式。 查阅资料,发现mount命令的选项有两种写法:短格式和长格式。-o后面跟选项,比如-o bind,而--bind是长选项形式。这时候应该确认这两种写法是否完全等效,或者是否有细微差别。 进一步检查手册页,发现mount --bind实际上是调用了mount命令并指定了--bind选项,而mount -o bind则是通过-o(options)参数来指定bind选项。在功能上,两者应该是相同的,都是创建bind挂载。 不过,要注意不同版本的mount命令可能对选项的支持有所不同。例如,某些较旧的系统可能只支持-o bind,而不识别--bind选项。但现代Linux系统中,两者通常可以互换使用。 可能用户在使用时遇到了兼容性问题,或者看到不同文档中使用了不同的写法,所以产生疑问。需要指出这两种写法在大多数情况下是等价的,但也要注意环境差异,建议根据具体系统和版本来选择合适的写法。 另外,补充说明bind挂载的作用,比如用于在不同位置共享同一目录内容,或者结合其他选项如remount,ro来改变挂载属性,这些高级用法可能也是用户关心的点。 总结,回答应明确两者的功能相同,区别在于选项的写法,可能涉及系统兼容性,同时举例说明使用场景,帮助用户更好地理解和应用。</think>在Linux系统中,`mount -o bind` 和 `mount --bind` 的功能完全等价,它们的区别仅体现在命令行参数格式的差异: --- ### 核心区别 | 命令格式 | 本质 | 兼容性 | |-------------------|----------------------------|--------------------------| | `mount -o bind` | 通过 `-o` 参数指定选项 | 所有支持bind挂载的系统 | | `mount --bind` | 直接使用长格式选项 | 需要util-linux >=2.23的系统 | --- ### 技术细节 1. **历史渊源**: - `-o bind` 是传统写法,自Linux 2.4内核引入 - `--bind` 是util-linux工具包后来新增的长格式选项(更易读) 2. **参数位置要求**: ```bash # 必须将--bind放在源目录之前 mount --bind /source /destination # -o bind可以放在末尾 mount /source /destination -o bind ``` 3. **组合选项示例**: ```bash # 同时设置bind只读挂载 mount --bind -o ro /src /dst # 新式写法 mount -o bind,ro /src /dst # 传统写法 ``` --- ### 实际应用场景 1. **镜像目录结构**: ```bash # 将/var/www映射到/home/user/webcontent mount --bind /home/user/webcontent /var/www ``` 2. **安全隔离**: ```bash # 以只读方式挂载系统目录 mount -o bind,ro /usr /mnt/backup ``` 3. **容器技术基础**: Docker等容器运行时大量使用bind mount实现文件系统隔离。 --- ### 验证方法 ```bash # 查看挂载信息(两者显示相同) grep 'bind' /proc/mounts ``` 建议:新脚本推荐使用`--bind`提高可读性,但需注意在老旧系统(如CentOS 6)中可能不兼容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值