iSCSI Linux

Jueves, 23 de Abril de 2009

Para poder conectarnos a una unidad iSCSI necesitamos disponer de un “initiator” de iSCSI. Voy a usar un “initiator” software, el Open-iSCSI, que viene con Red Hat 5.  El primer paso que tenemos que hacer es instalar el paquete iscsi-initiator-utils. Esto lo hacemos con:

# yum install iscsi-initiator-utils

Una vez hecho esto, nos generamos un iSCSI Qualified Name (IQN). Este IQN será similar a:

iqn.1992-09.es.ehu:textoidentificativomio

Para saber más detalles sobre el formato de los IQN se puede consultar la RFC 3720.

Este IQN lo guardaremos en el fichero /etc/iscsi/initiatorname.iscsi que tendrá el siguiente aspecto:

InitiatorName=iqn.1992-09.es.ehu:textoidentificativomio
InitiatorAlias=mihostname

Si no queremos complicarnos la vida con el IQN podemos usar el comando iscsi-iname que nos generá uno aleatorio (esto comando no actualiza el fichero /etc/iscsi/initiatorname.iscsi).

El IQN es un dato que va a necesitar el responsable del servidor que nos va a exportar la unidad iSCSI.

Para conectarnos al disco iSCSI necesitamos los siguientes valores:

  • IP y puerto del servidor iSCSI
  • Si la autenticación CHAP está habilitada y en caso afirmativo cual la clave CHAP.
  • IQN del disco iSCSI al que nos vamos a conectar.  Si podemos hacer un “discovery” contra el servidor no necesitaremos este dato.

Si el CHAP está habilitado  como en nuestro caso (CHAP en inicio sesión y discovery, pero solo en un sentido, no autenticación mutúa) editamos el fichero /etc/iscsi/iscsid.conf y modificamos los siguientes parámetros:

node.session.auth.authmethod = CHAP
node.session.auth.username = iqn.1992-09.es.ehu:textoidentificativomio
node.session.auth.password = **************
discovery.sendtargets.auth.authmethod = CHAP
discovery.sendtargets.auth.username = iqn.1992-09.es.ehu:textoidentificativomio
discovery.sendtargets.auth.password = **************

Una vez modificado estos parámetros reiniciamos el servicio iscsi (en RedHat se arranca por defecto al instalarlo):

service iscsi restart

Ahora iniciamos el discovery para descubrir que discos nos están exportando:

iscsiadm -m discovery -t st -p ipservidoriscsi

Si todo va bien, este comando nos debería devolver la lista de IQN (targets) que nos exporta el servidor. Además este comando se encarga de actualizar una BD interna del driver iSCSI donde guarda los targets descubiertos. Reiniciamos el servicio iscsi para que se conecte a estos discos y si ahora ejecutamos el comando fdisk -l deberíamos ver los nuevos discos iSCSI. El nombre que tendrán será algo parecido a /dev/sd? (dependerá de los discos que existan con anterioridad).

Al rearrancar el servidor estos discos se volverán a contectar automáticamente y ya podremos trabajar con ellos como si fueran un nuevo disco local.

Por ejemplo en nuestro caso vamos a crear una partición LVM que ocupe todo el disco y dentro de ella crearemos un volumen.

# fdisk /dev/sdb
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel. Changes will remain in memory only,
until you decide to write them. After that, of course, the previous
content won't be recoverable.

The number of cylinders for this disk is set to 10000.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
   (e.g., DOS FDISK, OS/2 FDISK)
Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-10000, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-10000, default 10000):
Using default value 10000

Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)

Command (m for help): p

Disk /dev/sdb: 10.4 GB, 10485760000 bytes
64 heads, 32 sectors/track, 10000 cylinders
Units = cylinders of 2048 * 512 = 1048576 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1               1       10000    10239984   8e  Linux LVM

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

# pvcreate /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
# vgcreate vol_iscsi /dev/sdb1
  Volume group "vol_iscsi" successfully created
