¿Qué es la reserva SCSI
La reserva de SCSI es un mecanismo que permite a los iniciadores de SCSI reservar un LUN para acceso exclusivo y evitar que otros iniciadores realicen cambios. La característica se usa generalmente en el clúster. Esta publicación explica el uso básico de la reserva SCSI en los sistemas CentOS/RHEL.
La reserva SCSI contiene dos etapas:primero, los iniciadores deben registrar una clave de reserva y luego continuar reservando el dispositivo usando la misma clave de reserva cuando un host necesita acceso exclusivo. Veamos cómo podemos usar la reserva SCSI y las funciones necesarias para la reserva SCSI.
Instalar las utilidades necesarias
El sg_persist El comando proporciona todas las funciones necesarias para la Reserva SCSI, está contenido en el paquete sg3_utils .
# yum install sg3_utils
Ver el registro
En el ejemplo que se muestra a continuación, aún no se ha registrado ninguna clave de reserva.
# 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
Registrar una clave de reserva
La clave de reserva debe ser cadenas hexadecimales y de hasta 8 bytes de largo, aquí usamos abc123 por ejemplo.
# sg_persist --out --register --param-sark=abc123 /dev/sdc
El siguiente resultado muestra un SCSI LUN que tiene 2 claves de reserva (o 2 hosts) registradas.
# 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
Reserve un LUN registrado en nombre de una clave determinada
# sg_persist --out --reserve --param-rk=abc123 --prout-type=3 /dev/sdc IET VIRTUAL-DISK 0001 Peripheral device type: disk
El tipo prout el parámetro especificó el tipo de reserva, desde la página de manual, tipos válidos que incluyen:
- 1 :escribe exclusivo
- 3 :acceso exclusivo
- 5 :escriba exclusivo - solo para los registrados
- 6 :acceso exclusivo – solo para registrados
- 7 :escribe exclusivo – todos los registrados
- 8 :acceso exclusivo – todos los registrados
Ver la reserva
La salida indicó que el servidor estaba reservado por clave abc123, con tipo 3 (acceso exclusivo):
# 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
Verificar la reserva
En el nodo 1 que tiene /dev/sdc1 reservado, pudo montar el 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
Mientras tanto, no pudo acceder al mismo disco en el nodo2
# mount /dev/sdc1 /mnt mount: mount /dev/sdc1 on /mnt failed: Invalid exchange
El conflicto de reserva de show de dmesg
# 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
Liberar la reserva
# sg_persist --out --release --param-rk=abc123 --prout-type=3 /dev/sdc
Anular el registro de una clave de reserva
# sg_persist --out --register --param-rk=abc123 /dev/sdcServicio del sistema operativo Linux 'scsi_reserve'