# rm-rf.es

Cómo montar y conectarse a un servidor de targets iSCSI

El paquete scsi-target-utils nos ofrece las herramientas necesarias para configurar targets y levantar un servidor iSCSI en sistemas GNU/Linux Red Hat, CentOS, Scientific Linux, etc. Esto puede resultar útil tanto en entornos productivos como cuando necesitamos hacer pruebas de iSCSI y no tenemos una cabina de almacenamiento que nos sirva LUNs. La información del paquete es la siguiente:

# yum info scsi-target-utils

Available Packages
Name        : scsi-target-utils
Arch        : i686
Version     : 1.0.24
Release     : 2.el6
Size        : 166 k
Repo        : base
Summary     : The SCSI target daemon and utility programs
URL         : http://stgt.sourceforge.net/
License     : GPLv2
Description : The SCSI target package contains the daemon and tools to setup a SCSI targets.
            : Currently, software iSCSI targets are supported.

En el caso de no encontrarse instalado lo hacemos a través de yum:

# yum installnfo iscsi-initiator-utils

Toda la configuración se establece en el fichero /etc/tgt/targets.conf. Por suerte, el fichero está perfectamente documentado a través de los comentarios. Los target iSCSI se definen con etiquetas <target>, ejemplo:

# Sample target with one LUN only. Defaults to allow access for all initiators:

#<target iqn.2008-09.com.example:server.target1>
# backing-store /dev/LVM/somedevice
#</target>

Si quisiéramos crear un initiator básico, sin autenticación y disponible para cualquier host podemos seguir el ejemplo anterior. En este caso creamos un target para un volúmen lógico cuyo path es /dev/vg_lab/lv_test2, recordad que se sirve a nivel de bloque:

<target iqn.1994-05.com.redhat:server.lab01>
      backing-store /dev/vg_lab/lv_test2
</target>

Si quisiéramos compartirlo únicamente para un initiator (cliente iSCSI) podemos especificarlo con la directiva initiator-address seguido de la IP del initiator:

<target iqn.1994-05.com.redhat:server.lab01>
       backing-store /dev/vg_lab/lv_test2
       initiator-address 192.168.1.128
</target>

Completando un poco la configuración podríamos solicitar autenticación para hacer login contra el target iSCSI especificando el user y pass dentro de las etiquetas target :

<target iqn.1994-05.com.redhat:server.lab01>
      backing-store /dev/vg_lab/lv_test2
      initiator-address 192.168.1.128
      incominguser miusuario mipassword
</target>

Nota: es necesario configurar la autenticación en el cliente a través del fichero /etc/iscsi/iscsid.conf

Si investigáis el fichero de configuración veréis que las configuraciones pueden ser mucho más complejas, eso ya lo dejo para vosotros. Vamos a levantar el servidor iSCSI para ver si nuestro target se sirve correctamente:

# /etc/init.d/tgtd restart
Stopping SCSI target daemon: not running                   [FAILED]
Starting SCSI target daemon:                               [  OK  ]

En el lado del cliente

Una vez levantado el target ya podemos hacer login contra el portal desde un equipo que tenga permiso para acceder al mismo. Para ello hacemos uso del comando iscsiadm, disponible con el paquete iscsi-initiator-utils:

# yum info iscsi-initiator-utils

Installed Packages
Name        : iscsi-initiator-utils
Arch        : i686
Version     : 6.2.0.872
Release     : 41.el6
Size        : 1.9 M
Repo        : installed
From repo   : anaconda-CentOS-201207051201.i386
Summary     : iSCSI daemon and utility programs
URL         : http://www.open-iscsi.org
License     : GPLv2+
Description : The iscsi package provides the server daemon for the iSCSI protocol,
            : as well as the utility programs used to manage it. iSCSI is a protocol
            : for distributed disk access using SCSI commands sent over Internet
            : Protocol networks.

Lo primero que hacemos es lanzar una consulta al portal (servidor iSCSI) para ver si nos sirve algun disco/lun:

# iscsiadm --mode discovery --type sendtargets --portal 192.168.1.100
Starting iscsid:                                           [  OK  ]
[::1]:3260,1 iqn.1994-05.com.redhat:server.lab01

Como podéis ver, automáticamente levanta el demonio iscsid para poder lanzar la petición, recordad de añadirlo en el arranque si queréis que levante automáticamente al reiniciar:

# chkconfig iscsid on

Como hemos visto, nos sirve un target:

[::1]:3260,1 iqn.1994-05.com.redhat:server.lab01

Para conectarnos utilizamos el siguiente comando, en este caso está configurado sin autenticación así que no especificamos user o password:

# iscsiadm --mode node \
 > --targetname iqn.1994-05.com.redhat:server.lab01 \
 > --portal 192.168.1.100 \
 > --login
Logging in to [iface: default, target: iqn.1994-05.com.redhat:server.lab01, portal: ::1,3260] (multiple)
Login to [iface: default, target: iqn.1994-05.com.redhat:server.lab01, portal: ::1,3260] successful.

Una vez conectados al portal, ya veremos en nuestro sistema el nuevo dispositivo de bloques, ya sea con un dmesg o haciendo un fdisk -clu:

# dmesg | tail
scsi 4:0:0:0: RAID              IET      Controller       0001 PQ: 0 ANSI: 5
scsi 4:0:0:0: Attached scsi generic sg3 type 12
scsi 4:0:0:1: Direct-Access     IET      VIRTUAL-DISK     0001 PQ: 0 ANSI: 5
sd 4:0:0:1: Attached scsi generic sg4 type 0
sd 4:0:0:1: [sdc] 3244032 512-byte logical blocks: (1.66 GB/1.54 GiB)
sd 4:0:0:1: [sdc] Write Protect is off
sd 4:0:0:1: [sdc] Mode Sense: 49 00 00 08
sd 4:0:0:1: [sdc] Write cache: enabled, read cache: enabled, doesn't support DPO or FUA
 sdc: unknown partition table
sd 4:0:0:1: [sdc] Attached SCSI disk
# fdisk -clu /dev/sdc 

Disk /dev/sdc: 1660 MB, 1660944384 bytes
52 heads, 61 sectors/track, 1022 cylinders, total 3244032 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x08040000

Y a partir de aquí podemos trabajar con él como si de un disco físico se tratara. La configuración de cliente iSCSI está fuera del alcance de este artículo, pero os puedo indicar que todos los valores se configuran en el fichero /etc/iscsi/iscsid.conf y una vez conectados a un target, sus configuraciones se encuentra en /var/lib/iscsi/nodes/.

Para desconectarnos de un target usamos el mismo comando de login anterior pero pasando el último parámetro de logout en lugar de login:

# iscsiadm --mode node \
 > --targetname iqn.1994-05.com.redhat:server.lab01 \
 > --portal 192.168.1.100 \
 > --logout
Logging out of session [sid: 1, target: iqn.1994-05.com.redhat:server.lab01, portal: ::1,3260]
Logout of [sid: 1, target: iqn.1994-05.com.redhat:server.lab01, portal: ::1,3260] successful.

Y para eliminar la conexión al target:

# iscsiadm --mode node \
 > --targetname iqn.1994-05.com.redhat:server.lab01 \
 > --portal 192.168.1.100 \
 > -o delete
Salir de la versión móvil