ln -s vs mount –bind

使用ln -smount --bind有什么实际的区别?

我想将一些文件夹移动到另一个分区,而不改变它们的守护进程设置,并想知道我应该采取什么方法。

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

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

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

如果你想象一个符号链接作为redirect,那么可以设想一个--bind挂载的文件系统来创build另一个数据网关。

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

--bind安装对我来说看起来更强健一点,它可能比使用符号链接更快一点。 另一方面,使用符号链接没有严重的缺陷,因为性能命中会很小(如果它存在的话)。

编辑 :我一直在想这个,性能可能比我原先想象的要大一些。 如果您有一个读取大量不同文件的应用程序,则每个打开的新文件都需要额外读取。 这里的一些研究表明,我的假设是正确的,所以如果你有一个IO应用程序在那里运行,考虑使用--bind选项来挂载符号链接解决scheme。

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

另外ln -s另一个问题是,对于某些应用程序,当path被取消引用时,如果“期望”某些项目在特定位置,可能会导致应用程序出现问题。

ln -s和一个绑定挂载之间最大的区别之一是你可以使用绑定挂载来“修改”一个只读的文件系统。 例如,如果在/mnt/application上安装了CD,并且想用正确的版本replace/mnt/application/badconfigfile.conf ,则可以这样做:

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

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

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

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

vsftpd不允许通过符号链接浏览目录,但是允许在挂载时进行浏览。

我不知道你在使用什么守护进程,但可能会有相似的performance。

有人可能会注意到,由于绑定本身是绑定的坐标,后来又被反弹,原始绑定保持不变,假设所有物理上保持连接。

也就是说,如果将A绑定到B并将B绑定到C,然后将D绑定到B,则C仍然会绑定到A.这可能是您想要的,或者不是。 如果希望C跟随B,然后使用相同的目标mount -o remount BC ,例如mount -o remount BC ,或者使用--rbind代替。 没有--rebind选项。