ln -s与mount --bind


19

使用ln -s或之间有什么实际区别mount --bind

我想将某些文件夹移动到另一个分区,而不更改其守护程序设置,并且想知道我应该采用哪种方法。

我更喜欢ln -s它,因为它需要最少的设置(无需/etc/fstab修改),但是也许有一个原因为什么它不常见?

Answers:


25

当然好。如果执行,ln -s则会创建一个符号链接,该符号链接是指向某个文件系统对象的索引节点,这就是为什么符号链接可以遍历文件系统而硬链接不能遍历的原因:硬链接没有自己的索引节点。

如果使用来挂载文件系统--bind,则会为设备或文件系统创建第二个挂载点

如果您将符号链接设想为重定向,那么可以将已--bind安装的文件系统设想为创建另一个数据网关。

符号链接和绑定坐骑是完全不同的游戏。

--bind支架似乎更强健我一下,它可能是一个有点比使用符号连接工作得更快。另一方面,使用符号链接没有严重的缺点,因为对性能的影响很小(如果存在的话)。

编辑:我一直在考虑这一点,性能影响可能会比我原先想的要大一些。如果您的应用程序读取很多不同的文件,则打开的每个新文件都需要额外读取。这里的一些研究表明我的假设是正确的,因此,如果在那里运行着IO繁重的应用程序,请考虑--bind选择安装在symlink解决方案之上的选项。

之所以不常见,可能是因为符号链接在中是可见的ls,而绑定挂载仅在查看/ proc / mounts或/ etc / mtab时才可见(这是mount命令的作用,如果它是不带参数执行)。除此之外,我认为没有任何问题。不过,我想知道是否有。

另外:另一个问题ln -s是,对于某些应用程序,当路径被取消引用时,如果它“预期”某些项位于特定位置,则可能导致应用程序无法使用。


感谢您的通过解释!后续的一个小问题---rbind参数实际上是做什么的,以及如何使用它?从手册看来,该参数支持将子底座安装在已安装的树中,这是否正确?另外,仅--rbind够了,还是我需要先--bind然后--rebind?再次感谢。
SyRenity

2
mount,当不带任何参数调用时,将输出的内容/etc/mtab,其内容与稍有不同/proc/mounts。(特别是,/proc/mounts(到的符号链接/proc/self/mounts)始终显示对读取它的进程可见的安装点。)
user1686

1
@wzzrd-来自FAQ “最重要的-编辑和改进现有的问题和答案!” :) ..这绝不是您的答案-这是附加信息的小改进,如果/当它被投票时,您会得到更多代表:)
沃伦

1
@warren,没关系,我不生气:)只是您添加了一些我不知道的东西,所以感觉有点奇怪;)
wzzrd 2011年

2
@wzzrd -并不意味着在任何脚趾一步:) ..the应用程序特定的问题是我已经与主要的产品我用碰上
沃伦

6

ln -s和绑定安装之间的最大区别之一是,您可以使用绑定安装来“修改”只读文件系统。例如,如果在上安装了CD /mnt/application,而您想替换/mnt/application/badconfigfile.conf为正确的版本,则可以执行以下操作:

mount -o bind /path/to/correct/file.conf /mnt/application/badconfigfile.conf

使用符号链接将无法影响相同的更改,因为您无法修改目标文件系统。

如果您通过NFS(或某种群集文件系统)分发了一套通用软件,并且希望在一个系统上进行主机特定的更改,这也可以产生良好的效果。您可以根据需要简单地在目标系统上使用绑定安装来覆盖文件或目录。


头痛救星!(罕见的情况,但值得在那个特殊的时刻记住)
Jonathan Komar

2

我在ln -s和mount --bind之间的实际差异#1:

vsftpd不允许通过符号链接浏览目录,但在安装时允许。

我不知道您使用的是哪个守护程序,但是它的行为可能类似。


1

可能有人会注意到,由于绑定到坐骑本身的结果,坐骑本身就是一个绑定,后来又反弹了,因此假设所有实体在物理上保持连接,原始的绑定将保持不变。

也就是说,如果将A绑定到B,然后将B绑定到C,然后将D绑定到B,则C仍将绑定到A。这可能是您想要的,也可能不是。如果希望C跟随B,则使用相同的目标(即)重新安装mount -o remount B C,或--rbind改为使用。没有--rebind选择。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.