ln -s和mount --bind有什么区别?


36

我想了解使用ln -s和之间的区别mount --bind。在基本方案中,我可以使用这两种方法从其他位置访问一个目录。在什么情况下,这两种行为会有所不同?


7
我应该警惕rm -rmount --bind。使用a ln,它将删除链接,而使用a --bind,则与rm -r在目标上运行效果相同。不好,正如我在重建我的一台服务器之前不久发现的那样
Mark K Cowan 2014年

除非您创建了硬链接,否则@MarkKCowan是正确的。
JohnnyQ '16

@JohnnyQ无法硬链接目录
Mark K Cowan

Answers:


33

在至少两种情况下,它们的行为将有所不同:

  • chroot中,如果链接目标在chroot之外,则链接将失效。绑定安装仍然可以访问。
  • 几个程序可以区分符号链接和实际目录或文件。很少有人(如果有的话)可以区分目录或文件与目录或文件之间的区别。这也扩展到指向某对象(A)的符号链接,该链接上B安装了其他对象()。该链接将显示装载目标(B)的内容,而不是原始目标()的内容A

另外,您可以在现有目录或文件上绑定安装目录或文件,从而掩盖原始内容(除非将原始内容绑定安装在其他位置,否则将无法访问原始内容)。符号链接要求将原始文件移动或删除。


16

好吧,ln -s创建一个符号链接,而mount --bind创建一个坐骑。

符号链接是一种特殊类型的文件。如果这样做ln -s /var/target /var/link/var/link则将是一个包含路径“ /var/target” 的文件。符号链接和普通文件之间的唯一区别是,当程序尝试对符号链接执行操作时,该操作通常在目标而不是文件上执行。因此,如果现在这样做ls /var/link,该ls程序将尝试获取的目录列表/var/link,但实际上将获取的目录列表/var/target

但是,符号链接仍然只是文件。可以重命名和删除它们以及所有爵士乐。请注意,/var/link如果已经存在一个名为的文件,则无法创建一个称为的符号链接(或普通文件)/var/link。您需要先摆脱它。

坐骑不是文件;它不是文件。这是内核保留在内存中的记录。如果这样做mount --bind /var/target /var/mount,内核将记录事实,该事实/var/mount现在是的新名称/var/target。(我不知道详细信息;特别是,我不知道是否在的子目录中安装某些内容是否/var/target也会使其显示在其中/var/mount,或者为什么或为什么不这样做。对此答案的编辑将不胜感激。)如果这样做ls /var/mount,将会发生和您一样的事情ls /var/target,因为/var/mount/var/target是相同的目录。

挂载不是文件。我不知道如果您尝试重命名或删除该怎么办/var/mount。请注意,/var/mount 除非位于的目录,否则您无法装载任何内容/var/mount


1
我没有使用过mount --bind,但是我怀疑它是否可以复制符号链接的行为ln -s ../../myfile .。如果将其移动到另一个目录,它将指向其他位置,因为它是相对链接。如果您需要备份子树并且仍然使链接在备份中工作,这将很有用。

10

另外,ln -s可以在重新启动后幸存;而mount --bind则不会,除非您编辑/ etc / fstab使其持久化。


2

除了其他答案。系统不允许硬链接到目录:

# ln mydir mpoint
ln: `mydir': hard link not allowed for directory

通过安装,您可以制作类似硬链接的名称,即,对于一个inode可以使用两个或多个名称:

# mount -B mydir/ mpoint/
# ls -d -i *
807175  mpoint/  807175  mydir/

(可以发现它有助于使用旧版本的rsync进行快照备份。)

另外,请注意,此安装尚未完成:

# mount -B -oro mydir/ mpoint/
mount: warning: mpoint/ seems to be mounted read-write.
# mount | grep mpoint
/root/learn/mydir on /root/learn/mpoint type none (rw,bind)

因此,即使我要求使用ro选项(只读),该坐骑仍然可以读写。

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.