ln -s vs mount --bind

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

1
задан 7 December 2014 в 20:09

3 ответа

Ну, ln -s создает символическую ссылку, тогда как mount --bind создает mount.

Символьная ссылка - это особый тип файла. Если вы выполняете 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 - это один и тот же каталог.

Mounts are not файлы. Я не знаю, что произойдет, если вы попытаетесь переименовать или удалить /var/mount. Обратите внимание, что вы не можете смонтировать что-либо на /var/mount, если в каталоге /var/mount уже нет каталога.

11
ответ дан 24 May 2018 в 01:13
  • 1
    Я не использовал mount -bind, но я сомневаюсь, что он может реплицировать поведение символической ссылки, например ln -s ../../myfile .. Если вы переместите это в другой каталог, он будет указывать в другом месте, потому что это относительная ссылка. Это может быть полезно, если вам нужно создать резервную копию поддерева и все еще иметь ссылки в резервной копии. – Joe 17 December 2014 в 08:41

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

9
ответ дан 24 May 2018 в 01:13

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

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

Монтирование позволяет создавать жесткие ссылки, например, два или более имен для одного и того же дескриптора:

# 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)

Итак, mount все еще читается и писать, даже если я попросил вариант ro (только для чтения).

2
ответ дан 24 May 2018 в 01:13

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

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