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

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

以下两者有何区别:

ln -s /mnt/extra/home /

mkdir /home
mount --rbind /mnt/extra/home /home

答案1

mount --rbind进行递归绑定挂载;也就是说,挂载的文件系统层次结构/mnt/extra/home也将可通过 访问/home

实际上,ln -s解决方案与mount --rbind解决方案之间的主要区别在于,它是ln -s /home一个符号链接,而mount --rbind它是一个目录;这会影响诸如find、、/等工具。dftest[

此外,ln -s如果/home存在,将会失败,而mount --rbind如果不存在或者不是空目录,将会失败。

下面马克的评论也很重要:ln -s需要一个可写的文件系统来创建符号链接。

答案2

在这种情况下,绑定挂载和符号链接在大多数情况下的工作方式类似,但它们确实存在重要差异。

符号链接稍微轻量一些。您可以拥有数百或数千个符号链接,而不必担心管理问题。它们位于文件系统中,不需要特殊的系统级设置。

符号链接可以通过 cp 和 rsync 等工具正确备份和复制。也就是说,这些工具可以识别和复制符号链接,确保在其他地方恢复时,链接恢复并指向正确的目标。默认情况下,一切都将“正确”工作。相比之下,在备份或复制绑定挂载时,挂载将被透明处理,导致文件本身被复制,如果您在其他位置也获得相同的文件,这可能会导致重复,并且如果您想在目标处复制绑定挂载,则需要额外的工作。

任何有权访问该链接的用户都可以修改或删除符号链接,因此很容易将其设置为仅限超级用户使用,或向特定用户开放。绑定挂载只能由超级用户设置或修改。

如果这听起来像是对符号链接的热烈支持,那确实如此。它们是文件和目录之间链接的更直接方式。您只会在符号链接不起作用的情况下使用绑定挂载,这种情况可能比您想象的要少。大多数工具(包括备份和同步工具)对符号链接都有合理的默认行为,并且它们对符号链接的处理可能是可配置的。绑定挂载对此类工具是透明的,因此您会失去这种灵活性,并且可能会失去合理的行为(例如如上所述,备份中的目录重复)。

答案3

另一个区别是符号链接象征性的,即它只是引用小路— 一串字符,每次打开目标路径中的子目录/文件时都会取消引用。相比之下,它的mount --rbind行为更像硬链接,每次取消引用时不会重新评估路径。

在某些情况下,这会有所不同,例如chroot.例如vsftpd chroots 进入您登录的 FTP 用户帐户的主目录。因此,如果您将符号链接放入该目录,vsftpd将无法取消引用它,因此无法通过 FTP 访问目标。如果您改为这样做mount --rbind,那么vsftpd将只是访问该子树,就好像它真的在那里一样,就像您在那里硬链接文件时一样。

相关内容