Suppression de disque ISCSI avec Multimap

Publié le 28/06/2021  Proxmox

Lorsque les volumes ISCSI vus dans Proxmox sont connus au travers du multimap (exemple si le stockage est sur une baie Compellent), leur suppression n'est pas triviale.

Voici la procédure :
# multipath -ll
36000d3100d11ca000000000000000003 dm-79 COMPELNT,Compellent Vol
    size=10G features='1 queue_if_no_path' hwhandler='0' wp=rw
    `-+- policy='service-time 0' prio=0 status=enabled
      |- 16:0:0:1  sdf  8:80   failed faulty running
      |- 17:0:0:1  sdk  8:160  failed faulty running
      |- 19:0:0:1  sdcd 69:16  failed faulty running
      |- 20:0:0:1  sdcb 68:240 failed faulty running
      `- 23:0:0:1  sdcc 69:0   failed faulty running

On va donc supprimer complètement le wwid 36000d3100d11ca000000000000000003.

multipath -f 36000d3100d11ca000000000000000003
Jun 24 09:56:02 | 36000d3100d11ca000000000000000003: map in use

lsof /dev/mapper/36000d3100d11ca000000000000000003
COMMAND     PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    vgdisplay  8405 root   43r   BLK 253,62      0t0  990 /dev/mapper/../dm-62
    vgs       24472 root   43r   BLK 253,62      0t0  990 /dev/mapper/../dm-62
    pvs       28494 root   44r   BLK 253,62      0t0  990 /dev/mapper/../dm-62
    vgs       31868 root   43r   BLK 253,62      0t0  990 /dev/mapper/../dm-62
C'est donc le LVM qui est connecté dessus, on peut continuer.

dmsetup suspend /dev/mapper/36000d3100d11ca000000000000000003
dmsetup info /dev/mapper/36000d3100d11ca000000000000000003
Name:              36000d3100d11ca000000000000000003
    State:             SUSPENDED                  <<<<==== YES
    Read Ahead:        256
    Tables present:    LIVE
    Open count:        5
    Event number:      17
    Major, minor:      253, 62
    Number of targets: 1
    UUID: mpath-36000d3100d11ca000000000000000003

dmsetup clear /dev/mapper/36000d3100d11ca000000000000000003
dmsetup wipe_table /dev/mapper/36000d3100d11ca000000000000000003
multipath -f 36000d3100d11ca000000000000000003
La suppression a dû se dérouler sans erreur.

On peut blacklister l'entrée afin qu'elle ne réapparaîsse pas /etc/multipath.conf :
blacklist {
        wwid 36000d3100d11ca000000000000000003
    }
service multipathd reload

On peut ensuite supprimer les devices inutilisés (le device est affiché dans le résultat de la première commande) (Adapter le sdXX) :
echo 1 > /sys/block/sdXX/device/delete
sinon, le message d'erreur suivant apparaît :
sd 5:0:0:1: [sdam] Unit Not Ready
 sd 5:0:0:1: [sdam] Sense Key : Illegal Request [current]
 sd 5:0:0:1: [sdam] Add. Sense: Logical unit not supported
 sd 5:0:0:1: [sdam] Read Capacity(16) failed: Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE

Cette procédure est à reproduire sur tous les noeuds du cluster Proxmox. Une fois tous les noeuds purgés, le volume est inutilisé, il peut donc être supprimé.

En script destroyVolume :
#!/bin/bash
set -e
 
if [ ! $1 ]; then
  echo "Manque le device à supprimer (sans /dev/mapper)"
  exit
fi
 
if [ ! -e /dev/mapper/$1 ]; then
  echo "Device /dev/mapper/$1 inexistant"
  exit
fi

DISKS=`multipath -ll $1 | grep "running" | awk '{print $3}'`
dmsetup suspend /dev/mapper/$1
dmsetup info  /dev/mapper/$1
dmsetup clear /dev/mapper/$1
dmsetup wipe_table /dev/mapper/$1
multipath -f $1
IFS=$'\n'
for file in $DISKS; do
   echo 1 > /sys/block/$file/device/delete
done