====== Introducción a iSCSI ======
iSCSI es un protocolo que permite ejecutar comandos SCSI a través de
la red. Es decir, controlar un dispositivo SCSI a través de un cable
Ethernet en vez de a través de su conexión de toda la vida. Esto
permite controlar dispositivos SCSI remotos, en otras máquinas
A esto se le llama "Storage Area Network" o SAN. No estás compartiendo
un sistema de ficheros (como NFS o Samba, a eso se le llama "NAS"),
estás compartiendo el dispositivo directamente. Sin ningún tipo de
filesystem. Ya que se supone que eso lo creas el cliente
===== Para que sirve iSCSI? =====
Para darle almacenamiento a otros ordenadores. Por ejemplo, podrías
tener un "disco duro" privado en tu servidor solo para tu
ordenador. Ya que iSCSI soporta autenticación que puedes "enchufar"
usando iSCSI. También puedes usar volumenes iSCSI para instalar
sistemas operativos y [[:red:arranque_iscsi|arrancarlos en máquinas físicas o virtuales]]
y tener ordenadores funcionales sin necesidad de que tengan un disco
duro.
====== Crear un volumen iSCSI (target) ======
Usando zfs, se puede crear un zvol para crear un dispositivo de
bloques (algo parecido a lo que harías usando ''qemu-img'') para esto
se usa la flag ''-V'' del comando ''zfs-create'' con el tamaño deseado
''zfs create -V 50G stranger/iscsi/debian2''
Y esto nos crearia un dispositivo de bloques en
/dev/zvol/stranger/iscsi/debian2 que podremos exportar usando la
utilidad ''ctld'' de FreeBSD. He aquí un ejemplo de configuración
bastante sencillo que no tiene soporte para autenticación ni nada (así
que asegurate de no sacarlo de tu LAN...)
# No poner ningún tipo de autenticación
portal-group example2 {
discovery-auth-group no-authentication
listen 0.0.0.0
}
# El volumenm iSCSI de Debian
target iqn.2025-03.net.suragu:target0 {
alias "Testing target"
auth-group no-authentication
portal-group example2
lun 0 {
path /dev/zvol/stranger/iscsi/debian2
blocksize 4096
size 50G
}
}
''service ctld enable && service ctld start'' y ya podremos acceder a
nuestras volumenes iSCSI desde dentro de la RAM. Y ya podremos
conectarnos a ellos a través de clientes.
====== El cliente (initiator) ======
En FreeBSD usaríamos el comando iscsictl con la dirección IP del host,
en mi caso 192.168.1.230
''doas iscsictl -A -p 192.168.1.230 -t iqn.2025-03.net.suragu:target0''
Y podemos ver que ha funcionado pues tengo un nuevo dispositivo SCSI
en da0 con particiones y todo (ya tenía Debian instalado aquí)
~ [qmdx] % lsblk
DEVICE MAJ:MIN SIZE TYPE LABEL MOUNT
ada0 0:96 466G GPT - -
ada0p1 0:97 260M efi gpt/efiboot0 /boot/efi
ada0p2 0:98 512K freebsd-boot gpt/gptboot0 -
-:- 492K - - -
ada0p3 0:99 2.0G freebsd-swap gpt/freebsd-swap SWAP
ada0p4 0:100 464G freebsd-zfs gpt/freebsd-zfs
-:- 4.0K - - -
da0 1:203 50G GPT - -
-:- 1.0M - - -
da0p2 1:205 2.8G efi gpt/efi -
da0p1 1:204 47G linux-data gpt/linux-data -
-:- 1.0M - - -
Podemos crear una tabla de particiones, formatear particiones, montar
un RAID, lo que queramos. Pero cuando acabemos de usarlo, acabar la
sesión con el mismo comando pero con la flag -R en vez de la flag
-A. Para acabar la sesión en lugar de iniciarla.
====== En Linux ======
Para hacerlo en Linux, se necesita el programa ''open-iscsi'' que está
en la mayoría de repos. Se debe iniciar el servicio (''systemctl
enable --now open-iscsi'' si tienes systemd) y a partir de ahi puedes
usar ''iscsiadm -m node -T TARGET_NAME -p PORTAL_IP_ADDRESS --login'' para
loggearte en la target iSCSI. Para deslogearte usas ''--logout'' en
vez de ''--login''
¡Felicidades por crear tu target iSCSI!
{{:smile.png?200|Estrellita Pascuera }}
====== Detalles ======
Recordemos que realmente lo que estás haciendo es enviar comandos
SCSI a través de red. Como si el dispositivo estuviese conectado a tu
ordenador a través de un cable ethernet mas que por un cable
raro. Sigues teniendo las limitaciones de SCSI. Por lo cual no puedes
enchufar la misma target a distintos dispositivos y esperar que
funcione correctamente. Ya que conectar una target a dos dispositivos
distintos sería como conectar el mismo disco duro a dos ordenadores
distintos a la vez. No tiene sentido.
====== Enlaces de interés ======
- https://es.wikipedia.org/wiki/iSCSI
- https://ipxe.org