Узнайте, смонтирована ли какая-либо часть диска или используется?

Вопрос или проблема

Мне нужно подтвердить, что никакая часть диска не смонтирована перед перезаписью всего диска. Проблема в том, что, похоже, нужно знать имена любых файловых систем на диске, прежде чем проверять их по отдельности, и это может быть в целом сложно.

В качестве примера, система, на которой я это пишу, имеет SSD, и parted -l показывает этот диск как /dev/nvme0n1, размер 500G. /dev/block показывает:

lrwxrwxrwx  1 root root   10 Nov 18 12:37 259:0 -> ../nvme0n1
lrwxrwxrwx  1 root root   12 Nov 18 12:37 259:1 -> ../nvme0n1p1
lrwxrwxrwx  1 root root   12 Nov 18 12:37 259:2 -> ../nvme0n1p2

Номер минорного устройства 0 — это ‘весь диск’, в то время как 1 — это загрузочный раздел, а 2 — раздел подкачки. Этот SSD настроен для LVM, но устройства LVM имеют совершенно другие имена в /dev/mapper.

Слово nvme0n1 нигде не появляется, когда вы проверяете смонтированные файловые системы (mount, findmnt nvme0n1, /proc/mounts, /etc/mtab). Слово nvme0n1p1 появляется, но только потому, что это смонтированный загрузочный раздел (/boot/efi). В общем, диск, на который я смотрю, может не иметь загрузочного раздела, так что поиск nvme0n1 в качестве префикса может не быть полезным (и даже если я найду слово с правильным префиксом, могу ли я гарантировать, что оно на том же диске?)

Существует ли какой-либо универсальный способ выяснить, используется ли диск? В данном конкретном случае я могу проанализировать вывод lsblk, чтобы найти имена /dev/mapper под nvme0n1, но это не выглядит как хорошее долгосрочное решение.

(и даже если я найду слово с правильным префиксом, могу ли я гарантировать, что оно на том же диске?)

Да, префикс буквально указывает, какой это диск — nvme0n1 это NVMe устройство 0 пространство 1, и все разделы nvme0n1p## названные таким образом, потому что они находятся на этом конкретном диске.

Существует ли какой-либо универсальный способ выяснить, используется ли диск? В данном конкретном случае я могу проанализировать вывод lsblk, чтобы найти имена /dev/mapper под nvme0n1, но это не выглядит как хорошее долгосрочное решение.

Это неплохо, так как lsblk имеет код для определения как прямых смонтированных разделов, так и отношений между устройствами-обработчиками, — и даже отношений mdraid, которые являются отдельной вещью по сравнению с устройствами-обработчиками. Не думаю, что может даже существовать по-настоящему универсальное решение без обращения к таким инструментам, как lsblk, которые знают, как собирать эту информацию из нескольких разрозненных мест.

Вместо того, чтобы анализировать его обычный вывод, запустите lsblk --json и проанализируйте его, найдя свой диск и рекурсивно спускаясь в его атрибут .children, пока не найдете один с непустым .mountpoints.

Но даже lsblk не знает о многодисковых файловых системах Btrfs, например (показывая точку монтирования только под одним из устройств), и он знает еще меньше о ZFS.

Проверьте /etc/mtab, сгенерированный ядром список всего, что смонтировано. man mtab.

Прочитайте man lsof, особенно всю запись, начинающуюся с

+D D Эта опция заставляет lsof искать все открытые экземпляры каталога D и все файлы и каталоги, которые он содержит, до его
полной глубины.

и сделайте что-то вроде

sudo lsof +D <mountpoint>

для каждой смонтированной файловой системы.

Также, на всякий случай, проверьте с помощью swapon или cat /etc/swaps, еще одного сгенерированного ядром файла.

Ответ или решение

Для подтверждения того, что никакая часть диска не смонтирована перед его перезаписью, необходимо выполнить несколько шагов. В условиях, когда у вас есть SSD (например, /dev/nvme0n1), существует несколько методов для определения занятости диска. Рассмотрим эти методы детально.

1. Использование команды lsblk

Команда lsblk позволяет получить информацию о подключенных устройствах и их файловых системах. В частности, с помощью опции --json можно получить структурированную информацию, которая будет проще для анализа.

Пример команды:

lsblk --json

На основе вывода этой команды, вы можете обработать JSON, чтобы выяснить наличие любых точек монтирования. Например, вам необходимо пройтись по вложенным атрибутам .children, проверяя поле .mountpoints. Если вы найдете любое непустое значение в .mountpoints, это будет означать, что соответствующая часть диска в данный момент используется.

2. Проверка файлов /etc/mtab и /proc/mounts

Файлы /etc/mtab и /proc/mounts содержат информацию о монтированных файловых системах. Вы можете просмотреть содержимое этих файлов:

cat /etc/mtab

или

cat /proc/mounts

Проверяя наличие упоминания (например, nvme0n1 или его разделов), вы сможете установить, используется ли диск или его части.

3. Использование команды findmnt

Команда findmnt предоставляет удобный способ для поиска монтированных файловых систем. В комбинации с флагом --segments можно уточнить результаты:

findmnt --segments

Здесь вы сможете увидеть, есть ли монтированные файловые системы, связанные с вашим диском.

4. Использование lsof для поиска открытых файлов

Если вам нужно установить, используются ли какие-либо открытые файлы на диске, можно воспользоваться командой lsof. Например, чтобы проверить все файлы в определённой точке монтирования, выполните команду:

sudo lsof +D <ваша_точка_монтирования>

Эта команда покажет вам все открытые файлы в заданной директории и их подкаталогах.

5. Проверка свопа

Если диск может быть использован в качестве области подкачки, то важно также проверить его занятость с помощью команд:

swapon --show

или

cat /etc/swaps

Эти команды позволят вам увидеть, используется ли диск в качестве пространства подкачки.

Заключение

Подводя итог, перед тем как перезаписывать диск, ключевыми шагами являются:

  • Проверьте монтирование через lsblk, findmnt, и /proc/mounts.
  • Используйте lsof для выяснения открытых файлов в точках монтирования.
  • Не забудьте проверить наличие свопа.

Эти методы обеспечат вам всестороннюю проверку статуса использования диска. Следуя указанным шагам, вы можете с уверенностью подтвердить, что диск свободен от монтирования и готов к безопасной перезаписи.

Оцените материал
Добавить комментарий

Капча загружается...