Какая разница между:
ln -s /mnt/extra/home /
а также
mkdir /home
mount --rbind /mnt/extra/home /home
mount --rbind /mnt/extra/home
это уже смонтированный каталог
Какая разница между:
ln -s /mnt/extra/home /
а также
mkdir /home
mount --rbind /mnt/extra/home /home
mount --rbind /mnt/extra/home
это уже смонтированный каталог
Ответы:
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
нужна записываемая файловая система для создания символической ссылки.
ln -s
изменяет файловую систему, а mount --rbind
не изменяет . Это означает, что вы можете смонтировать домашний каталог в корневой каталог, доступный только для чтения (например, загрузочный компакт-диск), но вы не можете сделать на него символическую ссылку.
--bind
и --rbind
не волнует, если мои целевые каталоги пусты, они просто монтируют «поверх» любых файлов, оставляя их недоступными
В этом случае и привязка, и символическая ссылка будут работать одинаково для большинства целей, но они имеют важные различия.
Символическая ссылка немного более легкая. Вы можете иметь сотни или тысячи символических ссылок, не создавая при этом проблем управления. Они находятся в файловой системе, а не требуют специальной настройки на уровне системы.
Символьные ссылки могут быть скопированы и правильно скопированы такими инструментами, как cp и rsync. То есть инструменты могут распознавать и копировать символическую ссылку, гарантируя, что при восстановлении в другом месте ссылка восстанавливается и указывает на правильный пункт назначения. По умолчанию все будет работать "правильно". Напротив, при резервном копировании или копировании связывающего монтирования монтирование будет обрабатываться прозрачно, что приведет к копированию самих файлов, что может привести к дублированию, если вы также получите те же файлы в другом месте, и потребует дополнительной работы, если вы хотите повторить привязку в пункте назначения.
Символические ссылки могут быть изменены или удалены любым пользователем, у которого есть доступ к ссылке, поэтому легко сделать ее доступной только для суперпользователя или открыть ее для конкретного пользователя. Связывание монтирует только суперпользователь.
Если это звучит как одобрение символических ссылок, это так. Это более простой способ связи между файлами и каталогами. Вы будете использовать связывание монтирования только в ситуациях, когда символическая ссылка не будет работать, что может быть меньше ситуаций, чем вы думаете. Большинство инструментов, включая инструменты резервного копирования и синхронизации, имеют разумное поведение по умолчанию для символических ссылок, и их обработка символических ссылок может быть настраиваемой. Связывание монтируется прозрачно для таких инструментов, поэтому вы теряете эту гибкость и можете потерять разумное поведение (например, как упоминалось выше, дублирование каталогов в ваших резервных копиях).
Еще одно отличие состоит в том, что символическая ссылка является символической , то есть она просто ссылается на путь - строку символов, и на нее ссылаются каждый раз, когда вы открываете подкаталог / файл в целевом пути. Напротив, mount --rbind
ведет себя больше как жесткая ссылка, для которой путь не переоценивается при каждом разыменовании.
Это имеет значение в некоторых сценариях, таких как chroot
. Например, vsftpd chroot
s находится в домашнем каталоге учетной записи пользователя FTP, в которую вы входите. Таким образом, если вы поместите символическую ссылку в этот каталог, vsftpd
вы не сможете разыменовать ее, и поэтому цель не будет доступна через FTP. Если вы вместо этого сделаете mount --rbind
, то vsftpd
просто получите доступ к этому поддереву, как если бы оно действительно было там, так же, как когда вы жестко связали файл там.
ln
делает ссылки; в частности,ln -s
делает символические ссылки.mount
монтирует файловую систему в каталог. У них нет ничего общего.