Символьные ссылки имеют ограничения в отношении того, как функции похожи ls
, mv
и cp
могут работать с ними, потому что в отличие от команд, инициируемых оболочкой cd
, такие функции не имеют информации о том, как пользователь получил доступ к каталогу относительно логического пути (см. Связанный пост ). Кажется, что использование этой mount --bind
опции вместо этого может обойти это, предлагая расширенную функциональность и совместимость с samba и другими файловыми серверами, потому что подключенный каталог будет иметь два независимых физических пути вместо ссылки.
Я хотел бы заменить все мои символические ссылки ссылками, используя эту mount --bind
опцию, но это означало бы монтирование более 150 точек в fstab. Есть ли какие-либо проблемы с производительностью, которые могут потенциально возникнуть из-за этого или любых других недостатков, которые я должен рассмотреть?
Ответы:
При
mount --bind
этом дерево каталогов существует в двух (или более) местах в иерархии каталогов. Это может вызвать ряд проблем. Резервные копии и другие копии файлов выберут все копии. Становится трудно указать, что вы хотите скопировать файловую систему: в итоге вы скопируете файлы, смонтированные с привязкой, дважды. Поисковые запросы сfind
,grep -r
,locate
и т.д., будут проходить все копии, и так далее.Вы не получите никакой «повышенной функциональности и совместимости» с bind mounts. Они похожи на любой другой каталог, который в большинстве случаев не желаемое поведение. Например, Samba по умолчанию предоставляет символические ссылки в качестве каталогов; нет ничего, что можно было бы получить с помощью привязки. С другой стороны, bind mounts могут быть полезны для представления иерархий каталогов по NFS.
У вас не будет проблем с производительностью bind mounts. То, что вы будете иметь, это головные боли администрации. У присоединяемых монтировок есть свои применения, такие как создание дерева каталогов, доступного из chroot, или предоставление каталога, скрытого точкой монтирования (это обычно временное использование во время перестройки структуры каталогов). Не используйте их, если у вас нет необходимости.
Только root может управлять привязкой. Они не могут быть перемещены обычными средствами; они фиксируют свое местоположение и каталоги предков.
Вообще говоря, если вы передаете символическую ссылку в команду, команда действует на саму ссылку, если она работает с файлами, и на цель ссылки, если она работает с содержимым файла. Это касается и каталогов. Это обычно правильно. Некоторые команды имеют опции для лакомств символических ссылок по- разному, например
ls -L
,cp -d
,rsync -l
. Что бы вы ни пытались сделать, гораздо более вероятно, что символические ссылки являются правильным инструментом, чем bind mounts, являющимся правильным инструментом.источник
В дополнение к тому, что @Gilles писал ранее, стоит отметить, что некоторые утилиты могут рассматривать каталог, подключенный по привязке , как отдельную файловую систему. Это может иметь последствия для производительности или функциональности, если программа больше не может предполагать, что один и тот же номер инода относится к одному и тому же файлу (чего не происходит, если они находятся в разных файловых системах), перемещение нельзя оптимизировать как ссылку на target-then-unlink-source и т. д.
источник
df
в моей системе даже не рассматривает подключенные по умолчанию каталоги по умолчанию, но, если спросить конкретно, это рассматривается как другое подключение той же файловой системы. (Что, если вы спросите меня, является ожидаемым поведением для инструмента с целью df.)Вы также должны захотеть использовать bind mounts вместо символических ссылок, когда вы полагаетесь на поддержку, которая может быть не всегда на месте (например, на внешний диск), и вы хотите быть уверены, что исходная структура каталогов на месте, даже если поддержка не удается или удаляется.
Например, если я хочу сохранить / var / tmp на SD-карте, я буду использовать привязку bind, поскольку некоторые программы ожидают, что / var / tmp будет действительным каталогом, даже если карта удалена.
источник
Я попытался bind mount, чтобы обойти проблему установки некоторых пакетов с
pacman
(archlinux, подробнее об этом здесь ) в системе, где/var
(а также/home
и/usr/local
) были символические ссылки (между файловыми системами: SSD на SATA).Сначала он выглядел великолепно, но, как указал Жиль,
locate
всегда давал несколько результатов для одного файла, несмотря наPRUNE_BIND_MOUNTS = "yes"
строку в/etc/updatedb.conf
.Покопавшись немного дальше, я обнаружил, что более сложные крепления могут быть правильно обрезаны:
Без опции PRUNE_BIND_MOUNT я бы получил 3 результата:
Еще одна проблема с креплениями:
Конечно, можно вручную добавить привязки монтирования (точки монтирования или цели) в
PRUNEPATHS
in/etc/updatedb.conf
.Кроме того,
mountpoint
и различныеstat
команды или функции могут использоваться в инструментах для улучшения обхода файловой системы, как предложено здесьисточник
Когда дело доходит до файловых привязок, они ведут себя ближе к жестким ссылкам, чем к символическим ссылкам. Это может иметь несколько неуловимые последствия, например:
Пока все хорошо, но теперь посмотрим, сколько программ (редакторы, правильно написанные скрипты и т. Д.) Действительно изменяют файлы:
Если
2.txt
бы это была символическая ссылка,1.txt
то последняя команда выдала бы результат1new
, чего, вероятно, и следовало ожидать.Это может вызвать некоторые тонкие проблемы: в systemd я использовал,
BindReadOnlyPaths=
чтобы конкретный сервис использовалresolv.conf
файл, отличный от остальной системы, но это оказалось странным и странным и трудно диагностировать, потомуresolvconf
что он заменил бы исходный файл за Сервис вернулся.источник