GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

Verstehen der Linux-SCSI-Reservierung

Was ist eine SCSI-Reservierung

Die SCSI-Reservierung ist ein Mechanismus, der es SCSI-Initiatoren ermöglicht, eine LUN für exklusiven Zugriff zu reservieren und andere Initiatoren daran zu hindern, Änderungen vorzunehmen. Das Feature wird normalerweise im Cluster verwendet. Dieser Beitrag erläutert die grundlegende Verwendung der SCSI-Reservierung in CentOS/RHEL-Systemen.

Die SCSI-Reservierung besteht aus zwei Phasen:Zuerst müssen Initiatoren einen Reservierungsschlüssel registrieren und dann das Gerät mit demselben Reservierungsschlüssel weiter reservieren, wenn ein Host exklusiven Zugriff benötigt. Sehen wir uns an, wie wir die SCSI-Reservierung und die notwendigen Funktionen für die SCSI-Reservierung verwenden können.

Installieren Sie die notwendigen Dienstprogramme

Die sg_persist Der Befehl stellt alle notwendigen Funktionen für die SCSI-Reservierung bereit und ist im Paket sg3_utils enthalten .

# yum install sg3_utils

Sehen Sie sich die Registrierung an

Im unten gezeigten Beispiel wurde noch kein Reservierungsschlüssel registriert.

# 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

Registrieren Sie einen Reservierungsschlüssel

Der Reservierungsschlüssel muss aus Hex-Strings bestehen und bis zu 8 Bytes lang sein, hier verwenden wir zum Beispiel abc123.

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

Die folgende Ausgabe zeigt eine SCSI-LUN, die 2 Reservierungsschlüssel (oder 2 Hosts) registriert hat.

# 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

Reservieren Sie eine registrierte LUN im Namen eines bestimmten Schlüssels

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

Der –prout-Typ Der Parameter spezifizierte den Reservierungstyp, von der Manpage, gültige Typen einschließlich:

  • 1 :Exklusiv schreiben
  • 3 :exklusiver Zugriff
  • 5 :Exklusiv schreiben – nur für Registranten
  • 6 :exklusiver Zugang – nur für registrierte Personen
  • 7 :Exklusiv schreiben – alle Registranten
  • 8 :exklusiver Zugang – alle Registranten

Reservierung ansehen

Die Ausgabe zeigte an, dass der Server durch den Schlüssel abc123 reserviert wurde, mit Typ 3 (exklusiver Zugriff):

# 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

Bestätigen Sie die Reservierung

Auf Knoten1, der /dev/sdc1 reserviert hat, konnte er die Festplatte mounten.

# 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

In der Zwischenzeit war es nicht möglich, auf denselben Datenträger auf node2

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

Der dmesg zeigt einen Reservierungskonflikt an

# 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

Reservierung freigeben

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

Einen Reservierungsschlüssel abmelden

# sg_persist --out --register --param-rk=abc123 /dev/sdc
Linux-Betriebssystemdienst „scsi_reserve“


Cent OS
  1. Ein Leitfaden zum Verständnis von Linux-Softwarebibliotheken in C

  2. Verstehen von systemd beim Start unter Linux

  3. Linux-Desktop verstehen?

  4. Verständnis von dm-Multipath-Identifikatoren in Linux

  5. Grundlegendes zu SELinux-Richtlinien in Linux

Verstehen des uname-Befehls in Linux

Grundlegendes zu Linux-Dateiberechtigungen

Verstehen des Zeitbefehls in Linux

Grundlegendes zu Linux Multipath (dm-multipath)

Verstehen des parted Linux-Dienstprogramms

Linux-Dienstprogramm fdisk verstehen