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.