DS4000 : suppression de réservation SCSI

Par défaut, le driver RDAC pose des réservations scsi-2 sur les LUN des DS4X00. Cela peut poser des problèmes lorsque l'on réassigne les disques à un autre serveur sans les avoir supprimé proprement du serveur source. Typiquement lors d'un crash serveur :-)


description des réservations



Il y a 2 grand types de réservation SCSI possibles :

reservation SCSI-2 : les LUN sont réservés par un accès exclusif à travers les commandes scsi reserve et release Voici un lien sur un pdf qui décrit (vraiment en détail ;-) la norme SCSI-2 :
SCSI-2 Small Computer System Interface - 2 (SCSI-2)
Le chapitre 9.1.3 est celui auquel je fais référence.

reservation SCSI-3 PR : la réservation des accés est géré à travers une notion de clé. Cela permet surtout une persistance de la réservation à travers des évenements SCSI comme un reset de bus, un arrêt éléctrique, etc ...

Voici aussi le lien sur un pdf qui décrit les commandes SCSI-3 de réservation.Chapitre 5.6.4.
SCSI Primary Commands - 3 (SPC-3)

Remarque : apparament dans les nouvelles versions, le driver RDAC émule la réservation SCSI-2 avec des commandes SCSI-3 mais je n'étais pas dans la bonne version :-)

Détection du problème de réservation scsi sur le host



Le premier symptôme typique d'un problème de réservation SCSI est lorsqu'après la détection des disques les PVID n'apparaissent pas au lspv.
# lspv

hdisk0 0028961a72e4eae8 rootvg active
hdisk1 0028961a72e4ed1b rootvg active
hdisk2 00c5e35d9b2e325a None
hdisk3 none None
hdisk4 none None
hdisk5 none None
hdisk6 none None
hdisk7 none None
hdisk8 00594face6075806 None
On voit que les hdisk de 3 à 7 n'affichent pas leur pvid.

Le deuxième test consiste à faire un test d'accès au disque avec la commande dd :
# dd if=/dev/hdisk4 of=/dev/null count=10
dd: /dev/hdisk4: Device busy
Device busy identifie le problème sans aucun doute.

Remarque : la commande dd peut poser une réservation SCSI lorsqu'on l'utilise. Cela ne m'a jamais géné mais on peut aussi utiliser la commande lquerypv si besoin.

Détection du problème sur la baie



L'interface GUI permet de voir les réservations SCSI-3.Sous SMclient, il faut aller dans le menu Advanced -> Persistent Reservations....
Voici une capture d'écran.



Correction du problème



S'il s'agit d'une réservation SCSI-3, il suffit de passer par le menu Advanced -> Persistent Reservations... et de sélectionner la réservation et d'appuyer sur clear...

Dans le cas d'une réservation scsi-2, il faut se connecter au Service Processor auquel la LUN est attaché.
La connection peut se faire soit par rlogin ou par liaison série.

Tout d'abord, il est nécessaire de connaitre à quel SP est connecté un disque :
 # fget_config -Av

---dar0---

User array name = 'P630 DEV/REC/INT'
dac0 ACTIVE dac1 ACTIVE

Disk DAC LUN Logical Drive
utm 31
hdisk3 dac0 0 LD srv1 1
hdisk4 dac1 1 LD srv1 2
hdisk5 dac0 2 LD srv1 3
hdisk6 dac1 3 LD srv1 4
hdisk7 dac0 4 LD srv1 5
hdisk8 dac1 5 LD srv1 6
Il faut ensuite récupérer le Subsystem ID (SSID) du logical drive. On peut soit le récupérer en sélectionnant properties sur un logical drive. Soit on utilise SMcli pour lister tout les Logical Drives :
   Logical Drive name: LD srv1 1
Logical Drive ID: 60:0a:0b:80:00:13:bc:0a:00:00:0c:01:40:e0:c4:e1
Subsystem ID (SSID): 8
Status: Optimal
Preferred owner: Controller in slot A
Current owner: Controller in slot A
Capacity: 36 GB
RAID level: 5
Segment size: 64 KB
Modification priority: High
Associated array: 1
Read cache: Enabled
Write cache: Enabled
Write cache without batteries: Disabled
Write cache with mirroring: Enabled
Flush write cache after (in seconds): 10.00
Cache read ahead multiplier: 1
Enable background media scan: Enabled
Media scan with redundancy check: Disabled
Une fois que l'on a le SSID, on se connecte au Service Processor :
# rlogin fastt600_spa
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@ @@@@ @@ @@ @@@@ @@@ @@ @@ @@
@@ @@ @@ @@ @@@ @ @ @@@@ @ @@@@@
@@ @@@ @@ @@ @@@ @ @ @ @ @ @@@@@
@@ @@ @@ @@ @@@ @ @ @ @ @ @@@@@
@@@@ @@@@ @@ @@ @@ @@@ @@ @@ @@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@


SHV RAID Controller
LSI Logic Storage Systems, Inc.
SHVRAID Version 05.40.03.02
Current Date and Time: April 04, 2008 09:28:20

Enter password to access shell:
Access granted -- user is "guest"


Copyright Wind River Systems, Inc., 1984-2002
Copyright LSI Logic Storage Systems, Inc.,

VxWorks: VxWorks5.4.2
KERNEL: WIND version 2.5
BSP: 1.2/0
Creation date: Aug 18 2003 15:38:40
CPU: SHV 80321
Memory Size: 0x8000000 (128 MB)

Il faut ensuite voir s'il y a une réservation scsi, on peut utiliser la commande hlmTestLunShow auquel on passe le SSID:
-> hlmTestLunShow 10

LunNumber:0x8 LunInfo :0x406ab57c State:0x0 QuiescenceFlag:0x0
Owner:0x1 IsReady :0x1
reserveId:0xa resv3rdId:0xffff
value = 129 = 0x81

Le champ reserveId indique s'il y a une réservation SCSI-2. Il est à 0xffff s'il n'y a pas de réservation.

Le champ resv3rdId indique s'il y a une réservation SCSI-3. Il est à 0xffff s'il n'y a pas de réservation.

Lorsqu'il y a une réservation, le champ reserveId indique le serveur qui a fait la réservation.

Pour supprimer la réservation, il faut utiliser la commande hlmTestRelease en spécifiant l'id du serveur ansi que le SSID.
-> hlmTestRelease 0xa,8

LunNumber:0x8 LunInfo :0x406ab57c State:0x0 QuiescenceFlag:0x0
Owner:0x1 IsReady :0x1
reserveId:0xffff resv3rdId:0xffff
value = 132 = 0x84
On voit que reserveId passe à 0xffff ce qui indique qu'il n'y a plus de réservation et que les disques peuvent être accédé.

conclusion


J'ai eu du mal à trouver les commandes pour supprimer ses réservations. Les noms de commandes des Services Processor ne s'inventent pas :-)
J'espère que cela sera utile à quelqu'un :-)
Le site www.t10.org regorge d'informations sur le protocole SCSI et je dois admettre que c'est bien plus abordable que ce que je pensais au départ. Même si l'on ne veut pas développer de drivers, les concepts sont assez bien expliqués à mon goût. Je vous encourage à y jeter un coup d'oeil.