jueves, 22 de diciembre de 2011

ISCSi Persistente en CentOS

Volvi, en forma de fichas.....

Hoy les presentare, estimados lectores, como solucionar uno de los grandes problemas con el mapeo de unidades ISCSi, la persistencia de nombres.
Generalmente al montar unidades ISCSi al reiniciar el equipo se modifica el nombre del disco, o se cruzan como es en mi caso, a saber /dev/sda se convierte en /dev/sdb al reiniciar un servidor y viceversa.

Esto se hace mediante el servicio udev, le definimos que por cada UUID de unidad ISCSi le asigne siempre el mismo dispositivo (/dev/iscsi0 /dev/iscsi1 o lo que fuere)

Primero se debe obtener el id de los discos. Se debe ejecutar el siguiente comando

 scsi_id -g -u -s /block/sda
Recordar apuntar a /block y no a /dev, esto se podria ver tambien ejecutando fdisk -l y cambiar el /dev por /block:

[root@remo ~]# fdisk -l

Disk /dev/xvdd: 117 MB, 117549056 bytes
255 heads, 63 sectors/track, 14 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Disk /dev/xvdd doesn't contain a valid partition table

Disk /dev/xvda: 21.4 GB, 21474836480 bytes
255 heads, 63 sectors/track, 2610 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

    Device Boot      Start         End      Blocks   Id  System
/dev/xvda1   *           1          13      104391   83  Linux
/dev/xvda2              14        2610    20860402+  8e  Linux LVM

Disk /dev/sda: 12.5 GB, 12582912000 bytes
64 heads, 32 sectors/track, 12000 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Disk /dev/sda doesn't contain a valid partition table

Disk /dev/sdb: 14.6 GB, 14696841216 bytes
64 heads, 32 sectors/track, 14016 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

Disk /dev/sdb doesn't contain a valid partition table

Entonces, para obtener el UUID del disco se debe ejecutar


 scsi_id -g -u -s /block/sda
14f504e46494c45524a5a5471534c2d4f69724e2d6e546164

 scsi_id -g -u -s /block/sdb
14f504e46494c45524a6b705679642d63366b312d41673268
Apuntar los UUID que seran usados mas adelante...
Ahora, se debe crear un nuevo archivo dentro de /etc/udev/rules.d llamado
20-names.rules
La sintaxis es la siguiente:


KERNEL=="sd*", BUS=="scsi",  PROGRAM="sbin/scsi_id", RESULT=="14f504e46494c45524a5a5471534c2d4f69724e2d6e546164", NAME="iscsi0"
KERNEL=="sd*", BUS=="scsi",  PROGRAM="sbin/scsi_id", RESULT=="14f504e46494c45524a6b705679642d63366b312d41673268", NAME="iscsi1"
o sea que en mi caso /dev/sdb va a llamarse /dev/iscsi1 y /dev/sda se va a llamar /dev/iscsi0

Editar el archivo /etc/scsi_id.config, comentar todas las lineas y agregar lo siguiente (en negrita)

#
# options=
# vendor=string[,model=string],options=

# some libata drives require vpd page 0x80
options=-g

Sin hacer esto NO FUNCIONA asi que no olvidarlo!!!

Ahora se debe editar el archivo /etc/rc.local y agregar /sbin/start_udev
Reiniciar el equipo y listo!
No olvidar de cambiar el /etc/fstab porque /dev/sda y /dev/sdb no existen mas luego del cambio