Как узнать, открыт ли устройство DRBD?

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

У нас есть объемы 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 томами.

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

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