Home Linux Taller Linux – iSCSI Server en Ubuntu server 18.04 en 5 minutos

Taller Linux – iSCSI Server en Ubuntu server 18.04 en 5 minutos

by José Luis Sánchez Borque
Resultat d'imatges de iscsi target initiator

Internet SCSI (iSCSI)

El protocolo iSCSI es un protocolo de cada de transporte, que utiliza TCP/IP para la transferencia de datos. Es un protocolo SAN (Storage Area Network) que permite a los clientes (llamados inciadores), enviar comandos SCSI a dispositivos de almacenamiento (llamados targets) en servidores remotos.

Normalmente la configuración es 1 a 1 (1 server – 1 cliente). La configuración 1 server – N clientes se utiliza para sistemas de cluster o alta disponibilidad, como por ejemplo en VMWARE.

En dicho tipo de arquitectura diversos clientes comparten un espacio común de almacenamiento. En entornos de virtualización normalmente almacenamos las VM, o máquinas virtuales.

Se pueden compartir discos duros enteros o bien particiones. Cada uno de estos espacios compartiros, que los clientes ven como discos virtuales, se denominan LUN ().

Para nuestro taller contaremos con dos máquinas virtualizadas:

Servidor – target

  • Ubuntu Server 18.04. (IP:192.167.153.137/24)
  • 2 discos virtuales (uno de sistema, 30 GB y el otro para compartir via iSCSI, 10GB).

Cliente – iniciador

  • Windows 10 o Windows 7 (192.168.153.134/24)

Configuración del target

Cómo siempre actualizaremos nuestro repositorio con:

#apt update

Instalar el servicio de ISCSI Server es muy sencillo. Basta con instalar tgt:

#apt install tgt -y

El -y solo asume Yes en caso que a la hora de instalar el apt pregunte algo.

Ya tenemos el servicio instalado. Podemos y debemos comprobarlo con:

