среда, 31 января 2018 г.

Ошибки при удалении multipath диска


В продолжение предыдущей статьи. Что происходит, когда произошла авария (или просто накосячили) и все пути для multipath устройства находятся в состоянии failed? Пример ниже:

# multipath -ll
mpathb (360a98000646e6c512f4a6f714f46324f) dm-6 NETAPP ,LUN
size=110G features='4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handle' hwhandler='1 alua' wp=rw
|-+- policy='service-time 0' prio=0 status=enabled
| |- 0:0:0:42 sdc 8:32 failed faulty running
| `- 1:0:2:42 sdad 65:208 failed faulty running
`-+- policy='service-time 0' prio=0 status=enabled
|- 0:0:2:42 sdl 8:176 failed faulty running
`- 1:0:1:42 sdw 65:96 failed faulty running

Удаление multipath устройства может закончиться ошибкой:

# multipath -f mpathb
Jan 29 13:42:58 | mpathb: map in use
Jan 29 13:42:58 | failed to remove multipath map mpathb

При этом утилиты просмотра дисков, такие как pvs, начинают зависать, в системе начинают появляться неубиваемые процессы в состоянии D - uninterruptible sleep. Все это, конечно же, очень печалит и ставит в тупик. Но, как говорится, даже если вас съели — то у вас все равно есть два пути. Этой беде тоже можно помочь.
Обратите внимание на опцию в конфигурации multipath диска - "queue_if_no_path" — дословно держать очередь, если нет активных путей. Опцию нужно убрать из конфигурации и затем нужно перечитать конфигурационный файл. После чего уйдут процессы в состоянии uninterruptible sleep, которые держат диск. 
Эта опция может отсутствовать в явном виде в конфигурационном файле, она часто встречается в дефолтной настройке даемона multipathd для различных схд. Убрать опцию queue_if_no_path на multipath диске можно следующим образом:

# dmsetup message mpathb 0 fail_if_no_path

После чего диск можно удалить:

# multipath -f mpathb

вторник, 30 января 2018 г.

Как правильно удалить multipath диск из ОС


Друзья, коллеги, просто читатели, ОС - это конечно же linux. Еще точнее это rhel 6 или rhel 7. Порядок добавления дисков multipath ни у кого, как правило, не вызывает особых проблем. Тем не менее, если есть желание почитать как — напишите в комментариях. Но при удалении диска/дисков можно допустить досадные промахи. Таким образом порядок следующий:

Посмотрите, какие диски составляют multipath диск:

# multipath -ll
mpathb (360060e802214ab00504114ab00000116) dm-5 HITACHI ,OPEN-V
size=1.0T features='0' hwhandler='0' wp=rw
`-+- policy='service-time 0' prio=1 status=active
|- 0:0:1:1 sdi 8:128 active ready running
|- 0:0:3:1 sdr 65:16 active ready running
|- 1:0:0:1 sdt 65:48 active ready running
`- 1:0:3:1 sdaj 66:48 active ready running

Отмонтируем раздел:

# umount /mount_point

Теперь необходимо зачистить lvm. В случае удаления одного диска из lvm группы необходимо освободить экстенты:

# pvmove /dev/mapper/mpathb

и далее удалить его из группы:

# vgreduce volume_group /dev/mapper/mpathb

В случае вывода из эксплуатации всех дисков составляющих группу нужно деактивировать volume group:

# vgchange -a -n volume_group

далее, удалить volume group:

# vgremove volume_group

не обязательно, но можно удалить метаданные физического (в терминологии lvm) тома:

# pvremove /dev/mapper/mpathb

И вот теперь можно удалить multipath устройство:

# multipath -f mpathb

Но пока это не все - очистим буфера scsi дисков(sdi, sdr, sdt и т.д.):

# blockdev --flushbufs /dev/sdi

Финальный этап: удаляем все диски, которые составляли multipath устройство, пример:

# echo 1 > /sys/block/sdi/device/delete