# vgchange -ay vol_iscsi
  1 logical volume(s) in volume group "vol_iscsi" now active
# lvcreate -L 5G -n disco1 vol_iscsi
  Logical volume "mysql" created
# mkfs.ext3 /dev/vol_iscsi/disco1
# mount /dev/vol_iscsi/disco1 /iscsi

Ahora añadimos la linea correspondiente a /etc/fstab (con la opción _netdev ya que es una unidad de red) y ya tenemos nuestra partición creada en el disco iSCSI para usarla como mejor nos parezca.

/dev/vol_iscsi/disco1    /iscsi                  ext3    _netdev         0 0

Y eso es todo amigos…

  1. Alejandro
    Jueves, 22 de Abril de 2010 a las 21:03 | #1

    Hola, he leido en otros foros que si queremos presentar la misma partición ISCSI a 2 máquinas distinas no funciona al formatear con ext3, es necesario un sistema de archivos distinto… ¿sabes cual?
    Necesito hacer esto y tengo las LUNs ISCSI presentadas a ambas máquinas pero no quiero formatear hasta tener la certeza de qué sistemas de archivos utilizar.
    Agradeceré mucho tu ayuda.

    Saludos.

  2. DAVID FERNANDEZ ACIN
    Viernes, 23 de Abril de 2010 a las 07:25 | #2

    Sí, necesitas un sistema de ficheros que evite que los dos servidores intenten modificar los mismos datos a la vez (lo que puede generar inconsistencias). Una opción es GFS, aunque seguramente existirán más opciones.

  3. cesar
    Jueves, 20 de Enero de 2011 a las 22:02 | #3

    Hola URGENTE auxilio,
    Tengo Centos 5.4, y sigo los pasos indicados arriba pero despues de configurar los 2 archivos en /etc/iscsi/ , ejecuto service iscsi restart me aparece:

    Stopping iSCSI daemon:
    iscsid interrumpido pero existe un archivo pid [ OK ]
    Starting iSCSI daemon: [ OK ]
    [ OK ]
    Configurando destinos iSCSI: iscsiadm: No records found!
    [ OK ]
    y luego, cuando ejecuto el comando:
    iscsiadm -m discovery -t st -p 192.168.0.124
    aparece:

    iscsiadm: cannot make connection to 192.168.0.124:3260 (111)
    iscsiadm: connection to discovery address 192.168.0.124 failed
    iscsiadm: cannot make connection to 192.168.0.124:3260 (111)
    iscsiadm: connection to discovery address 192.168.0.124 failed
    iscsiadm: cannot make connection to 192.168.0.124:3260 (111)
    iscsiadm: connection to discovery address 192.168.0.124 failed
    iscsiadm: cannot make connection to 192.168.0.124:3260 (111)
    iscsiadm: connection to discovery address 192.168.0.124 failed
    iscsiadm: cannot make connection to 192.168.0.124:3260 (111)
    iscsiadm: connection to discovery address 192.168.0.124 failed
    iscsiadm: connection login retries (reopen_max) 5 exceeded
    iscsiadm: Could not perform SendTargets discovery.

    ¿Alguien me puede ayudar????

  4. Jueves, 18 de Agosto de 2011 a las 19:06 | #4

    yo estoy igual cesar
    con centos 5.6
    pudiste soulucionar el problema?

    saludos

  5. Jueves, 18 de Agosto de 2011 a las 19:10 | #5

    no prende el servicio

    [root@vdi iscsi]# netstat -tulpn | grep 111
    tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 2902/portmap
    tcp 0 0 :::11173 :::* LISTEN 3933/java
    tcp 0 0 :::11174 :::* LISTEN 3933/java
    udp 0 0 0.0.0.0:111 0.0.0.0:* 2902/portmap
    [root@vdi iscsi]# netstat -tulpn | grep 3260
    [root@vdi iscsi]#

  1. Sin trackbacks aún.