Ошибка команды flush для multipath с сообщением «map in use»

Проблема выявилась на облаке, развернутом на Astra Linux 1.7, Cinder на СХД с multipath.

При выполнении определённых действий с виртуальной машиной, имеющей подключенные диски, действие завершается с ошибкой, машина переходит в состояние “В ошибке”.

В описании виртуальной машины и в логе nova-compute на вычислительном узле появляется сообщение об ошибке, содержащее следующий текст:

Unexpected error while running command. Command: multipath -f 36fc73fb10023e21a5cf7c154000001af Exit code: 1 Stdout:
'' Stderr: '586.802730 | 36fc73fb10023e21a5cf7c154000001af-part2: map in use\n'

Как видно из этого сообщения, команда сброса (flush) соединений mutlipath к сетевому блочному устройству не выполнилась, так как устройство занято.

При этом разделы устройства не смонтированы в операционную систему вычислительного узла и нет открытых файлов по пути устройства. Вероятной причиной может быть то, что сетевые блочные устройства (представляющие собой диски виртуальной машины), содержат метаданные LVM. Операционная система вычислительного узла сканирует подключенные к ней блочные устройства на наличие этих метаданных и подключает найденные таким образом LV через device mapper.

В этом можно убедиться, посмотрев вывод команды pvdisplay. Разделы диска, соединения к которому не удалось сбросить, окажутся перечислены в качестве PV.

Для “освобождения” разделов, следует выполнить команду dmsetup remove для каждого из LV, относящегося к VG, членами которой являются обнаруженные PV.

Выполните команду lvs для просмотра списка LV. Имя устройства в device mapper состоит из имен VG и LV, разделённых дефисом (дефисы в самих именах удваиваются).

Пример:

В выводе pvdisplay мы обнаружили, что раздел блочного устройства виртуальной машины /dev/mapper/36fc73fb10023e21a5cf7c154000001af-part5 является PV, для которого указано членство в VG volgroup-one. Далее из вывода команды lvs мы можем увидеть, что в VG volgroup-one присутствует LV logicalvol-root. Его мы и будем удалять из device mapper:

dmsetup remove /dev/mapper/volgroup--one-logicalvol--root

После этого команда multipath -f 36fc73fb10023e21a5cf7c154000001af должна беспрепятственно выполниться.

Для восстановления работы виртуальной машины после удаления lv из device mapper следует сбросить её состояние на “Активна” и выполнить “Жесткую” перезагрузку.

Для того, чтобы ошибка не появлялась в дальнейшем, следует настроить фильтры в LVM на ВУ.