Вопрос или проблема
У нас есть объемы DRBD, разделяемые между 2 серверами. Обычно на каждом объеме есть файловая система, а не стек LVM и т. д. Как на сервере с объемом DRBD в качестве основного узнать, используется он или нет? Я могу проверить, смонтирован ли он напрямую, используя, например, /proc/mounts, но также может быть, что виртуальная машина XEN использует этот объем.
Я могу выполнить drbdadm secondary
и посмотреть, возникнет ли ошибка “Устройство открыто кем-то”. Есть ли способ узнать, не делая устройство вторичным?
Дополнительный вопрос: как узнать, сколько процессов используют устройство (хорошо, их должно быть только 1, но…) и определить, что удерживает его открытым.
lsof
и fuser
— это обычно те утилиты, которые я использую.
lsof
— это утилита, которая перечисляет открытые файлы, директории, блочные файлы и т. д. в Linux. Например, я выполняю dd
на устройстве DRBD в фоновом режиме, и могу увидеть этот процесс в выводе lsof
:
# lsof /dev/drbd1000
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dd 2537055 root 1w BLK 147,1000 0xb34ed000 1877 /dev/drbd1000
fuser
отображает PID процессов, использующих указанные файлы или файловые системы. Fuser также покажет процессы ядра, например, смонтированное устройство. Например, я отформатировал и смонтировал устройство DRBD на /mnt
:
# fuser -vm /dev/drbd1000
USER PID ACCESS COMMAND
/dev/drbd1000: root kernel mount /mnt
Ответ или решение
Чтобы определить, открыт ли устройство DRBD, вы можете воспользоваться несколькими утилитами в Linux, такими как lsof
и fuser
. Вот подробное объяснение различных шагов, которые вы можете предпринять:
1. Использование lsof
Утилита lsof
позволяет вам увидеть процессы, которые используют определённые файлы или устройства. Если вы хотите проверить, открыто ли устройство DRBD, выполните следующую команду:
lsof /dev/drbdX
Замените X
на номер вашего DRBD устройства. Вывод покажет, какие процессы (если таковые имеются) работают с вашим устройством. Например:
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
dd 2537055 root 1w BLK 147,1000 0xb34ed000 1877 /dev/drbd1000
В этом выводе вы можете увидеть команду, PID и другую информацию о процессе, который использует устройство DRBD.
2. Использование fuser
Утилита fuser
показывает PIDs процессов, использующих указанные файлы или файловые системы. Эта утилита также может показать процессы, связанные с монтированными устройствами. Чтобы использовать fuser
, выполните следующую команду:
fuser -vm /dev/drbdX
Также замените X
на номер вашего DRBD устройства. Пример вывода может выглядеть так:
USER PID ACCESS COMMAND
/dev/drbd1000: root kernel mount /mnt
Это обеспечит вам информацию о том, какая команда и какой пользователь используют устройство.
3. Подсчёт открытых процессов
Если вам нужно узнать, сколько процессов открывают ваше DRBD устройство, совмещение lsof
и команд подсчета строк может помочь:
lsof /dev/drbdX | wc -l
Эта команда выведет количество процессов, которые в данный момент используют указанный DRBD диск.
4. Дополнительные проверки
Вы также можете использовать утилиты, такие как cat /proc/mounts
, чтобы проверить, смонтирован ли диск, но это не даст вам информацию о процессах, которые могли бы использовать устройство, если оно не смонтировано.
Заключение
Используя комбинацию lsof
, fuser
и дополнительных команд, вы сможете получить полное представление о том, открыто ли ваше устройство DRBD, и какие процессы его используют, не прибегая к команде drbdadm secondary
. Это поможет вам избежать ошибок и эффективно управлять вашими DRBD томами.