esto es la suraguwiki el contenido, como puedes ver, deja mucho que desear para comentarios sobre los cosos aquí, puedes mandar un correo a diego arroba suragu punto net

Si eres un putísimo crack y quieres contribuir a esta wiki, pídeme una cuenta en el mismo correo de arriba

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 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…)

/etc/ctl.conf
# 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 -
  <FREE>         -:-   492K -                                           - -
  ada0p3         0:99  2.0G freebsd-swap                 gpt/freebsd-swap SWAP
  ada0p4         0:100 464G freebsd-zfs                   gpt/freebsd-zfs <ZFS>
  <FREE>         -:-   4.0K -                                           - -
da0              1:203 50G GPT                                         - -
  <FREE>         -:-   1.0M -                                           - -
  da0p2          1:205 2.8G efi                                   gpt/efi -
  da0p1          1:204  47G linux-data                     gpt/linux-data -
  <FREE>         -:-   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!

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


QR Code
QR Code red:iscsi (generated for current page)