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