ТёмныйЭльфНавостриэль2010
Короче, камрады - сколько нам открытий чудных... (с)
Впервые я наткнулся на этот --bind, когда начал собирать LFS. Ну там много всякой непонятной херни было, поэтому внимания не обратил, но задумался. Дело в том, что команду mount я часто юзал во FreeBSD, читал к ней мануал, и там такой херни не было. И я думал, что уж команду mount я знаю. Так и есть. Оказывается, mount --bind - это Linux'ism. То есть, штука, характерная именно для Линукса.

В Линуксе есть команды, которых нет в других системах, это нормально. Но когда в базовых командах появляются ключи, присущие только этой системе, это несколько сбивает с панталыку. Команду ты видишь, она в других ОС есть, ну значит и ключи тоже есть - они же вкомпилены в команду. А вот и нет.

Во-первых, часть команд может быть вкомпилена в оболочку shell - быть встроенными, и эти же команды могут существовать отдельно в системе. Юзаешь, например, ls или time - используется встроенная, юзаешь /bin/ls или /usr/bin/time, используется отдельная. Вывод встроенной и отдельной команд может отличаться и тем более может отличаться набор ключей. (ибаные красноглазики, не?)

Во-вторых, можно сделать алиас, который, например, звучит, как ls --pci, а на самом деле вызывает lspci.

В-третьих, одна и та же команда в конкретной системе может иметь дополнительные ключи. Сюрприз? Нет! Это я и так знал, но одно дело знать, другое дело столкнуться и распознать, что это оно самое и есть. Причём, команда не какая-нибудь экзотика, а самая что ни на есть хорошо знакомая и часто используемая.

Ладно, хватит лирики. Дык вот, есть такая штука - оверлейные или stackable файловые системы. Они отображают уже готовое, но необычным образом. Вот есть у нас на диске каталог с кучей файлов, мы хотим, чтобы он отображался в другом месте с именами в другой кодировке, или чтобы ID владельца файла в этом новом месте был другим или только чтение, или ещё что-то странное. Для этого в Linux есть пакет FUSE - Filesystems in userspace. О как! Этих псевдоФС там целая куча.

Ладно, ближе к делу. mount --bind. Допустим, у нас есть папка foo с файлами и другими папками. Мы хотим, чтобы она отображалась прямо в корневой системе.
mkdir /foo
mount --bind /somewhere/.../foo /foo
Теперь у нас есть доступ к этой же папке из двух мест. Можно в три места смонтировать. Все изменения отображаются сразу во всех экземплярах. Добавил файл в одну - он появился во всех остальных. Используется в chroot-окружении и при сборке новых дистрибутивов, которые должны работать в полноценном окружении, но своего у них пока нет
mount --rbind = recursive-bind. То же самое, только если ниже этой папки смонтированы другие ФС, то они также отображаются в новом месте - перемонтируем не просто ветку, а ветку с побегами.

Кстати, если мы монтируем что-то в /mnt, содержимое самой /mnt на это время становится недоступным. С помощью mount --bind /mnt /new-place можно добраться и до этих файлов, т.к. --bind перемонтирует только эту папку, а не то, что смонтировано в неё.

--make-slave - если оригинальную папку отмонтируют, то и эта отвалится, но не наоборот
--make-shared - все папки отмонтируются одновременно, если одну какую-либо отмонтировать
--make-private - примонтирование/отмонтирование этой папки никак не влияет на остальные копии
--make-unbindable - эту папку нельзя привязывать в другое место с помощью --bind

--make-rshared --make-rslave --make-rprivate --make-runbindable - то же самое, только распространяется на все смонтированные ниже неё папки, т.е. перемонтируем не ветку, а ветку с побегами.

Сцылы на мануал и статью, где я всё это вычитал
man7.org/linux/man-pages/man8/mount.8.html
unix.stackexchange.com/questions/198590/what-is...

Во, скоко всякой херни! А что же FreeBSD? Там этого нет. Точнее, есть. Но другим образом. Для этого там используется nullfs и команда mount_nullfs

mount --loop Тут всё просто. Это используется, чтобы смонтировать в папку снимок файловой системы - какой-нибудь .iso или .img. Типа, запускается какое-то там устройство loopback и оно позволяет доступ. Хотя во FreeBSD я помню, что монтировал iso обычным mount и лазил по нему без всяких проблем. Мож я чо путаю или всё усложнилось? Хрен знает.

Поискал про это во FreeBSD - forums.freebsd.org/threads/63243/ Пляски с бубном, какой-то mdconfig, losetup, короче хуй прассыш.

Ну вот, надеюсь, вы получили толику знаний. Не знаю, правда, на хер они вам сдались... Хотя - век живи, век учись, чтоб мозги работали гагага.

@темы: Linux, FreeBSD