Posts iSCSI
Post
Cancel

iSCSI

Configura un sistema que exporte algunos targets por iSCSI y los conecte a diversos clientes, explicando con detalle la forma de trabajar.

  • Crea un target con una LUN y conéctala a un cliente GNU/Linux. Explica cómo escaneas desde el cliente buscando los targets disponibles y utiliza la unidad lógica proporcionada, formateándola si es necesario y montándola.
  • Utiliza systemd mount para que el target se monte automáticamente al arrancar el cliente.
  • Crea un target con 2 LUN y autenticación por CHAP y conéctala a un cliente windows. Explica cómo se escanea la red en windows y cómo se utilizan las unidades nuevas (formateándolas con NTFS).

¿Qué es iSCSI?

iSCSI es un protocolo de almacenamiento de red basado en IP y ampliamente utilizado en soluciones empresariales.

Permite enviar y recibir comandos SCSI a través de una red IP, dejándonos usar y administrar dispositivos de almacenamiento en LAN, WAN e Internet.

El target es el servidor y puede ofrecer uno o más recursos iSCSI por la red.

El iniciador es el cliente de iSCSI.

La estructura sería así:

Configuración de targets

Vamos a instalar el siguiente paquete para definir los discos que hemos creado en un solo disco.

1
root@nodo1:~# apt install lvm2

Vamos a crear un grupo de volumenes.

1
2
3
4
5
root@nodo1:~# sudo pvcreate /dev/sdb
  Physical volume "/dev/sdb" successfully created.
  
root@nodo1:~# sudo vgcreate vg1 /dev/sdb
  Volume group "vg1" successfully created

Creación del volumen lógico:

Este volumen lógico tendrá el sistema de ficheros.

1
2
root@nodo1:~# sudo lvcreate -L 500M -n vlog1 vg1
  Logical volume "vlog1" created.

Vamos a empezar a configurar el target, ya que hemos creado el volumen lógico.

1
vagrant@nodo1:~$ sudo apt install tgt

Vamos a crear el primer target. Para crearlos de forma automatica tendremos que poner el disco asociado en el siguiete directorio:

1
2
3
4
5
vagrant@nodo1:~$ sudo nano /etc/tgt/targets.conf 

<target iqn.2020-02.com:target1> 
    backing-store /dev/vg1/vlog1
</target>

Reiniciamos los servicios, el disco iSCSI debería ser detectado automáticamente y conectado al equipo.

1
vagrant@nodo1:~$ sudo systemctl restart tgt

Podemos ver los targets que tenemos definidos de la siguiente forma:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
vagrant@nodo1:~$ sudo tgtadm --lld iscsi --op show --mode target

Target 1: iqn.2020-02.com:target1
    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: 
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 524 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            SWP: No
            Thin-provisioning: No
            Backing store type: rdwr
            Backing store path: /dev/vg1/vlog1
            Backing store flags: 
    Account information:
    ACL information:
        ALL

Ya tendriamos configurado el servidor, ahora toca configurar el iniciador.

Configuración del iniciador

Vamos a instalar en la máquina cliente open-iscsi:

1
vagrant@nodo2:~$ sudo apt install open-iscsi

A continuación vamos a configurar para que pueda leer los target de forma automática.

1
2
3
vagrant@nodo2:~$ sudo nano /etc/iscsi/iscsid.conf

iscsid.startup = automatic

Reiniciamos los servicios:

1
root@nodo2:~# systemctl restart open-iscsi 

Con el siguiente comando podemos ver el target desde el cliente.

1
2
vagrant@nodo2:~$ sudo iscsiadm -m discovery -t st -p 192.168.100.1
192.168.100.1:3260,1 iqn.2020-02.com:target1

Una vez que tenemos accesible el target desde el cliente solamente queda conectarnos a él.

Lo vamos a realizar de la siguiente forma:

1
2
3
vagrant@nodo2:~$ sudo iscsiadm -m node -T iqn.2020-02.com:target1 --portal "192.168.100.1" --login
Logging in to [iface: default, target: iqn.2020-02.com:target1, portal: 192.168.100.1,3260] (multiple)
Login to [iface: default, target: iqn.2020-02.com:target1, portal: 192.168.100.1,3260] successful.

Como podemos ver a continuación, al asociar el target desde el cliente se ha creado un nuevo disco, siendo este el mismo del servidor.

Vamos a formatearla, para ello vamos a usar fdisk.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
vagrant@nodo2:~$ sudo fdisk /dev/sdb

Welcome to fdisk (util-linux 2.33.1).
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 0x6219836d.

Command (m for help): n
Partition type
   p   primary (0 primary, 0 extended, 4 free)
   e   extended (container for logical partitions)
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-1023999, default 2048): 
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-1023999, default 1023999): 

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

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

