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.