root@nft:~# service tgt status
● tgt.service - (i)SCSI target daemon
Loaded: loaded (/lib/systemd/system/tgt.service; enabled; vendor preset: enab
Active: active (running) since Wed 2020-04-22 09:22:29 CEST; 36s ago
Docs: man:tgtd(8)
Main PID: 2044 (tgtd)
Status: "Starting event loop..."
Tasks: 1
CGroup: /system.slice/tgt.service
└─2044 /usr/sbin/tgtd -f

Ahora solo queda compartir vía ISCSI lo que nos interese.  En mi caso, tengo un disco duro de 10GB sin particionar (nvme0n2). Lo voy a compartir entero.

Podemos verlo de dos maneras: con lsblk y con fdisk.  Veamos ambas:

root@nft:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sr0 11:0 1 1024M 0 rom
nvme0n1 259:0 0 30G 0 disk
└─nvme0n1p1 259:1 0 30G 0 part /
nvme0n2 259:2 0 10G 0 disk

nvme0n1 de 30 GB es el disco principal donde está instalado linux, y nvme0n2 el disco que queremos compartir. Según el entorno estos nombres pueden ser diferentes… sda, sdb, …

La misma información la podemos ver con fdisk:

root@nft:~# fdisk -l
Disco /dev/nvme0n1: 30 GiB, 32212254720 bytes, 62914560 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes
Tipo de etiqueta de disco: dos
Identificador del disco: 0xfa4413c1

Dispositivo Inicio Comienzo Final Sectores Tamaño Id Tipo
/dev/nvme0n1p1 * 2048 62912511 62910464 30G 83 Linux

Disco /dev/nvme0n2: 10 GiB, 10737418240 bytes, 20971520 sectores
Unidades: sectores de 1 * 512 = 512 bytes
Tamaño de sector (lógico/físico): 512 bytes / 512 bytes
Tamaño de E/S (mínimo/óptimo): 512 bytes / 512 bytes

Vemos el nombre del dispositivo /dev/nvme0n2 que tendremos que emplear después. Está sin particionar. Compartimos todo el disco. Luego ya en el sistema operativo destino, crearemos las particiones que nos interesen. Evidentemente se puede hace lo mismo, pero compartir una partición, y no todo el disco.

Antes de empezar con la configuración, y realmente aunque no es estrictamente necesario.. os enseño la configuración del nombre de mi máquina, y como resuelve el nombre.

Mi máquina se llama nft:

root@nft:~# cat /etc/hostname
nft

Y el própio servidor resuelve el nombre de la siguiente manera:

root@nft:~# cat /etc/hosts
127.0.0.1 localhost
127.0.0.1 nft
192.168.153.137 nft.mytcpip.loc

Es decir podemos hacer ping a nft o a nft.mytcpip.loc y resolverá. La IP del servidor es la 192.168.153.137

Bien configuremos el servicio. Para ello basta con crear el archivo de configuración con un editor de texto:

#nano iqn.2020-04.loc.mytcpip.nft.conf

El nombre realmente puede ser cualquiera. Yo por coherencia he puesto el estandard a nivel de terminología ISCSI:

iqn.AÑO-MES.NombreDelServidorAlReves.conf

El año y mes de cuando se creo el target, y el nombre del servidor al revés. MI servidor se llama nft.mytcpip.loc, pues todo invertido: loc.mytcpip.nft.  Insito que puede llamarse por ejemplo mitarget.conf si os es más sencillo.

El contenido del fichero autocomentado es el siguiente:

root@nft:/etc/tgt/conf.d# cat iqn.2020-04.loc.mytcpip.nft.conf
<target iqn.2020-04.loc.mytcpip.nft:datos>

#- backing-store Defines a logical unit (LUN) exported by the target.
# This may specify either a regular file, or a block device.
#- direct-store Defines a direct mapped logical unit (LUN) with the same
# properties as the physical device (such as VENDOR_ID, SERIAL_NUM, etc.)

direct-store /dev/nvme0n2

#Parámetro: initiator-address
#La IP del Windows que se conectará
#Eso lo ponemos por seguridad, sino
#en una red real cualquier con un servicio
#inicializador podría conectarse y liarla
#Si comentamos la línea podremos conectarnos desde
#cualquier máquina cliente
#En el ejemplo pongo la IP del cliente Windows 153.134
#y la IP de loopback 127.0.0.1 para hacer pruebas
#desde el propio servidor

initiator-address 192.168.153.134
initiator-address 127.0.0.1

</target>

Una vez creado el archivo hay que reiniciar el servicio tgt, y que no de error… evidentemente:

# service tgt restart

Si todo ha ido bien, podemos comprobar desde el propio servidor, y siempre que en initiator-address tengamos puesta la 127.0.0.1 si el target está compartido. Con la orden iscsiadm lo podemos ver:

# iscsiadm -m discovery -t st -p 127.0.0.1
127.0.0.1:3260,1 iqn.2020-04.loc.mytcpip.nft:datos

Todo está funcionando, pues solo nos queda conectarnos desde nuestro Windows. Cómo activar el Iniciador de Windows en panel de control lo dejo para el Sr. Google…  Yo simplemente lo configuro y conecto. En las propiedades del Iniciador ISCSI de Windows añado en la ficha Detección la IP del servidor ISCSI:

inicializador-windows

Si todo ha ido bien, en la ficha destino veremos el LUN compartido iqn.2020-04.loc.mytcpip.nft:datos . Bastará con darle al botón Conectar y lo tenemos listo para utilizar desde nuestro Windows:

Si todo ha ido bien, en la ficha Destinos veremos nuestro target compartido iqn.2020-04.loc.mytcpip.nft:datos. Bastará con darle al botón conectar.

No hay que activar la opción de «Habilitar multiples rutas«.

Pues ya lo tenemos todo, ahora desde el administrador de discos lo tenemos listo para ser utilizado. Lo primero será acceder al administrador de discos diskmgmt.msc y configurarlo adecuadamente. Si todo ha ido bien, al entrar en el administrador de discos por primera vez una vez configuro el Iniciador ISCSI, el sistema reconocerá el nuevo disco y pedirá el tipo de partición

 

En nuestro caso elegimos MBR dado que el disco solo es de  10 GB de tamaño. NO es el propósito del Post explicar las diferencias entre MBR o GPT, pero debéis saberlas.

Una vez elegida ya tendremos el nuevo disco duro reconocido en nuestro sistema, y listo para particionarlo, formatearlo, etc…

Lo podemos ver totalmente operativo en la siguiente imagen:

Cualquier duda puedes dejar un comentario y te responderé así me sea posible.

Y recuerda, si te ha gustado… pues eso.. dale al like, como en facebook 🙂 o Instragram para los jóvenes.

You may also like

6 comments

Eduard mayo 1, 2020 - 1:17 pm

Muy buen manual, bien explicado y detallado. Tenia problemas a la hora de hacer este proceso con el Webmin y esto me ha ayudado a resolverlo de una forma rápida y sencilla. Gracias por la aportación. 🙂

Reply
José Luis Sánchez Borque mayo 1, 2020 - 1:41 pm

Gracias Eduard,

perfecto os pueda ayudar. Recuerda por eso en entornos de producción añadir seguridad CHAP a las conexiones iscsi.

Reply
Albert abril 23, 2020 - 7:48 pm

Me ha gustado el manual, contiene todo lo necesario para instalar y configurar el iSCSI a la primera. Tenia un error que decía «el nombre de destino no se encontró …» Todo era por el nombre del target que estaba en mayúsculas, he visto que tu lo habías configurado en minúsculas y me ha funcionado al instante. Muchas gracias.

Reply
José Luis Sánchez Borque abril 23, 2020 - 10:23 pm

Hola Albert,

perfecto. Problema arreglado. La sintaxis, al igual que pasa con ciertos lenguajes de programación es muy importante.

Saludos.

Reply
Pau abril 22, 2020 - 11:21 am

Gracias Jose, me ha servido mucho

Reply
José Luis Sánchez Borque abril 22, 2020 - 11:24 am

Genial.

Una vez lo tengas puesto en marcha se puede mejorar añadiendo seguridad de usuario. La directiva que te puede ayudar con ello es:

incominguser iscsi-user password

Saludos.

Reply

Leave a Comment