Formateamos la partición:

1
2
3
4
5
6
7
8
9
10
11
12
vagrant@nodo2:~$ sudo mkfs.ext4 /dev/sdb1

mke2fs 1.44.5 (15-Dec-2018)
Creating filesystem with 510976 1k blocks and 128016 inodes
Filesystem UUID: 512532cd-1fad-47f4-b6e4-fba1c428c81c
Superblock backups stored on blocks: 
	8193, 24577, 40961, 57345, 73729, 204801, 221185, 401409

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

Por último la vamos a montar:

1
vagrant@nodo2:~$ sudo mount /dev/sdb1 /mnt

Como podemos ver, se ha creado correctamente la particion, formateado y montado.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
vagrant@nodo2:~$ lsblk -l
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda    8:0    0 19.8G  0 disk 
sda1   8:1    0 18.8G  0 part /
sda2   8:2    0    1K  0 part 
sda5   8:5    0 1021M  0 part [SWAP]
sdb    8:16   0  500M  0 disk 
sdb1   8:17   0  499M  0 part /mnt

vagrant@nodo2:~$ lsblk -f
NAME   FSTYPE LABEL UUID                                 FSAVAIL FSUSE% MOUNTPOINT
sda                                                                     
├─sda1 ext4         b9ffc3d1-86b2-4a2c-a8be-f2b2f4aa4cb5   16.1G     7% /
├─sda2                                                                  
└─sda5 swap         f8f6d279-1b63-4310-a668-cb468c9091d8                [SWAP]
sdb                                                                     
└─sdb1 ext4         512532cd-1fad-47f4-b6e4-fba1c428c81c    444M     0% /mnt

Automontaje del target

En esta parte de la práctica vamos a ver como es la configuración para que se monte automáticamente el target al arrancar el cliente utilizando systemd mount

Tenemos que cambiar el fichero de configuración de iscsid.conf

1
2
3
vagrant@nodo1:~$ sudo nano /etc/tgt/targets.conf 

node.startup = automatic

Vamos a crear la unidad de systemd:

1
2
3
4
5
6
7
8
9
10
11
12
13
vagrant@nodo2:/etc/systemd/system$ sudo nano discoprueba.mount

[Unit]
Description=montaje del disco de prueba iscsi

[Mount]
What=/dev/sdb1
Where=/discoprueba
Type=ext4
Options=_netdev

[Install]
WantedBy=multi-user.target

Reiniciamos los servicios y a continuación vamos a iniciar la unidad que acabamos de crear.

1
2
3
4
5
6
vagrant@nodo2:/etc/systemd/system$ sudo systemctl daemon-reload 

vagrant@nodo2:/etc/systemd/system$ sudo systemctl start discoprueba.mount 

vagrant@nodo2:/etc/systemd/system$ sudo systemctl enable discoprueba.mount 
Created symlink /etc/systemd/system/multi-user.target.wants/discoprueba.mount → /etc/systemd/system/discoprueba.mount.

Vamos a comprobar si despues de un reinicio se automonta el disco.

Vamos a ver la siguiente salida:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
vagrant@nodo2:/etc/systemd/system$ lsblk -l
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda    8:0    0 19.8G  0 disk 
sda1   8:1    0 18.8G  0 part /
sda2   8:2    0    1K  0 part 
sda5   8:5    0 1021M  0 part [SWAP]
sdb    8:16   0  500M  0 disk 
sdb1   8:17   0  499M  0 part /discoprueba

vagrant@nodo2:/etc/systemd/system$ sudo reboot
Connection to 127.0.0.1 closed by remote host.
Connection to 127.0.0.1 closed.

ernesto@honda:~/Documentos/vagrant/iscsiprueba$ vagrant ssh nodo2
Linux nodo2 4.19.0-6-amd64 #1 SMP Debian 4.19.67-2+deb10u2 (2019-11-11) x86_64

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright.

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue Feb  4 10:04:59 2020 from 10.0.2.2

vagrant@nodo2:~$ lsblk -l
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda    8:0    0 19.8G  0 disk 
sda1   8:1    0 18.8G  0 part /
sda2   8:2    0    1K  0 part 
sda5   8:5    0 1021M  0 part [SWAP]
sdb    8:16   0  500M  0 disk 
sdb1   8:17   0  499M  0 part /discoprueba
vagrant@nodo2:~$ 

Como podemos observar se ha montado correctamente y de forma automática.

Creación de un target con 2 LUN y autenticación por CHAP

Vamos a empezar con esta configuración, primero necesitaremos crear los volumenes lógicos.

