Как получить полный и точный список смонтированных файловых систем в Linux?

151

Я обычно использую, mountчтобы проверить, какие файловые системы смонтированы. Я также знаю , что есть какая - то связь между mountи , /etc/mtabно я не уверен , что о деталях. После прочтения, как проверить, смонтирован ли / proc /, я запутался.

У меня вопрос: как получить наиболее точный список смонтированных файловых систем? Должен ли я просто использовать mountили читать содержимое /etc/mtabили содержимое /proc/mounts? Что дало бы наиболее достоверный результат?

xanpeng
источник
3
Вам также следует прочитать принятый ответ на этот вопрос: unix.stackexchange.com/questions/12040/…
nozimica
Я не могу не ссылаться на Что такое / etc / mtab в Linux? потому что он охватывает не-Linux детали, которые не дает ни один из ответов здесь.
Вейцзюнь Чжоу

Ответы:

141

Окончательный список смонтированных файловых систем находится в /proc/mounts.

Если у вас есть какая-либо форма контейнеров в вашей системе, /proc/mountsперечисляются только те файловые системы, которые находятся в вашем текущем контейнере. Например, в Chroot , /proc/mountsперечислены только файловые системы , чья точка монтирования находится в изолированном окружении. ( Есть способы избежать chroot, ум. )

Там также есть список смонтированных файловых систем в /etc/mtab. Этот список поддерживается mountи umountкоманд. Это означает, что если вы не используете эти команды (что довольно редко), ваше действие (монтировать или размонтировать) не будет записано. На практике в основном в chroot вы найдете /etc/mtabфайлы, которые сильно отличаются от состояния системы. Кроме того, монтирование, выполненное в chroot, будет отражено в chroot, /etc/mtabно не в основном /etc/mtab. Действия, выполняемые в /etc/mtabфайловой системе, доступной только для чтения, также не записываются.

Причина, по которой вам иногда хотелось бы обратиться /etc/mtabза советом к предпочтению или в дополнение к нему, /proc/mountsзаключается в том, что, поскольку он имеет доступ к командной строке монтирования, он иногда может представлять информацию в более удобном для понимания виде; например, вы видите параметры монтирования в соответствии с запросом (тогда как в нем также /proc/mountsперечислены mountзначения по умолчанию и ядро), и bind mounts отображаются как таковые в /etc/mtab.

жилль
источник
1
Какой смысл mountподдерживать, /etc/mtabесли на него нельзя положиться? Не было бы лучше, если бы вместо этого mountпредставили информацию /proc/mounts?
Петр Доброгост
2
@PiotrDobrogost /etc/mtabможет записывать информацию, которую ядро ​​не отслеживает, например, первоначально запрошенные параметры, и привязывать монтирования, появляющиеся как таковые, вместо того, чтобы появляться как дублирующиеся записи для устройств. Тем не менее, многие дистрибутивы движутся к созданию /etc/mtabсимволической ссылки на /proc/mounts.
Жиль
3
Тем не менее, многие дистрибутивы движутся к созданию /etc/mtabсимволической ссылки на /proc/mounts. Приятно слышать - добавление этой информации для ответа сделало бы ее еще лучше. Считаете ли вы, что отслеживание запрошенных ядром опций будет целесообразным и полезным?
Петр Доброгост
2
Обратите внимание, что вам нужно отключить содержимое / proc / mounts. Как описано на странице getmntent (3), пробел (\ 040), табуляция (\ 011), символ новой строки (\ 012) и обратный слеш (\ 134) должны обрабатываться специально. Особенно, если пользовательские монтирования включены, вам нужно быть очень осторожным при работе с этими путями.
Эрик
2
Пожалуйста, смотрите также другой ответ для использования команды, findmntкоторая является предпочтительным способом с 2010 года и, вероятно, единственным безопасным способом в ближайшем будущем, когда пространства имен монтирования будут распространены.
Marki555
69

