Один метод для работы с архивными файлами должен смонтировать их и затем получить доступ к ним как нормальные каталоги. FUSE доступен для большинства нельдов и поддерживает несколько файловых систем для доступа к сжатым файлам прозрачно. Для zip-файлов возможности включают zip предохранителя (AVFS также удобен, но только для чтения).
Например, с zip предохранителя, вот то, как смонтировать архив и скопировать файлы в него.
mkdir tmp
fuse-zip /path/to/zip tmp
rsync -av --exclude='/dir1/dir3/*' dir1 tmp/
fusermount -u tmp; rmdir tmp
С mount --bind
, дерево каталогов существует в два (или больше) места в иерархии каталогов. Это может вызвать много проблем. Резервные копии и другие копии файла выберут все копии. Становится трудным указать, что Вы хотите скопировать файловую систему: Вы закончите тем, что копировали связывание - смонтированные файлы дважды. Поиски с find
, grep -r
, locate
, и т.д., пересечет все копии, и так далее.
Вы не получите “увеличенной функциональности, и совместимость” со связывают, монтируется. Они похожи на любой другой каталог, который большую часть времени не является желательным поведением. Например, Samba выставляет символьные ссылки как каталоги по умолчанию; нет, ничто для получения с использованием связывания не монтируется. С другой стороны, свяжите монтирование, может быть полезным для представления иерархий каталогов по NFS.
У Вас не будет проблем производительности с, связывают, монтируется. То, что Вы будете иметь, является головными болями администрирования. Свяжите монтируется, имеют их использование, такое как создание дерева каталогов, доступного от chroot или представления каталога, скрытого точкой монтирования (это - обычно переходное использование, в то время как структура каталогов реконструируется). Не используйте их, если у Вас нет потребности.
Только корень может управлять, связывают, монтируется. Они не могут быть перемещены обычными средствами; они блокируют свое местоположение и каталоги предка.
Вообще говоря, если Вы передаете символьную ссылку на команду, действия команды на самой ссылке, если она воздействует на файлы, и на цель ссылки, если она воздействует на содержание файла. Это идет для каталогов также. Это обычно - правильная вещь. Некоторые команды имеют опции рассматривать символьные ссылки по-другому, например ls -L
, cp -d
, rsync -l
. Независимо от того, что Вы пытаетесь сделать, намного более вероятно, что символьные ссылки являются правильным инструментом, чем связывают, монтирует быть правильным инструментом.
В дополнение к тому, что @Gilles записал ранее, стоит отметить, что некоторые утилиты могли бы полагать, что связывание - смонтированный каталог было отдельной файловой системой. Это может иметь производительность или последствия функциональности, если программа больше не может предполагать, что то же inode число относится к тому же файлу (который это не делает, если они находятся в различных файловых системах), перемещение не может быть оптимизировано как link-at-target-then-unlink-source и т.д.
df
в моей системе даже не рассматривает, связывают - смонтированные каталоги по умолчанию, но, если спросили а именно, ее рассматривают, поскольку другие монтируются той же файловой системы. (Который, если Вы спрашиваете меня, ожидаемое поведение для инструмента с целью df.)
– a CVn
03.10.2012, 12:11
Необходимо также хотеть использовать, связывают, монтируется вместо символьных ссылок, когда Вы полагаетесь на поддержку, которая не могла бы всегда существовать (например, внешний диск), и Вы хотите быть уверенными, что исходная структура каталогов существует, даже если поддержка перестала работать или удалена.
Например, если я захочу сохранить/var/tmp в SD-карте, то я буду использовать связывание, монтируются, так как некоторые программы будут ожидать, что/var/tmp будет действительным каталогом, даже если карта будет удалена.
Я попытался привязать mount для решения проблемы при установке некоторых пакетов с помощью pacman
(archlinux, подробнее об этом здесь ) в системе, где / var
( а также / home
и / usr / local
) были символическими ссылками (между файловыми системами: от SSD к SATA).
Сначала это выглядело великолепно, но, как заметил Жиль, locate
всегда давал несколько результатов для одного файла, несмотря на строку PRUNE_BIND_MOUNTS = "yes"
в /etc/updatedb.conf
.
$ locate \*/findutils-4.4.2 | xargs ls -ldiog
33816600 drwxr-xr-x 12 4096 Dec 3 00:05 /SHARED/LOCALS/Manjaro/src/findutils-4.4.2
33816600 drwxr-xr-x 12 4096 Dec 3 00:05 /usr/local/src/findutils-4.4.2
Копнув немного дальше, я обнаружил, что более сложные привязки монтирования могут быть обрезаны правильно:
$ sudo mount --bind /SHARED/LOCALS/common/ /usr/local/common
$ findmnt | fgrep -n sdb
34:├─/SHARED/LOCALS /dev/sdb5 ext4 rw,relatime,data=ordered
35:│ └─/SHARED/LOCALS/Manjaro/common /dev/sdb5[/common] ext4 rw,relatime,data=ordered
36:├─/usr/local /dev/sdb5[/Manjaro] ext4 rw,relatime,data=ordered
37:│ └─/usr/local/common /dev/sdb5[/common] ext4 rw,relatime,data=ordered
38:├─/SHARED/HOMES /dev/sdb4 ext4 rw,relatime,data=ordered
39:├─/home /dev/sdb4[/Manjaro] ext4 rw,relatime,data=ordered
40:├─/SHARED/VARS /dev/sdb3 ext4 rw,relatime,data=ordered
41:├─/var /dev/sdb3[/Manjaro] ext4 rw,relatime,data=ordered
42:└─/opt /dev/sdb5[/opt] ext4 rw,relatime,data=ordered
$ sudo updatedb --debug-pruning 2>&1 >/dev/null | grep bind
prune_bind_mounts\000
Rebuilding bind_mount_paths:
Matching bind_mount_paths:
Skipping `/SHARED/LOCALS/Manjaro/common': bind mount
Skipping `/usr/local/common': bind mount
$ locate \*/mmedia
/SHARED/LOCALS/common/mmedia
Без параметра PRUNE_BIND_MOUNT я бы получил 3 результата:
$ sudo sed -i '1 s/yes/no/' /etc/updatedb.conf
$ sudo updatedb --debug-pruning 2>&1 >/dev/null | grep bind
prune_bind_mounts\000
$ locate \*/mmedia
/SHARED/LOCALS/Manjaro/common/mmedia
/SHARED/LOCALS/common/mmedia
/usr/local/common/mmedia
$ sudo sed -i '1 s/no/yes/' /etc/updatedb.conf
Другая проблема с привязками:
. Конечно, можно вручную добавить привязку (mounpoint или target) к
PRUNEPATHS
в /etc/updatedb.conf
.
Кроме того, точка монтирования
и различные команды или функции stat
могут использоваться в инструментах для улучшения обхода файловой системы , как предлагается здесь
Я использую это так:
/mnt/sdb1/.user_cache/User1_cache /home/User1/.cache none bind 0 0
/mnt/sdb1/.user_cache/User2_cache /home/User2/.cache none bind 0 0
Я делаю это, чтобы уменьшить количество операций записи на ssd, который монтируется с помощью defaults,relatime,data=ordered,commit=600 0 1
также папки symlinked
на мой ~
, которые не являются критическими для ввода-вывода.