Каково различие между ln-s, и смонтируйтесь - связывают?

Я пытаюсь понять различие между использованием ln -s и mount --bind. В основном сценарии я могу использовать обоих для доступа к одному каталогу от где-то в другом месте. В каких сценариях те два будут вести себя по-другому?

36
задан 24 September 2018 в 15:35

4 ответа

Они будут вести себя по-другому по крайней мере в двух случаях:

  • В chroot, если цель ссылки вне chroot, ссылка, будет мертв. Связывание монтирования все еще будет доступно.
  • Несколько программ могут различать символьные ссылки и фактические каталоги или файлы. Немногие (если таковые имеются) могут различать каталог или файл и тот, смонтированный на нем. Это также расширяется на символьные ссылки на что-то (A), которые имеют что-то еще (B) смонтированный на них. Ссылка покажет содержание цели монтирования (B) вместо оригинала (A).

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

33
ответ дан 23 November 2019 в 00:21

Кроме того, ln-s пережил бы перезагрузку; тогда как монтируются - связывают, не был бы, если Вы не редактируете/etc/fstab для создания его персистентным.

10
ответ дан 23 November 2019 в 00:21

В дополнение к другим ответам. Система не позволяет жесткую ссылку на каталог:

# 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 (только для чтения).

2
ответ дан 23 November 2019 в 00:21

Ну, 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.

16
ответ дан 23 November 2019 в 00:21

Другие вопросы по тегам:

Похожие вопросы: