Ошибки удаления LUN

1. Проблема

Иногда после удаления LUN из хранилищ - остаётся некоторое количество остаточных данных multipath и lvm, что выражается в ошибках в файле /var/log/messages хоста виртуализации вида:

Mar 10 03:23:02 zvirt-srv2 multipathd: 36d039ea0002e6292000001a761b0ae75: sdgr - rdac checker reports path is down: lun not connected
Mar 10 03:23:04 zvirt-srv2 multipathd: sded: Could not synchronize with kernel state
Mar 10 03:23:04 zvirt-srv2 multipathd: 36d039ea0002e62920000018461675d0b: sded - rdac checker reports path is down: lun not connected
Mar 10 03:23:04 zvirt-srv2 multipathd: sdcj: Could not synchronize with kernel state
Mar 10 03:23:04 zvirt-srv2 multipathd: 36d039ea0002e53d60000047d61657418: sdcj - rdac checker reports path is down: lun not connected
Mar 10 03:23:04 zvirt-srv2 multipathd: sddv: Could not synchronize with kernel state
Mar 10 03:23:04 zvirt-srv2 multipathd: 36d039ea0002e53d60000047e6165741f: sddv - rdac checker reports path is down: lun not connected
Mar 10 03:23:04 zvirt-srv2 multipathd: sdam: Could not synchronize with kernel state
Mar 10 03:23:04 zvirt-srv2 multipathd: 36d039ea0002e62920000018461675d0b: sdam - rdac checker reports path is down: lun not connected
Mar 10 03:23:04 zvirt-srv2 multipathd: sdw: Could not synchronize with kernel state

2. Решение

После удаления LUN из хранилищ, вывод всех хостов по одному в режим обслуживания и их перезагрузка.

Попытка автоматизации данного процесса (не рекомендовано к использованию):

#!/bin/bash
errors=0
for f in /dev/dm-*
do
    dd if=$f of=/dev/null count=1
    if [ $? -ne 0 ]
    then
      dmsetup remove $f
      errors=1
    fi
done
for f in /sys/block/sd*
do
  s=`cat $f/size`
  if [ "$s" == "0" ]
    then
      echo $f
      echo 1 >$f/device/delete
  fi
done
if [ $errors -eq 1 ]
then
  exec $0
fi

systemctl restart multipathd
exit 0