Ошибка команды 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 на ВУ.