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.

Contenido

Gestión de Almacenamiento

Servidor de correos en los servidores cloud