По состоянию на v. 2.18 (июль 2010 г.) util-linux имеется инструмент, который позволяет отображать список смонтированных в настоящее время файловых систем:

findmnt

Вы можете переключиться из представления дерева по умолчанию в представление списка с помощью -l, определить выходные столбцы с помощью -o(аналогично lsblk), отфильтровать результаты по типу файловой системы с помощью и -tт. Д.

findmnt -lo source, target, fstype, label, options, used -t ext4
SOURCE    TARGET      FSTYPE LABEL OPTIONS                           USED
/dev/sda1 /           ext4   ARCH  rw,noatime,discard,data=ordered  17.6G
/dev/sdb2 /media/DATA ext4   DATA  rw,noatime,discard,data=ordered    44M

Для более подробной информации прочитайте manстраницу (и findmnt --helpполучите список доступных столбцов)

don_crissti
источник
33

Возможно, потому что прошло 5 лет с тех пор, как на этот вопрос был дан ответ, все изменилось. cat /proc/mountsСоздает много информации вы не заботитесь о. Сегодня, ИМХО, я считаю, что это окончательное решение.

df -h --output=source,target

Когда вы читаете справочные страницы, вы можете делать разные варианты, но это то, что вам нужно. Например, чтобы очистить результаты еще больше, вы можете исключить типы файлов "tmpfs" с помощью этой команды:

df -hx tmpfs --output=source,target

df работает на уровне файловой системы, а не на уровне файлов.

Команды, приведенные выше, также включают в себя сетевые подключения.

Чтобы увидеть немного больше информации, используйте это:

df -hT

ПРИМЕЧАНИЕ При медленном подключении к сети это может занять несколько минут!

Если у вас нет или вам не нужны монтированные сетевые подключения (и у вас есть права доступа root), это даже лучше:

sudo lsblk -f
стог
источник
Вы не должны быть пользователем root, но некоторые поля / столбцы (например, Label) будут иметь нулевые данные, что может быть хорошо, поскольку вопросы хотят знать, какие файловые системы смонтированы.
Рик
Ubuntu. Однако я только что обнаружил «findmnt», который не использует root и в нем перечислены сетевые файловые системы. Я думал о редактировании моего ответа, чтобы включить это знание.
Рик
:-) Я устал голосовать за ваш ответ, но не могу, пока у меня не будет повторение 15+
Рик
1
Кстати, если вы пытаетесь использовать --outputчто-то вроде Ubuntu 12, которая не принимает эти параметры, посмотрите findmntответ don_crissti ниже, который делает.
Мат Шаффер
findmntПохоже, для отображения меток нужны более широкие возможности (протестировано с root; у root есть все возможности).
Ctrl-Alt-Delor
23

В большинстве случаев mountэто самый удобный метод. Чтобы получить полный и точный список смонтированных файловых систем, вы должны прочитать содержимое /proc/mounts(например, с помощью cat /proc/mounts).

Например, если монтирование /readwrite завершилось неудачно, а затем он был смонтирован только для чтения как запасной вариант /etc/mtab(из которого mountкоманда считывает информацию о том, что смонтировано, и записывает в - если она может - когда она меняет то, что смонтировано), обновление не будет. чтобы отразить, что /(что содержит /etc/mtab) в настоящее время монтируется только для чтения. В этой ситуации при запуске mountобычно сообщается (неправильно), что /был смонтирован readwrite.

При нормальных условиях (т. Е. Когда файловая система, в которой она находится, может быть записана), /etc/mtabсодержит список смонтированных в настоящее время файловых систем. Это не следует путать с /etc/fstabсписком файловых систем, которые должны автоматически монтироваться при запуске системы.

Конечно, если /procвиртуальная файловая система сама не смонтирована, вы не сможете прочитать ни один из виртуальных файлов в ней, в том числе /proc/mounts. Это очень редко бывает. В этой ситуации, mountвероятно, ваш лучший вариант для просмотра того, что установлено.

Элия ​​Каган
источник