iSCSI en TrueNAS: Guía Completa de Configuración y Gestión
Introducción
El iSCSI (Internet Small Computer System Interface) es un protocolo que permite el acceso remoto a bloques de almacenamiento a través de una red IP estándar. En el contexto de infraestructura de TI, especialmente en entornos de virtualización como Proxmox y VMware, iSCSI ofrece una solución eficiente y escalable para la presentación de almacenamiento.
El TrueNAS, plataforma open-source basada en FreeBSD y ZFS, es una excelente opción para implementar un servidor iSCSI corporativo. En este artículo, exploramos cómo configurar y gestionar conexiones iSCSI de forma robusta y segura.
¿Qué es iSCSI y por qué usarlo?
Funcionamiento básico
iSCSI encapsula comandos SCSI (Small Computer System Interface) en paquetes TCP/IP, permitiendo que:
-
Servidores remotos accedan al almacenamiento como si estuviera conectado localmente
-
Múltiples iniciadores (clientes) se conecten a un único objetivo (target)
-
Redes estándar se utilicen para el tráfico de almacenamiento (a diferencia de Fibre Channel)
Ventajas para la infraestructura B2B
Arquitectura: Cliente-Servidor iSCSI
┌─────────────────────────────────────────────┐
│ Rede IP (Ethernet) │
├─────────────────────────────────────────────┤
│ │
│ ┌──────────────┐ ┌──────────────┐ │
│ │ Initiator 1 │ │ Initiator 2 │ │
│ │ (Proxmox) │◄────►│ (Linux Host) │ │
│ └──────────────┘ └──────────────┘ │
│ │ │ │
│ └─────────┬───────────┘ │
│ │ (iSCSI Protocol) │
│ ▼ │
│ ┌──────────────────┐ │
│ │ Target Portal │ │
│ │ (TrueNAS 0.95) │ │
│ │ - Portal Group │ │
│ │ - Target Name │ │
│ │ - LUN (extent) │ │
│ └──────────────────┘ │
│ │ │
│ ┌─────────▼──────────┐ │
│ │ ZFS Dataset │ │
│ │ Storage Pool │ │
│ └────────────────────┘ │
└─────────────────────────────────────────────┘
Paso a Paso: Configurando iSCSI en TrueNAS
Prerrequisitos
-
TrueNAS instalado y accesible vía red (ej:
192.168.0.95) -
Pool de almacenamiento ya creado con espacio disponible
-
Red dedicada para iSCSI (recomendado) o VLAN segregada
-
Iniciadores (Proxmox, hypervisors, servidores Linux) con conectividad IP
1. Crear un Dataset para iSCSI
Primero, prepare el espacio de almacenamiento:
-
Acceda a Storage → Datasets
-
Seleccione su pool (ej:
vol-bkp) -
Haga clic en Add Dataset
-
Configure:
-
Name:
iscsi-lun-01 -
Recordsize:
16K(predeterminado para OLTP/DB) o128K(para cargas aleatorias) -
Compression:
lz4(equilibrado entre rendimiento y tasa de compresión) -
Sync:
Disabled(para mejor throughput) oStandard(más seguro)
-
Nota: Para entornos críticos (Oracle, SQL Server), use
Sync: Standardy considere ZFS Intent Log (ZIL) en SSD.
2. Configurar Extent (Exportación de LUN)
Un Extent es el equivalente a un disco virtual que se exportará vía iSCSI:
-
Acceda a Shares → iSCSI → Extents
-
Haga clic en Add
-
Configure:
-
Type:
Device(disco físico) oFile(archivo en dataset) -
For File-based Extent:
-
Dataset: Seleccione
vol-bkp/iscsi-lun-01 -
Logical Block Size:
4096(predeterminado moderno) -
Size: Define el tamaño de la LUN (ej: 500 GB)
-
-
Recomendações por caso de uso:
- Oracle/SQL: Logical Block Size 4096, Sync padrão, +40% overhead no tamanho
- Proxmox VM storage: 4096, Compression LZ4, throughput oriented
- Backup/Archive: 8192, Compression máxima
3. Crear Target (Objetivo iSCSI)
El Target es el punto de acceso que los iniciadores contactarán:
-
Acceda a Shares → iSCSI → Targets
-
Haga clic en Add
-
Configure:
-
Target Name:
iqn.2026-08.br.nyverra:storage.vol-bkp-
Formato IQN:
iqn.yyyy-mm.domínio-reverso:identificador-único
-
-
Target Alias:
Nyverra-Storage-Backup -
Selecione Groups: Próxima pestaña
-
Importante: Use un IQN único y estandarizado. Ejemplo para su empresa:
iqn.2026-08.br.nyverra:storage.prod.oracle iqn.2026-08.br.nyverra:storage.proxmox iqn.2026-08.br.nyverra:backup.cliente-xyz
4. Mapear Extent al Target (LUN Mapping)
-
En la pestaña Target to LUN Mapping, haga clic en Add
-
Configure:
-
Logical Unit Number (LUN):
0(primera LUN del target) -
Extent: Seleccione
iscsi-lun-01(creado anteriormente)
-
¿Múltiples extents? Use LUN 0, 1, 2... para cada extent mapeado al mismo target.
5. Configurar Portal Group
Un Portal Group define IPs y puertos de escucha:
-
Acceda a Shares → iSCSI → Portals
-
Verifique si existe
default:-
IP:
0.0.0.0(escucha en todas las interfaces) -
Port:
3260(puerto iSCSI estándar)
-
Para seguridad en producción, cree un portal específico:
-
Haga clic en Add
-
Configure:
-
IP Address:
192.168.0.95(su red de almacenamiento) -
Port:
3260 -
Comment:
Production iSCSI Network
-
6. Configurar Authorized Access (ACL)
Restrinja el acceso a iniciadores específicos:
-
Acceda a Shares → iSCSI → Authorized Access
-
Haga clic en Add
-
Configure:
-
Initiator Group: Seleccione (o cree uno nuevo)
-
Initiator IQN: Especifique el IQN del cliente
-
Ejemplo:
iqn.1991-05.com.example:storage.prod01(nodo Proxmox)
-
-
Consejo: Deje vacío para "Allow all initiators" (solo si es de confianza o en laboratorio)
7. Activar el Servicio iSCSI
-
Acceda a Services
-
Localice iSCSI
-
Cambie a ON
-
Opcionalmente, marque Start Automatically
Conectar un Iniciador (Ejemplo Proxmox)
En su nodo Proxmox, configure el acceso a la LUN:
Vía CLI (Proxmox PVE)
# Instalar cliente iSCSI
apt-get install open-iscsi -y
# Descubrir targets disponibles
iscsiadm -m discovery -t sendtargets -p 192.168.0.95
# Saída esperada:
# 192.168.0.95:3260,1 iqn.2026-08.br.nyverra:storage.vol-bkp
# Conectar ao target
iscsiadm -m node -T iqn.2026-08.br.nyverra:storage.vol-bkp -p 192.168.0.95 -l
# Verificar conexión
iscsiadm -m session -o show
# Listar blocos iSCSI
lsblk | grep sd
# Exemplo: sdb (LUN mapeada)
Vía Interfaz Web de Proxmox
-
Datacenter → Storage
-
Add → ISCSI
-
Configure:
-
ID:
nyverra-backup -
Target:
192.168.0.95 -
Target Portal:
192.168.0.95:3260 -
Target:
iqn.2026-08.br.nyverra:storage.vol-bkp -
LUN:
0 -
Content: Marque
Disk image,VZDump backup file, según sea necesario
-
-
Verificar → Proxmox detectará automáticamente el tamaño de la LUN
Conectar un Servidor Oracle Linux 7.9
Para servidores Oracle Linux Server 7.9 (compatible con RHEL 7.9), como srvoracle-prod, la configuración es similar pero con particularidades de systemd y yum:
Prerrequisitos en Oracle Linux 7.9
# Verificar versión
cat /etc/oracle-release
# Oracle Linux Server release 7.9
# Atualizar sistema
yum update -y
# Desativar firewalld (se necessário) ou configurar regras
systemctl status firewalld
# Se ativo: systemctl stop firewalld && systemctl disable firewalld
1. Instalar Cliente iSCSI
# Instalar open-iscsi (iscsi-initiator-utils em RHEL/OL)
yum install -y iscsi-initiator-utils
# Verificar instalação
rpm -qa | grep iscsi
# iscsi-initiator-utils-6.2.1.3-16.el7.x86_64
# Verificar versão
iscsiadm --version
# iscsiadm version 6.2.1.3
2. Configurar IQN del Iniciador
El IQN (iSCSI Qualified Name) identifica su servidor en el target:
# Verificar IQN actual
cat /etc/iscsi/initiatorname.iscsi
# InitiatorName=iqn.1993-08.org.linux-xxx:xxxxx
# Customizar para seu servidor Oracle
vi /etc/iscsi/initiatorname.iscsi
# Alterar para:
# InitiatorName=iqn.2026-08.br.nyverra:initiator.srvoracle-prod
Importante: Use un IQN único por servidor. Recomendamos incluir el hostname:
iqn.2026-08.br.nyverra:initiator.srvoracle-prod iqn.2026-08.br.nyverra:initiator.srvoracle-backup
3. Iniciar el Servicio iscsid
# Iniciar daemon iSCSI
systemctl start iscsid
# Ativar na inicialização (importante para produção)
systemctl enable iscsid
# Verificar status
systemctl status iscsid
# ● iscsid.service - Open-iSCSI daemon
# Loaded: loaded (/usr/lib/systemd/system/iscsid.service; enabled)
# Active: active (running)
4. Descubrir Targets en TrueNAS
# Descubrir targets disponíveis no TrueNAS (192.168.0.95)
iscsiadm -m discovery -t sendtargets -p 192.168.0.95
# Saída esperada:
# 192.168.0.95:3260,1 iqn.2026-08.br.nyverra:storage.vol-bkp
# 192.168.0.95:3260,1 iqn.2026-08.br.nyverra:storage.oracle
5. Conectar al Target iSCSI
# Conectar (login) ao target
iscsiadm -m node -T iqn.2026-08.br.nyverra:storage.oracle -p 192.168.0.95 -l
# Saída esperada:
# Logging in to [iface: default, target: iqn.2026-08.br.nyverra:storage.oracle, portal: 192.168.0.95,3260] (multiple)
# Login successful.
# Verificar todas as sessões iSCSI ativas
iscsiadm -m session -o show
# Saída:
# tcp: [1] 192.168.0.95:3260,1 iqn.2026-08.br.nyverra:storage.oracle (non-flash)
6. Verificar Bloques de Disco
# Listar blocos iSCSI mapeados
lsblk -i
# Exemplo de saída:
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
# sda 8:0 0 200G 0 disk
# ├─sda1 8:1 0 500M 0 part /boot
# └─sda2 8:2 0 199.5G 0 part /
# sdb 8:16 0 2.7T 0 disk <- iSCSI LUN
# sdc 8:32 0 1.5T 0 disk <- Outra LUN
# Informações detalhadas iSCSI
lsscsi -i
# Exemplo:
# [2:0:0:0] disk SLIO-ORG vol-bkp 4001 /dev/sdb
# [3:0:0:0] disk SLIO-ORG storage-oracle 4001 /dev/sdc
7. Persistencia de Conexión en el Arranque
Para garantizar que las LUN se monten automáticamente al arrancar:
# Editar configuração de nó iSCSI
iscsiadm -m node -T iqn.2026-08.br.nyverra:storage.oracle -p 192.168.0.95 -o update -n node.startup -v automatic
# Verificar configuração
iscsiadm -m node -T iqn.2026-08.br.nyverra:storage.oracle -p 192.168.0.95 -o show
# Saída esperada:
# node.startup = automatic
# node.leading_login = No
# ...
8. Formatear y Montar LUN (Opcional)
Si necesita formatear la LUN para uso en Oracle:
# Listar discos
fdisk -l | grep sdb
# Disk /dev/sdb: 2748.9 GB, 2748901658624 bytes
# Criar partição (se necessário)
parted /dev/sdb mklabel gpt
parted /dev/sdb mkpart primary 0% 100%
parted /dev/sdb print
# Formatar (EXT4 para Oracle datafiles - NÃO recomendado)
# OU deixar como bloco raw (recomendado para Oracle):
# mkfs.ext4 -L iscsi-oracle /dev/sdb1
# Montar (opcional)
mkdir -p /mnt/iscsi-oracle
mount /dev/sdb1 /mnt/iscsi-oracle
# Persistir em /etc/fstab
# /dev/sdb1 /mnt/iscsi-oracle ext4 defaults,_netdev 0 2
Nota para Oracle: Use raw device (sin formateo ext4) para un mejor rendimiento. Las LUN iSCSI deben gestionarse mediante ASM o LVM, no mediante montaje systemd.
9. Script Completo de Configuración Oracle Linux 7.9
#!/bin/bash
# Script: configurar-iscsi-oracle.sh
set -e
TRUENAS_IP="192.168.0.95"
TARGET_NAME="iqn.2026-08.br.nyverra:storage.oracle"
INITIATOR_NAME="iqn.2026-08.br.nyverra:initiator.srvoracle-prod"
echo "[*] Atualizando sistema..."
yum update -y
echo "[*] Instalando open-iscsi..."
yum install -y iscsi-initiator-utils device-mapper-multipath
echo "[*] Configurando IQN do iniciador..."
sed -i "s/^InitiatorName=.*/InitiatorName=$INITIATOR_NAME/" /etc/iscsi/initiatorname.iscsi
echo "[*] Iniciando serviço iscsid..."
systemctl start iscsid
systemctl enable iscsid
echo "[*] Descobrindo targets em $TRUENAS_IP..."
iscsiadm -m discovery -t sendtargets -p $TRUENAS_IP
echo "[*] Conectando ao target $TARGET_NAME..."
iscsiadm -m node -T $TARGET_NAME -p $TRUENAS_IP -l
echo "[*] Configurando persistência (auto-login)..."
iscsiadm -m node -T $TARGET_NAME -p $TRUENAS_IP -o update -n node.startup -v automatic
echo "[*] Aguardando LUN aparecer..."
sleep 5
echo "[*] Blocos mapeados:"
lsblk -i | grep -E "sdb|sdc|sdd"
echo "[*] Sessões iSCSI:"
iscsiadm -m session -o show
echo "[SUCCESS] iSCSI configurado com sucesso em Oracle Linux 7.9!"
Usar script:
chmod +x configurar-iscsi-oracle.sh
sudo ./configurar-iscsi-oracle.sh
Tuning para Oracle en Linux 7.9
Para optimizar iSCSI en entornos Oracle:
# Aumentar filas de IO
echo "options iscsi_tcp rcv_nnt=512" | tee -a /etc/modprobe.d/iscsi.conf
modprobe -r iscsi_tcp
modprobe iscsi_tcp
# Aumentar TCP buffers para melhor throughput
sysctl -w net.core.rmem_max=134217728
sysctl -w net.core.wmem_max=134217728
sysctl -w net.ipv4.tcp_rmem="4096 87380 67108864"
sysctl -w net.ipv4.tcp_wmem="4096 65536 67108864"
# Persistir em /etc/sysctl.conf
cat >> /etc/sysctl.conf <<EOF
# iSCSI Tuning
net.core.rmem_max=134217728
net.core.wmem_max=134217728
net.ipv4.tcp_rmem=4096 87380 67108864
net.ipv4.tcp_wmem=4096 65536 67108864
EOF
sysctl -p
Multipath (MPIO) en Oracle Linux 7.9
Para conexiones múltiples y alta disponibilidad:
# Instalar device-mapper-multipath
yum install -y device-mapper-multipath
# Iniciar serviço
systemctl start multipathd
systemctl enable multipathd
# Gerar configuração padrão
mpathconf --enable --with_multipathd y
# Verificar multipaths
multipath -ll
# Exemplo de saída:
# 360001405b4c7c9844e7451d942ce4b33 dm-0 SLIO-ORG,vol-bkp
# size=2.7T features='0' hwhandler='1 alua' wp=rw
# `-+- policy='service-time 0' prio=50 status=enabled
# `- 2:0:0:0 sdb 8:16 active ready running
Gestión de Sesiones iSCSI
# Listar todas as sessões descobertas
iscsiadm -m node
# Deletar uma conexão (logout)
iscsiadm -m node -T iqn.2026-08.br.nyverra:storage.oracle -p 192.168.0.95 -u
# Reconectar
iscsiadm -m node -T iqn.2026-08.br.nyverra:storage.oracle -p 192.168.0.95 -l
# Logout de todos os targets
iscsiadm -m session -u all
# Relogin em todos os targets configurados
iscsiadm -m node -l all
Solución de Problemas Oracle Linux 7.9
Problema: "iscsid is not running"
# Verificar status
systemctl status iscsid
# Se parado, iniciar
systemctl start iscsid
systemctl enable iscsid
# Checar logs
journalctl -u iscsid -n 50
Problema: "Portal not found"
# Redescobrir targets
iscsiadm -m discovery -t sendtargets -p 192.168.0.95 --op update
# Verificar conectividade network
ping -c 5 192.168.0.95
ss -tunap | grep 3260
Problema: "Session login failed"
# Aumentar verbosidade
iscsiadm -m session -o show -P 3
# Verificar firewall
firewall-cmd --list-all
firewall-cmd --add-port=3260/tcp --permanent
firewall-cmd --reload
# Logs do kernel
dmesg | tail -50 | grep -i iscsi
Problema: "LUN no aparece después del arranque"
# Forçar descoberta de blocos
iscsiadm -m node -l all
# Verificar se node.startup = automatic
iscsiadm -m node -o show | grep startup
# Se não estiver, ativar:
iscsiadm -m node -T <target> -p <portal> -o update -n node.startup -v automatic
# Rebootar e testar
reboot
Problema: "Latencia alta o conexión inestable"
# Monitorar latência
ping -i 0.2 -c 1000 192.168.0.95 | tail -3
# Verificar jitter (variação)
# Expected: < 5ms em rede local
# Se latência alta, verificar:
# 1. Rede dedicada vs compartilhada
# 2. MTU frames (usar jumbo frames 9000 se possível)
# 3. VLAN tagging
# Aumentar timeout de reconexão
iscsiadm -m node -T <target> -p <portal> -o update \
-n node.conn[0].timeo.replacement_timeout -v 120
Integración con ASM (Oracle Grid)
Si usa Oracle Grid Infrastructure con ASM:
# Após conectar LUN, criar disco ASM
# (Executar como oracle user ou via asmcmd)
asmcmd
# ASMCMD> create diskgroup dg_iscsi_data external redundancy disk='/dev/sdb' quorumfail=proactive;
# Diskgroup created.
# Verificar discos
# ASMCMD> lsdsk -G dg_iscsi_data;
Optimizaciones y Mejores Prácticas
1. Usar Múltiples Conexiones (MPIO)
Para alta disponibilidad, configure múltiples rutas:
# No Proxmox/Linux, criar multipath
apt-get install multipath-tools -y
# Configurar /etc/multipath.conf para round-robin
multipath -ll
En TrueNAS, active ALUA (Asymmetric Logical Unit Assignment):
-
Shares → iSCSI → Global Target Configuration
-
Marque
Enable ALUA
2. Ajuste de Rendimiento
En TrueNAS:
- ZFS recordsize: 16K (banco de dados), 128K (seqüencial)
- Compression: LZ4 (padrão)
- Sync: Standard (para dados críticos)
- Cache: Arc (ajuste em System → Tuning)
En Proxmox/Cliente:
# Aumentar queue depth para melhor throughput
echo "options iscsi_tcp rcv_nnt=512" >> /etc/modprobe.d/iscsi.conf
# Verificar sesões iSCSI
iscsiadm -m session -o show
3. Monitoreo
Configure alertas en TrueNAS:
-
System → Alerts
-
Monitoree:
-
Capacidad del pool (alerta al 80%)
-
Estado de la sesión iSCSI
-
Latencia de red hacia el almacenamiento
-
4. Seguridad
Autenticación CHAP
-
Shares → iSCSI → Auth Groups
-
Cree credenciales CHAP
-
Aplique al Target
Firewall
# UFW (Ubuntu/Proxmox)
ufw allow from 192.168.0.0/24 to any port 3260
# iptables (Proxmox/PVE)
iptables -A INPUT -p tcp --dport 3260 -s 192.168.0.0/24 -j ACCEPT
Red Dedicada
-
Aislar el tráfico iSCSI en una VLAN separada
-
Usar bonding de NICs para redundancia
-
Minimizar la latencia (cable directo cuando sea posible)
Solución de Problemas Comunes
Problema: "Target no encontrado"
# Redescobrir targets
iscsiadm -m discovery -t sendtargets -p 192.168.0.95 --op update
# Verificar firewall TrueNAS
# Settings → Advanced → Sysctl → net.inet.ip.fw.verbose=1
Problema: "Caídas de sesión iSCSI"
-
Verificar latencia:
ping -c 100 192.168.0.95 | tail -1 # Debe estar < 5ms en red local -
Verificar logs:
# TrueNAS tail -f /var/log/ctl.log # Proxmox tail -f /var/log/syslog | grep iscsi -
Aumentar timeouts:
iscsiadm -m node -T <target> -p <portal> -o update -n node.conn[0].timeo.replacement_timeout -v 120
Problema: "La LUN no crece"
-
Espacio en disco ZFS insuficiente
-
Verificar:
zfs list -o name,available -
Expandir pool o dataset según sea necesario
Caso: Integración con Oracle RAC en Proxmox
Un ejemplo práctico es usar iSCSI de TrueNAS para Oracle RAC en Proxmox:
TrueNAS 192.168.0.95
├── Pool: vol-oracle (RAID-Z2, ZFS)
├── Dataset: iscsi-data
│ └── LUN (2 TB) → Proxmox node 1
├── Dataset: iscsi-archive
│ └── LUN (1 TB) → Proxmox node 2
└── Dataset: iscsi-redo
└── LUN (500 GB) → Ambos nodes (MPIO)
Configuración en Oracle:
-
Archivos de datos: LUN dedicada con recordsize 8K
-
Redo logs: LUN separada con sync standard
-
Archive: LUN con compression lz4
Conclusión
El iSCSI en TrueNAS ofrece una solución robusta, escalable y rentable para centralizar el almacenamiento en entornos B2B. Con las prácticas recomendadas en este artículo, tendrá:
✅ Acceso centralizado al almacenamiento
✅ Alta disponibilidad vía MPIO
✅ Rendimiento optimizado para cargas específicas
✅ Seguridad con ACL y autenticación
✅ Facilidad de mantenimiento y escalabilidad
Próximos pasos:
-
Implementar snapshot automático para backup
-
Configurar replicación iSCSI para DR
-
Monitorear con Zabbix o Prometheus
Nyverra Tecnología | Soluciones de Infraestructura B2B
Senador Canedo, GO | Brasil
nyverra.com.br
Artículo escrito para infraestructura moderna en Proxmox, VMware y entornos de virtualización con almacenamiento compartido.
Seguir leyendo
Lea también
TutoriaisManual LSI / Broadcom MegaRAID — MegaCli y StorCLI
Con esta guía, su equipo gana autonomía para diagnosticar rebuilds, resolver foreign configurations, gestionar BBU y CacheCade — con escenarios reales de producción documentados.
20 min de leitura
Nginx Cheatsheet
Guía de bolsillo con ejemplos listos para configurar Nginx en producción: desde instalación y virtual hosts hasta ajuste de rendimiento y resolución de problemas.
12 min de leitura
KubernetesCurso Kubernetes 27 — SLO/SLI, on-call y postmortem sin culpa
Qué prometer, cómo medir y qué hacer cuando el error se dispara: SLI, SLO, presupuesto de error, alertas que despiertan a alguien y postmortem sin caza de brujas.
5 min de leitura
Comentarios
Aún sin comentarios
Sea el primero en compartir su opinión sobre este artículo.

Deje un comentario