Да, черт возьми. При выполнении ln -s
вы создаете символическую ссылку, которая является индексом, указывающим на определенный объект файловой системы, поэтому символические ссылки могут проходить через файловые системы, а жесткие ссылки не могут: жесткие ссылки не имеют своего собственного индекса.
Если вы монтируете файловую систему с помощью --bind
, вы создаете вторую точку монтирования для устройства или файловой системы.
Если вы представляете символическую ссылку как перенаправление, то представляете --bind
смонтированную файловую систему как создание другого шлюза к данным.
Симлинки и привязные монтировки - это совершенно другая игра в мяч.
--bind
Крепление кажется немного более надежным для меня , и это , вероятно, немного быстрее , чем работы с линком. С другой стороны, нет никаких серьезных недостатков в использовании символической ссылки, так как снижение производительности будет небольшим (если оно вообще существует).
Изменить : я думал об этом, и хит производительности может быть немного больше, чем я первоначально думал. Если у вас есть приложение, которое читает много разных файлов, то каждый открытый файл требует дополнительного чтения. Некоторые исследования здесь говорят о том , что мое предположение верно, поэтому если у вас есть приложение тяжелых IO работает там, рассмотреть --bind
возможность монтировать над раствором SYMLINK.
Причина, по которой это не часто встречается, - это, вероятно, тот факт, что символическая ссылка видима в ls
, тогда как монтирование связывания видно только при просмотре / proc / mounts или / etc / mtab (что и делает команда mount, если она выполняется без параметров). Кроме этого, я не думаю, что есть какие-либо проблемы. Мне было бы интересно, если таковые имеются.
Дополнение : другая проблема ln -s
заключается в том, что для некоторых приложений, когда путь разыменовывается, это может привести к блокировке приложения, если оно «ожидает», что определенные элементы находятся в определенных местах.
mount
, когда вызывается без каких-либо аргументов, печатает содержимое/etc/mtab
, которое имеет информацию немного отличную от/proc/mounts
. (В частности,/proc/mounts
(символическая ссылка на/proc/self/mounts
) всегда показывает точки монтирования, видимые для процесса, который его читает.)Одно из больших различий между
ln -s
монтированием и связыванием заключается в том, что вы можете использовать монтирование связывания, чтобы «модифицировать» файловую систему только для чтения. Например, если на нем был смонтирован компакт-диск/mnt/application
и вы хотите заменить его/mnt/application/badconfigfile.conf
на правильную версию, вы можете сделать это:Было бы невозможно повлиять на то же изменение, используя символическую ссылку, потому что вы не можете изменить целевую файловую систему.
Это также может быть полезно, если вы распространяли общий набор программного обеспечения через NFS (или какую-то кластерную файловую систему), и вы хотите внести изменения, специфичные для хоста, в одной системе. Вы можете просто использовать bind mount в целевой системе, чтобы при необходимости переопределить файлы или каталоги.
источник
Практическая разница # 1 для меня между ln -s и mount --bind:
vsftpd не позволяет просматривать каталог по символической ссылке, но разрешает при монтировании.
Я не знаю, каким демоном вы пользуетесь, но он может вести себя аналогично.
источник
Можно заметить, что в результате привязки к монтированию, которое само по себе является связыванием, которое впоследствии восстанавливается, исходное связывание остается неповрежденным, предполагая, что все физически остается подключенным.
То есть, если связать A с B и B с C, а затем связать D с B, C все равно будет связан с A. Это может быть тем, что вы хотите, или нет. Если кто-то желает, чтобы C следовал за B, перемонтируйте, используя те же цели, то есть
mount -o remount B C
, или используйте--rbind
вместо этого. Там нет--rebind
варианта.источник