ln -s vs mount --bind

SyR*_*ity 21 partition mount symbolic-link fstab

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

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

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

wzz*_*zrd 27

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

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

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

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

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

编辑:我一直在考虑这个问题,对性能的影响可能比我原先想象的要大一些。如果您的应用程序读取许多不同的文件,那么打开的每个新文件都需要额外读取一次。这里的一些研究表明我的假设是正确的,所以如果你有一个 IO 繁重的应用程序在那里运行,请考虑--bind安装在符号链接解决方案之上的选项。

它之所以是不常见的,可能是一个事实,即一个符号链接是在可见的ls,而绑定安装仅在的/ proc /坐骑或/ etc / mtab中观察时(这是什么mount命令可见呢,如果是不带参数执行)。除此之外,我认为没有任何问题。不过,如果有的话,我会很感兴趣。

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

  • `mount`,在不带任何参数的情况下调用时,会打印 `/etc/mtab` 的内容,该内容与 `/proc/mounts` 的信息略有不同。(特别是,`/proc/mounts`(到`/proc/self/mounts` 的符号链接)总是显示读取它的进程可见的挂载点。) (2认同)
  • @wzzrd - 不是故意踩到任何脚趾:) ..特定于应用程序的问题是我在使用的主要产品中遇到的问题 (2认同)

lar*_*sks 8

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

mount -o bind /path/to/correct/file.conf /mnt/application/badconfigfile.conf
Run Code Online (Sandbox Code Playgroud)

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

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