Cómo configurar un servidor de almacenamiento iSCSI en Ubuntu 20.04 LTS

iSCSI significa Internet Small Computer System Interface y es un protocolo de Red de Área de Almacenamiento que puede utilizarse para compartir dispositivos de bloque como particiones HDD/SSD, o particiones LVM, o archivos de bloque en la red. iSCSI funciona en un modelo cliente-servidor y se basa en redes TCP/IP para enviar comandos SCSI entre el cliente iniciador y el objetivo. iSCSI Target es un servicio en el servidor iSCSI que proporciona acceso al almacenamiento compartido y iSCSI Initiator es un cliente iSCSI que se conecta al objetivo y accede al almacenamiento compartido.

En este tutorial, explicaremos cómo configurar los objetivos iSCSI y el iniciador iSCSI en el servidor Ubuntu 20.04.

Requisitos

  • Un sistema que ejecute Ubuntu 20.04 para el objetivo iSCSI con un disco duro externo de 1 GB.
  • Un sistema que ejecute Ubuntu 20.04 fresco para el iniciador iSCSI.
  • Se ha configurado una dirección IP estática 192.168.1.10 en el objetivo iSCSI y 192.168.1.20 en el iniciador iSCSI.
  • Se ha configurado una contraseña de root en ambos servidores.

Actualizar el sistema

Antes de empezar, es conveniente actualizar el sistema con los últimos paquetes. Puedes actualizarlos con el siguiente comando:

apt-get update -y
apt-get upgrade -y

Una vez actualizados todos los paquetes, reinicia tu sistema para aplicar los cambios.

Instalar el objetivo iSCSI

Por defecto, el paquete iSCSI Target está disponible en el repositorio por defecto de Ubuntu 20.04. Puedes instalarlo ejecutando el siguiente comando en el servidor iSCSI Target:

apt-get install tgt -y

Después de instalar iSCSI Target, verifica el estado del servidor con el siguiente comando:

systemctl status tgt

Deberías obtener la siguiente salida:

? tgt.service - (i)SCSI target daemon
     Loaded: loaded (/lib/systemd/system/tgt.service; enabled; vendor preset: enabled)
     Active: active (running) since Sat 2020-07-11 07:13:04 UTC; 23s ago
       Docs: man:tgtd(8)
   Main PID: 7770 (tgtd)
     Status: "Starting event loop..."
      Tasks: 1
     Memory: 1.1M
     CGroup: /system.slice/tgt.service
             ??7770 /usr/sbin/tgtd -f

Jul 11 07:13:04 ubuntu2004 systemd[1]: Starting (i)SCSI target daemon...
Jul 11 07:13:04 ubuntu2004 tgtd[7770]: tgtd: iser_ib_init(3431) Failed to initialize RDMA; load kernel modules?
Jul 11 07:13:04 ubuntu2004 tgtd[7770]: tgtd: work_timer_start(146) use timer_fd based scheduler
Jul 11 07:13:04 ubuntu2004 tgtd[7770]: tgtd: bs_init(387) use signalfd notification
Jul 11 07:13:04 ubuntu2004 systemd[1]: Started (i)SCSI target daemon.

En este punto, iSCSI Target está instalado en tu servidor, ahora puedes pasar al siguiente paso.

Configurar el objetivo iSCSI

En primer lugar, tendrás que crear un dispositivo LUN (Logical Unit Number) en tu servidor iSCSI. El LUN es un dispositivo de almacenamiento de fondo que forma parte de un dispositivo SCSI físico. Todos los LUN asignados al objetivo iSCSI están virtualmente unidos al sistema operativo del cliente. Por tanto, los Iniciadores pueden establecer y gestionar sistemas de archivos en LUNs iSCSI.

Puedes configurarlo creando un nuevo archivo de configuración:

nano /etc/tgt/conf.d/iscsi.conf

Añade las siguientes líneas:

<target iqn.2020-07.example.com:lun1>
     backing-store /dev/sdb
     initiator-address 192.168.1.20
    incominguser iscsi-user password
     outgoinguser iscsi-target secretpass
</target>

Guarda y cierra el archivo cuando hayas terminado.

Donde:

  • La primera línea define el nombre del LUN.
  • La segunda línea define la ubicación y el nombre del dispositivo de almacenamiento en el servidor iSCSI Target.
  • La tercera línea define la dirección IP del iniciador iSCSI.
  • La cuarta línea define el nombre de usuario/contraseña de entrada.
  • La quinta línea define el nombre de usuario/contraseña que el objetivo proporcionará al iniciador para que se produzca la autenticación mutua CHAP.

A continuación, reinicia el servicio iSCSI para aplicar los cambios:

systemctl restart tgt

A continuación, verifica el servidor iSCSI Target con el siguiente comando:

tgtadm --mode target --op show

Deberías obtener la siguiente salida:

Target 1: iqn.2020-07.example.com:lun1
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00010000
            SCSI SN: beaf10
            Size: 0 MB, Block size: 1
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            SWP: No
            Thin-provisioning: No
            Backing store type: null
            Backing store path: None
            Backing store flags: 
    Account information:
        iscsi-user
        iscsi-target (outgoing)
    ACL information:
        192.168.1.10

En este punto, el servidor objetivo iSCSI está instalado y configurado. Ahora puedes pasar al siguiente paso.

Instalar y configurar el iniciador iSCSI

A continuación, ve a la máquina del iniciador iSCSI e instala el paquete del iniciador iSCSI con el siguiente comando:

apt-get install open-iscsi -y

