iSCI
¿Que es iSCSI?
iSCSI (Abreviatura de Internet SCSI) es un estándar que permite el uso del protocolo SCSI sobre redes TCP/IP. iSCSI es un protocolo de la capa de transporte definido en las especificaciones SCSI-3.
El protocolo iSCSI utiliza TCP/IP para sus transferencias de datos. Al contrario que otros protocolos de red diseñados para almacenamiento solamente requiere una simple y sencilla interfaz Ethernet para funcionar. Esto permite una solución de almacenamiento centralizada de bajo coste sin la necesidad de realizar inversiones costosas ni sufrir las habituales incompatibilidades asociadas a las soluciones de canal de fibra para Redes de área de almacenamiento.
Ejercicios a realizar
Configura un escenario con vagrant o similar que incluya varias máquinas que permita realizar la configuración de un servidor iSCSI y dos clientes (uno linux y otro windows). Explica de forma detallada en la tarea los pasos realizados.
-
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)
En mi caso vamos a usar el siguiente escenario de vagrant en el que vamos a configurar iSCSI
# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
disco = '.vagrant/midisco.vdi'
config.vm.define :maquina1 do |maquina1|
maquina1.vm.box = "debian/buster64"
maquina1.vm.hostname = "maquina1"
maquina1.vm.network :public_network, :bridge=>"wlp2s0"
maquina1.vm.network :private_network, ip: "192.168.100.100"
maquina1.vm.provider :virtualbox do |v|
v.customize ["createhd", "--filename", disco, "--size", 1024]
v.customize ["storageattach", :id, "--storagectl", "SATA Controller", "--port", 1, "--device", 0, "--type", "hdd", "--medium", disco]
end
end
config.vm.define :maquina2 do |maquina2|
maquina2.vm.box = "debian/buster64"
maquina2.vm.hostname = "maquina2"
maquina2.vm.network :private_network, ip: "192.168.100.101"
end
end
Donde tenemos dos maquinas donde maquina1 tiene una interfaz en modo puente para el exterior y un disco adicional y las dos maquinas tienen una interfaz de red con una ip privada.
Tarea 1
Para ello vamos a usar a maquina1 para empezar la configuración, lo que vamos a hacer es instalar en ella el paquete lvm2 en nuestra maquina para emepezar a crear el grupo de volumenes y mas tarde crear los volumenes logicos que necesitemos, en este caso haremos solo un volumen logico de 500MB:
#### Instalamos el paquete de lvm2 ####
vagrant@maquina1:~$ sudo apt install lvm2
#### Creamos el grupo de volumenes con el disco secundario sdb ####
vagrant@maquina1:~$ sudo pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
vagrant@maquina1:~$ sudo vgcreate grupo1 /dev/sdb
Volume group "grupo1" successfully created
#### Creamos el volumen logico ####
vagrant@maquina1:~$ sudo lvcreate -L 500M -n v_grupo1 grupo1
Logical volume "v_grupo1" created.
Ya hecho el volumen logico lo que vamos a hacer ahora es empezar la configuración del target en nuestra maquina1, por lo que debemos de instalar en ella un paquete llamado tgt:
#### Instalamos el paquete ####
vagrant@maquina1:~$ sudo apt install tgt
Una vez instalado vamos a configurar el fichero llamado /etc/tgt/targets.conf donde, como el nombre indica, tenemos que indicar los target que vamos a tener, en este caso solo vamos a tener uno que va a ser el volumen logico llamado v_grupo1:
#### Configuramos el fichero /etc/tgt/targets.conf ####
vagrant@maquina1:~$ sudo nano /etc/tgt/targets.conf
<target iqn.prueba-iSCSI.com:target1>
backing-store /dev/grupo1/v_grupo1
</target>
Una vez hecho esto debemos de reinciar el servicio tgt, y una vez hecho esto debe de haberse detectado el disco iSCSI, para comprobarlo podemos usar el siguiente comando:
#### Vemos si el disco esta en linea ####
vagrant@maquina1:~$ sudo tgtadm --lld iscsi --op show --mode target
Target 1: iqn.prueba-iSCSI.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/grupo1/v_grupo1
Backing store flags:
Account information:
ACL information:
ALL
De esta forma ya tendremos el servidor configurado y listo para que los clientes puedan usar el disco por lo que vamos a pasar a la configuracion del iniciador.
Iniciador
En la maquina2 debemos de instalar un paquete llamado open-iscsi el cual nos va a permitir usar el disco target que tenemos en la maquina1:
vagrant@maquina2:~$ sudo apt install open-iscsi
Una vez instalado el paquete vamos a configurar el fichero llamado /etc/iscsi/iscsid.conf en el cual le vamos a indicar que lea los targets de forma automatica, para ello debemos de añadir la linea siguiente:
vagrant@maquina2:~$ sudo nano /etc/iscsi/iscsid.conf
...
# To request that the iscsi initd scripts startup a session set to "automatic".
node.startup = automatic
#
# To manually startup the session set to "manual". The default is manual.
# node.startup = manual
...
Hecho esta modificación debemos de reiniciar el servicio de open-iscsi para que tenga efecto y, una vez hecho ese reinicio debemos de comprobar si el target esta hecho correctamente, para ello podemos usar el siguiente comando:
#### Reiniciamos los servicios ####
vagrant@maquina2:~$ sudo systemctl restart open-iscsi
#### Comprobamos los targets ####
vagrant@maquina2:~$ sudo iscsiadm -m discovery -t st -p 192.168.100.100
192.168.100.100:3260,1 iqn.prueba-iSCSI.com:target1
Como vemos ya nos esta inidicando el target que tenemos en la dirección ip que le hemos indicado, que es la ip de maquina1 y nos indica el disco que tenemos en target. Ahora vamos a proceder a conectarnos a este target, para ello debemos de usar el siguiente comando para poder conectarnos a ese target:
#### Nos conectamos al target que le indicamos junto a la ip de la maquina ####
vagrant@maquina2:~$ sudo iscsiadm -m node -T iqn.prueba-iSCSI.com:target1 --portal "192.168.100.100" --login
Logging in to [iface: default, target: iqn.prueba-iSCSI.com:target1, portal: 192.168.100.100,3260] (multiple)
Login to [iface: default, target: iqn.prueba-iSCSI.com:target1, portal: 192.168.100.100,3260] successful.
#### Usamos lsblk para ver que tenemos ese target en nuestra maquina ####
vagrant@maquina2:~$ lsblk
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
Como vemos ya tenemos el target de 500MB en nuestra maquina, por lo que vamos a proceder a formatearlo con un sistema de fichero ext4 y lo vamos a montar en nuestra maquina, por lo que vamos a seguir los siguiente pasos:
#### Usamos gdisk para particionarlo ####
vagrant@maquina2:~$ sudo gdisk /dev/sdb
GPT fdisk (gdisk) version 1.0.3
Partition table scan:
MBR: not present
BSD: not present
APM: not present
GPT: not present
Creating new GPT entries.
Command (? for help): n
Partition number (1-128, default 1):
First sector (34-1023966, default = 2048) or {+-}size{KMGTP}:
Last sector (2048-1023966, default = 1023966) or {+-}size{KMGTP}:
Current type is 'Linux filesystem'
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): w
Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!
Do you want to proceed? (Y/N): y
OK; writing new GUID partition table (GPT) to /dev/sdb.
The operation has completed successfully.
#### Lo formateamos en ext4 ####
vagrant@maquina2:~$ sudo mkfs.ext4 /dev/sdb1
mke2fs 1.44.5 (15-Dec-2018)
Creating filesystem with 510956 1k blocks and 128016 inodes
Filesystem UUID: e296c077-5886-436f-97c2-b27077ac08fb
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
#### Lo montamos en /mnt ####
vagrant@maquina2:~$ sudo mount /dev/sdb1 /mnt/
vagrant@maquina2:~$ lsblk
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
Tarea 2
Utiliza systemd mount para que el target se monte automáticamente al arrancar el cliente.
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.
Para ello debemos de irnos a la maquina1 para configurar el fichero /etc/tgt/targets.conf y debemos de añadir la siguiente linea:
#### Modificamos el fichero /etc/tgt/targets.conf ####
vagrant@maquina1:~$ sudo nano /etc/tgt/targets.conf
#### Reiniciamos el servicio tgt ####
vagrant@maquina1:~$ sudo systemctl restart tgt
Una vez tengamos esta configuración debemos de irnos a la maquina2 y ahi debemos de crear una nueva unidad de systemd en la que le vamos a indicar que se monte el target de forma automatica, para ello debemos de crear la siguiente unidad:
#### Creamos la unidad de systemd ####
vagrant@maquina2:~$ sudo nano /etc/systemd/system/prueba-sSCSI.mount
[Unit]
Description=Montaje
[Mount]
What=/dev/sdb1
Where=/mnt
Type=ext4
option=_netdev
[Install]
WantedBy=multi-user.target
#### Creamos la unidad de automount de systemd ####
vagrant@maquina2:~$ sudo nano /etc/systemd/system/mnt.automount
[Unit]
Description=Automount
[Automount]
Where=/mnt
[Install]
WantedBy=multi-user.target
#### Reiniciamos los servicios ####
vagrant@maquina2:~$ sudo systemctl daemon-reload
fstab
Tambien podemos añadir la unidad al fichero de fstab en el que indicamos que unidades se van a montar en el arranque del sistema indicando el UUID del volumen, el punto de montaje, el tipo de formato y las opciones.
Asi, si queremos hacerlo por esta via solo debemos de añadir la siguiente linea a nuestro fichero /etc/fstab:
#### Buscamos el uuid de nuestro volumen ####
vagrant@maquina2:~$ lsblk -f | grep sdb1
└─sdb1 ext4 e296c077-5886-436f-97c2-b27077ac08fb
#### Añadimos la siguiente linea a nuestro fichero fstab ####
...
UUID=e296c077-5886-436f-97c2-b27077ac08fb /mnt ext4 _netdev 0 0
...
Ahora que tenemos la linea añadida debemos de comprobar si se monta correctamente, en este caso lo mejor no es reiniciar y ver si se monta ya que eso podria dar un problema y hacer que la maquina no inicie correctamente por lo que debemos de hacer usar el comando mount de la siguiente manera:
#### Comprobamos que no esta montado ####
vagrant@maquina2:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 19.8G 0 disk
...
sdb 8:16 0 500M 0 disk
└─sdb1 8:17 0 499M 0 part
#### Usamos mount para montar todos los volumenes del fichero fstab ####
vagrant@maquina2:~$ sudo mount -a
#### Comprobamos que se haya montado correctamente ####
vagrant@maquina2:~$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 19.8G 0 disk
...
sdb 8:16 0 500M 0 disk
└─sdb1 8:17 0 499M 0 part /mnt