1
2
3
vagrant@nodo1:~$ sudo pvcreate /dev/sdc /dev/sdd
  Physical volume "/dev/sdc" successfully created.
  Physical volume "/dev/sdd" successfully created.
1
2
vagrant@nodo1:~$ sudo vgcreate vg2 /dev/sdc /dev/sdd
  Volume group "vg2" successfully created
1
2
3
4
vagrant@nodo1:~$ sudo lvcreate -L 500M -n vlog2 vg2
  Logical volume "vlog2" created.
vagrant@nodo1:~$ sudo lvcreate -L 500M -n vlog3 vg2
  Logical volume "vlog3" created.

Vamos a crear el nuevo target:

1
2
3
4
5
6
7
vagrant@nodo1:~$ sudo nano /etc/tgt/targets.conf 

<target iqn.2020-02.com:target2>
    backing-store /dev/vg2/vlog2
    backing-store /dev/vg2/vlog3
    incominguser usuario1 ernestoprueba123
</target>

Reiniciamos y vemos la salida

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
vagrant@nodo1:~$ sudo tgtadm --lld iscsi --op show --mode target
Target 1: iqn.2020-02.com:target1
    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: 
        LUN: 1
            Type: disk
            SCSI ID: IET     00010001
            SCSI SN: beaf11
            Size: 524 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            SWP: No
            Thin-provisioning: No
            Backing store type: rdwr
            Backing store path: /dev/vg1/vlog1
            Backing store flags: 
    Account information:
    ACL information:
        ALL
Target 2: iqn.2020-02.com:target2
    System information:
        Driver: iscsi
        State: ready
    I_T nexus information:
    LUN information:
        LUN: 0
            Type: controller
            SCSI ID: IET     00020000
            SCSI SN: beaf20
            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: 
        LUN: 1
            Type: disk
            SCSI ID: IET     00020001
            SCSI SN: beaf21
            Size: 524 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            SWP: No
            Thin-provisioning: No
            Backing store type: rdwr
            Backing store path: /dev/vg2/vlog2
            Backing store flags: 
        LUN: 2
            Type: disk
            SCSI ID: IET     00020002
            SCSI SN: beaf22
            Size: 524 MB, Block size: 512
            Online: Yes
            Removable media: No
            Prevent removal: No
            Readonly: No
            SWP: No
            Thin-provisioning: No
            Backing store type: rdwr
            Backing store path: /dev/vg2/vlog3
            Backing store flags: 
    Account information:
        usuario1
    ACL information:
        ALL

Ahora vamos al cliente Windows: Lo primero que tenemos que hacer es entrar en la configuración de iSCSI.

A continuación le damos a Detectar portal y se abrirá una nueva ventana donde vamos a colocar la Dirección IP que aloja los iSCSI Target y, a continuación, hacemos clic en Aceptar.

Una vez hemos aceptado la previa configuración ya tendremos añadido el portal de donde cogerá los targets.

Si nos vamos a la pestaña de Destinos podemos ver los targets que tenemos disponibles.

Pero como vemos, los targets estan inactivos, vamos a activarlo: Le damos a Conectar, en la nueva ventana abierta le tenemos que dar a Opciones Avanzadas para configurar el inicio de sesión CHAP.

Aquí vamos a marcar la opción de “Habilitar inicio de sesión CHAP”, vamos a colocar el usuario y la contraseña que hemos configurado en el target previamente.

A continuación le damos a Aceptar y ya saldrá el target como Conectado.

Como vemos ha reconocido los discos del target.

Ahora le damos a Inicializar disco

Un mensaje emergente nos indicará que inicie la unidad virtual añadida recientemente. Seleccionamos el estilo de partición MBR para el disco y luego hacemos clic en OK.

Ahora vamos a formatear y configurar el nuevo volumen:

Después de conectar un iSCSI Target en un equipo Windows, tiene que formatearse para poder usarlo.

  • Disco 1:

  • Disco 2:

Ya hemos terminado ahora vamos a comprobar

Como se puede observar, se ha creado y montados correctamente.

Para comprobar que estos discos se pueden usar perfectamente con un uso habitual, voy a crear un fichero dentro.

Referencia: Documentación de Amazon Web Services

Conclusión

En esta práctica he aprendido muchas cosas que antes no tenia muchos conocimientos, el uso de iSCSI me parece muy interesante y útil.

Permite enlazar instalaciones de almacenamientos de datos en red, esto facilita las transferencias de datos. Todos los datos transferidos al disco se transfieren a través de la red al servidor de almacenamiento.

Por lo que he leido y documentado, se puede hacer muchas más cosas, sería interesante profundizar en esta tecnología.

This post is licensed under CC BY 4.0 by the author.