GNU/Linux >> Tutoriels Linux >  >> Cent OS

Comprendre la réservation SCSI Linux

Qu'est-ce que la réservation SCSI

La réservation SCSI est un mécanisme qui permet aux initiateurs SCSI de réserver un LUN pour un accès exclusif et d'empêcher les autres initiateurs d'apporter des modifications. La fonctionnalité est généralement utilisée dans le cluster. Cet article explique l'utilisation de base de la réservation SCSI dans les systèmes CentOS/RHEL.

La réservation SCSI contient deux étapes :premièrement, les initiateurs doivent enregistrer une clé de réservation, puis continuer à réserver le périphérique à l'aide de la même clé de réservation lorsqu'un hôte a besoin d'un accès exclusif. Voyons comment nous pouvons utiliser la réservation SCSI et les fonctions nécessaires pour la réservation SCSI.

Installez les utilitaires nécessaires

Le sg_persist La commande fournit toutes les fonctions nécessaires pour la réservation SCSI, elle est contenue dans le package sg3_utils .

# yum install sg3_utils

Voir l'inscription

Dans l'exemple ci-dessous, aucune clé de réservation n'a encore été enregistrée.

# sg_persist /dev/sdc
>> No service action given; assume Persistent Reserve In command
>> with Read Keys service action
IET VIRTUAL-DISK 0001
Peripheral device type: disk
PR generation=0x4, there are NO registered reservation keys

Enregistrer une clé de réservation

La clé de réservation doit être des chaînes hexadécimales, et jusqu'à 8 octets de long, ici nous utilisons abc123 par exemple.

# sg_persist --out --register --param-sark=abc123 /dev/sdc

La sortie ci-dessous montre un LUN SCSI qui a 2 clés de réservation (ou 2 hôtes) enregistrées.

# sg_persist /dev/sdc
>> No service action given; assume Persistent Reserve In command
>> with Read Keys service action
IET VIRTUAL-DISK 0001
Peripheral device type: disk
PR generation=0x6, 2 registered reservation keys follow:
0xabc123
0x123abc

Réserver un LUN enregistré au nom d'une clé donnée

# sg_persist --out --reserve --param-rk=abc123 --prout-type=3 /dev/sdc
IET VIRTUAL-DISK 0001
Peripheral device type: disk

Le –type prout le paramètre spécifiait le type de réservation, à partir de la page de manuel, les types valides comprenant :

  • 1 :écriture exclusive
  • 3 :accès exclusif
  • 5 :écriture exclusive - inscrits uniquement
  • 6 :accès exclusif - inscrits uniquement
  • 7 :écriture exclusive – tous les inscrits
  • 8 :accès exclusif – tous les inscrits

Voir la réservation

La sortie indique que le serveur a été réservé par la clé abc123, avec le type 3 (accès exclusif) :

# sg_persist -r /dev/sdc
IET VIRTUAL-DISK 0001
Peripheral device type: disk
PR generation=0x6, Reservation follows:
Key=0xabc123
scope: LU_SCOPE, type: Exclusive Access

Vérifier la réservation

Sur le nœud 1 qui a réservé /dev/sdc1, il a pu monter le disque.

# mount /dev/sdc1 /mnt
# mount | grep mnt
/dev/sdc1 on /mnt type ext3 (rw,relatime,errors=continue,user_xattr,acl,barrier=1,data=ordered)
# umount /mnt

Entre-temps, il n'a pas pu accéder au même disque sur node2

# mount /dev/sdc1 /mnt
mount: mount /dev/sdc1 on /mnt failed: Invalid exchange

Le dmesg affiche un conflit de réservation

# dmesg | tail
[6902380.608058] sd 11:0:0:1: [sdc] tag#16 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_OK
[6902380.608060] sd 11:0:0:1: [sdc] tag#16 CDB: Read(10) 28 00 00 1f ff 80 00 00 08 00
[6902380.608061] blk_update_request: critical nexus error, dev sdc, sector 2097024
[6902380.608064] Buffer I/O error on dev sdc1, logical block 261872, async page read
[6902380.609007] sd 11:0:0:1: reservation conflict
[6902380.609011] sd 11:0:0:1: [sdc] tag#14 FAILED Result: hostbyte=DID_OK driverbyte=DRIVER_OK
[6902380.609013] sd 11:0:0:1: [sdc] tag#14 CDB: Read(10) 28 00 00 00 08 00 00 00 01 00
[6902380.609015] blk_update_request: critical nexus error, dev sdc, sector 2048
[6902380.609523] sd 11:0:0:1: reservation conflict
[6902380.609526] blk_update_request: critical nexus error, dev sdc, sector 0

Annuler la réservation

# sg_persist --out --release --param-rk=abc123 --prout-type=3 /dev/sdc

Désenregistrer une clé de réservation

# sg_persist --out --register --param-rk=abc123 /dev/sdc
Service du système d'exploitation Linux "scsi_reserve"


Cent OS
  1. Un guide pour comprendre les bibliothèques de logiciels Linux en C

  2. Comprendre systemd au démarrage sous Linux

  3. Comprendre les appels système sous Linux avec strace

  4. Comprendre le bureau Linux ?

  5. Comprendre le fichier /etc/xinetd.conf sous Linux

Comprendre la commande uname sous Linux

Comprendre les autorisations de fichiers Linux

Comprendre la commande time sous Linux

Comprendre le multipath Linux (dm-multipath)

Comprendre l'utilitaire séparé Linux

Comprendre l'utilitaire Linux fdisk