Вместо использования mount | grep
я хотел бы использовать mount -l -t bind
, но это не работает, и -t none
показывает все крепления.
источник
Вместо использования mount | grep
я хотел бы использовать mount -l -t bind
, но это не работает, и -t none
показывает все крепления.
Bind mounts не является типом файловой системы или параметром смонтированной файловой системы; это параметры операции монтирования . Насколько я знаю, следующие последовательности команд приводят к практически одинаковым системным состояниям в отношении ядра:
mount /dev/foo /mnt/one; mount --bind /mnt/one /mnt/two
mount /dev/foo /mnt/two; mount --bind /mnt/two /mnt/one
Таким образом, единственный способ вспомнить, какие монтирования были bind mounts - это журнал mount
оставленных команд /etc/mtab
. Операция монтирования с привязкой указывается опциейbind
монтирования (которая приводит к игнорированию типа файловой системы). Но не имеет возможности перечислять только файловые системы, смонтированные с определенным набором опций. Поэтому вам нужно сделать свою собственную фильтрацию.mount
mount | grep -E '[,(]bind[,)]'
</etc/mtab awk '$4 ~ /(^|,)bind(,|$)/'
Обратите внимание, что /etc/mtab
это полезно только в том случае, если текстовый файл поддерживается mount
. Некоторые дистрибутивы настроены вместо этого /etc/mtab
как символическая ссылка /proc/mounts
; /proc/mounts
в основном эквивалентно, /etc/mtab
но имеет несколько отличий, одно из которых не отслеживает привязки.
Одна часть информации, которая сохраняется ядром, но не отображается в этом случае /proc/mounts
, - это когда точка монтирования показывает только часть дерева каталогов в смонтированной файловой системе. На практике это в основном происходит с креплениями:
mount --bind /mnt/one/sub /mnt/partial
В /proc/mounts
и записи для /mnt/one
и /mnt/partial
имеют одинаковое устройство, тот же тип файловой системы и те же параметры. Информация, которая /mnt/partial
показывает только ту часть файловой системы, в которой /sub
находится корень, видна в информации о точке монтирования для каждого процесса в /proc/$pid/mountinfo
(столбец 4). Записи там выглядят так:
12 34 56:78 / /mnt/one rw,relatime - ext3 /dev/foo rw,errors=remount-ro,data=ordered
12 34 56:78 /sub /mnt/partial rw,relatime - ext3 /dev/foo rw,errors=remount-ro,data=ordered
findmnt | fgrep [
как описано здесь .mount --version
вы используете для записи какой-либоbind
информации/etc/mtab
? Я использую версию 2.20.1, и я посмотрел последние версии источников, и ни в одном из случаев я не вижу информацию о привязке, записанную где-либо, что позволит вам использовать grepbind
. С другой стороны, то, что я предложил в своем ответе , на самом деле включает в себя список привязок, созданных с--bind
использованиемbind
опции .</etc/mtab awk …
является POSIX-совместимым (я забываю, поддерживается ли он в Bourne). Пожалуйста, проверьте ваши факты. Я могу подтвердить, что/etc/mtab
имеетbind
опцию для файловой системы, смонтированнойmount --bind /source /target
в стабильной версии Debian (смонтировать из util-linux-ng 2.17.2).mount
и/etc/mtab
. Вы используете стабильную версию Debian, которая имеет более старую версию util-linux-ng; Я не буду с помощью тестирования Debian , который имеет более новую версию , которая больше не кажется, то же самое/etc/mtab
поведение, которое может быть , почему @rozcietrzewiacz не виделаbind
в в/etc/mtab
случае его распределения также использует более новую версию?findmnt
как ответ. Между прочим, это работает, только если целевой каталог не является другой точкой монтирования. Попробуйте напримерsudo mount --bind / foo && findmnt | grep foo
Может быть, это может сделать трюк:
Пример:
источник
/
Например, если сам подключен, то у вывода нет[...]
.Ядро не обрабатывает привязку монтирования, отличную от обычной монтировки после факта. Разница лишь в том, что происходит во время
mount
пробежек.Когда вы монтируете файловую систему (например, с помощью
mount -t ext4 /dev/sda1 /mnt
), ядро (немного упрощенное) выполняет три шага:-t
или используете,-t auto
mount
угадывает тип для вас и предоставляет ядру предполагаемый тип)nodev
например, это опция для точки монтирования, а не для файловой системы. Вы можете использовать монтирование с привязкойnodev
и без нее )Если вы выполняете привязку (например, с помощью
mount --bind /a /b
), происходит следующее:(Я пропущу
mount --move
, потому что это не имеет отношения к вопросу.)Это очень похоже на то, как файлы создаются в Linux:
Если вы сделаете жесткую ссылку, произойдет следующее:
Как видите, созданный файл и жесткая ссылка неразличимы:
Но , поскольку вы можете идентифицировать все жесткие ссылки на файл, сравнивая номера инодов, вы можете идентифицировать все монтирования в файловой системе, сравнивая основные: второстепенные номера монтирований.
Вы можете сделать это с помощью
findmnt -o TARGET,MAJ:MIN
или, посмотрев напрямую/proc/self/mountinfo
( см. Документацию ядра Linux для получения дополнительной информации ).Следующий скрипт Python перечисляет все монтируемые привязки. Предполагается, что самая старая точка монтирования с кратчайшим относительным путем к корню смонтированной файловой системы является исходной.
источник
источник
Это похоже на другой ответ findmnt, но позволяет избежать проблемы форматирования.
Чтобы показать все субмонтирования:
Чтобы показать все субмонтирования файловых систем типа ext4:
Чтобы показать все монтирования, кроме субмаунтов:
Чтобы показать все монтирования файловых систем типа ext4, кроме submounts:
«-N» удаляет заголовки, а «--list» удаляет строки формата «дерево».
Протестировано на Debian Stretch.
источник