В чем разница между ln -s и mount --rbind?

8

Какая разница между:

ln -s /mnt/extra/home /

а также

mkdir /home
mount --rbind /mnt/extra/home /home
NerdOfLinux
источник
1
lnделает ссылки; в частности, ln -sделает символические ссылки. mountмонтирует файловую систему в каталог. У них нет ничего общего.
AlexP
Но mount --rbind /mnt/extra/homeэто уже смонтированный каталог
NerdOfLinux
Поместите это как ответ, и я
отмечу

Ответы:

13

mount --rbindделает рекурсивную привязку; то есть иерархия файловой системы, к которой она подключена /mnt/extra/home, также будет доступна через /home.

На практике основное различие между ln -sрешением и mount --rbindрешением заключается в том, что with ln -s /home- это символическая ссылка, а вместе с mount --rbindней - каталог; это затрагивает такие инструменты , как find, df, test/ и [т.д.

Кроме того, ln -sпроизойдет сбой, если /homeсуществует, в то время как mount --rbindпроизойдет сбой, если он не существует, или это не пустой каталог.

Комментарий Марка ниже также важен: ln -sнужна записываемая файловая система для создания символической ссылки.

AlexP
источник
7
Большая разница в том, что ln -sизменяет файловую систему, а mount --rbindне изменяет . Это означает, что вы можете смонтировать домашний каталог в корневой каталог, доступный только для чтения (например, загрузочный компакт-диск), но вы не можете сделать на него символическую ссылку.
Марк
3
--bindи --rbindне волнует, если мои целевые каталоги пусты, они просто монтируют «поверх» любых файлов, оставляя их недоступными
Xen2050
7

В этом случае и привязка, и символическая ссылка будут работать одинаково для большинства целей, но они имеют важные различия.

Символическая ссылка немного более легкая. Вы можете иметь сотни или тысячи символических ссылок, не создавая при этом проблем управления. Они находятся в файловой системе, а не требуют специальной настройки на уровне системы.

Символьные ссылки могут быть скопированы и правильно скопированы такими инструментами, как cp и rsync. То есть инструменты могут распознавать и копировать символическую ссылку, гарантируя, что при восстановлении в другом месте ссылка восстанавливается и указывает на правильный пункт назначения. По умолчанию все будет работать "правильно". Напротив, при резервном копировании или копировании связывающего монтирования монтирование будет обрабатываться прозрачно, что приведет к копированию самих файлов, что может привести к дублированию, если вы также получите те же файлы в другом месте, и потребует дополнительной работы, если вы хотите повторить привязку в пункте назначения.

Символические ссылки могут быть изменены или удалены любым пользователем, у которого есть доступ к ссылке, поэтому легко сделать ее доступной только для суперпользователя или открыть ее для конкретного пользователя. Связывание монтирует только суперпользователь.

Если это звучит как одобрение символических ссылок, это так. Это более простой способ связи между файлами и каталогами. Вы будете использовать связывание монтирования только в ситуациях, когда символическая ссылка не будет работать, что может быть меньше ситуаций, чем вы думаете. Большинство инструментов, включая инструменты резервного копирования и синхронизации, имеют разумное поведение по умолчанию для символических ссылок, и их обработка символических ссылок может быть настраиваемой. Связывание монтируется прозрачно для таких инструментов, поэтому вы теряете эту гибкость и можете потерять разумное поведение (например, как упоминалось выше, дублирование каталогов в ваших резервных копиях).

thomasrutter
источник
0

Еще одно отличие состоит в том, что символическая ссылка является символической , то есть она просто ссылается на путь - строку символов, и на нее ссылаются каждый раз, когда вы открываете подкаталог / файл в целевом пути. Напротив, mount --rbindведет себя больше как жесткая ссылка, для которой путь не переоценивается при каждом разыменовании.

Это имеет значение в некоторых сценариях, таких как chroot. Например, vsftpd chroot s находится в домашнем каталоге учетной записи пользователя FTP, в которую вы входите. Таким образом, если вы поместите символическую ссылку в этот каталог, vsftpdвы не сможете разыменовать ее, и поэтому цель не будет доступна через FTP. Если вы вместо этого сделаете mount --rbind, то vsftpdпросто получите доступ к этому поддереву, как если бы оно действительно было там, так же, как когда вы жестко связали файл там.

Руслан
источник