GNU/Linux >> Linux Esercitazione >  >> Cent OS

Comprensione della prenotazione SCSI Linux

Cos'è la prenotazione SCSI

La prenotazione SCSI è un meccanismo che consente agli iniziatori SCSI di riservare un LUN per l'accesso esclusivo e impedire ad altri iniziatori di apportare modifiche. La funzionalità viene solitamente utilizzata nel cluster. Questo post elabora l'utilizzo di base della prenotazione SCSI nei sistemi CentOS/RHEL.

La prenotazione SCSI prevede due fasi:in primo luogo, gli iniziatori devono registrare una chiave di prenotazione, quindi continuare a prenotare il dispositivo utilizzando la stessa chiave di prenotazione quando un host necessita dell'accesso esclusivo. Vediamo come possiamo utilizzare la prenotazione SCSI e le funzioni necessarie per la prenotazione SCSI.

Installa le utilità necessarie

Il sg_persist fornisce tutte le funzioni necessarie per la prenotazione SCSI, è contenuto nel pacchetto sg3_utils .

# yum install sg3_utils

Visualizza la registrazione

Nell'esempio mostrato di seguito, non è stata ancora registrata alcuna chiave di prenotazione.

# 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

Registra una chiave di prenotazione

La chiave di prenotazione deve essere stringhe esadecimale e lunga fino a 8 byte, qui utilizziamo ad esempio abc123.

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

L'output seguente mostra un LUN SCSI con 2 chiavi di prenotazione (o 2 host) registrate.

# 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

Prenota una LUN registrata per conto di una determinata chiave

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

Il -tipo di prout parametro ha specificato il tipo di prenotazione, dalla manpage, tipi validi inclusi:

  • 1 :scrivi in ​​esclusiva
  • 3 :accesso esclusivo
  • 5 :scrivi esclusivo – solo iscritti
  • 6 :accesso esclusivo – solo iscritti
  • 7 :scrivi in ​​esclusiva – tutti gli iscritti
  • 8 :accesso esclusivo – tutti gli iscritti

Visualizza la prenotazione

L'output indicava che il server era riservato dalla chiave abc123, con tipo 3 (accesso esclusivo):

# 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

Verifica la prenotazione

Sul nodo1 che ha /dev/sdc1 riservato, è stato in grado di montare il disco.

# 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

Nel frattempo, non è stato in grado di accedere allo stesso disco su node2

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

Il dmesg mostra un conflitto di prenotazione

# 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

Rilascia la prenotazione

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

Annulla la registrazione di una chiave di prenotazione

# sg_persist --out --register --param-rk=abc123 /dev/sdc
Servizio del sistema operativo Linux 'scsi_reserve'


Cent OS
  1. Una guida per comprendere le librerie software Linux in C

  2. Comprensione di systemd all'avvio su Linux

  3. Capire i comandi di base di Linux

  4. Comprensione degli identificatori dm-Multipath in Linux

  5. Comprendere le politiche di SELinux in Linux

Comprendere il comando uname in Linux

Comprendere i permessi dei file Linux

Comprendere il comando dell'ora in Linux

Comprensione del multipath di Linux (dm-multipath)

Comprensione dell'utilità separata di Linux

Comprensione dell'utilità fdisk di Linux