Una vez finalizada la instalación, descubre el servidor de destino iSCSI para averiguar los objetivos compartidos mediante el siguiente comando:

iscsiadm -m discovery -t st -p 192.168.1.10

Deberías ver la siguiente salida:

192.168.1.10:3260,1 iqn.2020-07.example.com:lun1

A continuación, deberás definir el nombre del dispositivo LUN en el archivo initiatorname.iscsi:

nano /etc/iscsi/initiatorname.iscsi

Añade el nombre de tu LUN iSCSI Target como se muestra a continuación:

InitiatorName=iqn.2020-07.example.com:lun1

Guarda y cierra el archivo cuando hayas terminado.

A continuación, tendrás que definir la información CHAP que has configurado en el objetivo iSCSI para acceder al objetivo iSCSI desde el iniciador iSCSI. El archivo de configuración del nodo existirá en el directorio ‘/etc/iscsi/nodes/’ y tendrá un directorio por LUN disponible.

Puedes definirlo editando el siguiente archivo:

nano /etc/iscsi/nodes/iqn.2020-07.example.com\:lun1/192.168.1.10\,3260\,1/default

Añade / Modifica las siguientes líneas:

node.session.auth.authmethod = CHAP  
node.session.auth.username = iscsi-user
node.session.auth.password = password          
node.session.auth.username_in = iscsi-target
node.session.auth.password_in = secretpass         
node.startup = automatic

Guarda y cierra el archivo y luego reinicia el servicio del iniciador iSCSI con el siguiente comando:

systemctl restart open-iscsi iscsid

También puedes verificar el estado del servicio con el siguiente comando:

systemctl status open-iscsi

Deberías obtener la siguiente salida:

? open-iscsi.service - Login to default iSCSI targets
     Loaded: loaded (/lib/systemd/system/open-iscsi.service; enabled; vendor preset: enabled)
     Active: active (exited) since Sat 2020-07-11 07:24:19 UTC; 10s ago
       Docs: man:iscsiadm(8)
             man:iscsid(8)
    Process: 3861 ExecStart=/sbin/iscsiadm -m node --loginall=automatic (code=exited, status=0/SUCCESS)
    Process: 3867 ExecStart=/lib/open-iscsi/activate-storage.sh (code=exited, status=0/SUCCESS)
   Main PID: 3867 (code=exited, status=0/SUCCESS)

Jul 11 07:24:19 initiator systemd[1]: Starting Login to default iSCSI targets...
Jul 11 07:24:19 initiator iscsiadm[3861]: Logging in to [iface: default, target: iqn.2020-07.example.com:lun1, portal: 104.245.33.142,3260] (m>
Jul 11 07:24:19 initiator iscsiadm[3861]: Login to [iface: default, target: iqn.2020-07.example.com:lun1, portal: 104.245.33.142,3260] success>
Jul 11 07:24:19 initiator systemd[1]: Finished Login to default iSCSI targets.

También puedes verificar la conexión iSCSI con el siguiente comando

iscsiadm -m session -o show

Deberías obtener la siguiente salida:

tcp: [2] 192.168.1.10:3260,1 iqn.2020-07.example.com:lun1 (non-flash)

También puedes verificar el dispositivo de almacenamiento compartido del objetivo iSCSI con el siguiente comando

lsblk

Deberías ver el dispositivo compartido sdb en la siguiente salida:

NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   80G  0 disk 
??sda1   8:1    0   80G  0 part /
sdb      8:16   0 1000M  0 disk

Crear un sistema de archivos en el dispositivo compartido

Para utilizar el dispositivo compartido en el iniciador iSCSI, tendrás que crear un sistema de archivos en el dispositivo compartido (sdb) y montarlo para que este dispositivo sea útil.

En primer lugar, crea un sistema de archivos en el dispositivo compartido (sdb) con el siguiente comando:

fdisk /dev/sdb

Responde a todas las preguntas como se muestra a continuación para crear un sistema de archivos:

Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x9743ddcf.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): 

Using default response p.
Partition number (1-4, default 1): 
First sector (2048-2047999, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-2047999, default 2047999): 

Created a new partition 1 of type 'Linux' and of size 999 MiB.

Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.

A continuación, formatea la partición con el siguiente comando:

mkfs.ext4 /dev/sdb1

Deberías obtener la siguiente salida:

mke2fs 1.45.5 (07-Jan-2020)
Creating filesystem with 255744 4k blocks and 64000 inodes
Filesystem UUID: e7f06605-a0f5-41e1-b1b2-e85bd7a2d6a3
Superblock backups stored on blocks: 
	32768, 98304, 163840, 229376

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done

A continuación, monta la partición en el directorio /mnt con el siguiente comando:

mount /dev/sdb1 /mnt

Ahora puedes verificar la partición montada con el siguiente comando:

df -h

Deberías obtener el siguiente resultado:

Filesystem      Size  Used Avail Use% Mounted on
udev            981M     0  981M   0% /dev
tmpfs           199M  588K  199M   1% /run
/dev/sda1        79G  1.8G   74G   3% /
tmpfs           994M     0  994M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           994M     0  994M   0% /sys/fs/cgroup
tmpfs           199M     0  199M   0% /run/user/0
/dev/sdb1       968M  2.5M  899M   1% /mnt

Conclusión

En la guía anterior, has aprendido a configurar el objetivo y el iniciador iSCSI en el servidor Ubuntu 20.04. También has aprendido a compartir un dispositivo en el servidor objetivo y a acceder a él desde el iniciador. No dudes en preguntarme si tienes alguna duda.

También te podría gustar...