
iSCSI no TrueNAS: Guia Completo de Configuração e Gerenciamento
iSCSI no TrueNAS: Guia Completo de Configuração e Gerenciamento
Introdução
O iSCSI (Internet Small Computer System Interface) é um protocolo que permite o acesso remoto a blocos de armazenamento através de uma rede IP padrão. No contexto de infraestrutura de TI, especialmente em ambientes de virtualização como Proxmox e VMware, o iSCSI oferece uma solução eficiente e escalável para apresentação de storage.
O TrueNAS, plataforma open-source baseada em FreeBSD e ZFS, é uma excelente escolha para implementar um servidor iSCSI corporativo. Neste artigo, exploramos como configurar e gerenciar conexões iSCSI de forma robusta e segura.
O que é iSCSI e por que usar?
Funcionamento Básico
iSCSI encapsula comandos SCSI (Small Computer System Interface) em pacotes TCP/IP, permitindo que:
-
Servidores remotos acessem armazenamento como se estivesse conectado localmente
-
Múltiplos iniciadores (clientes) se conectem a um único alvo (target)
-
Redes padrão sejam usadas para tráfego de storage (diferente de Fibre Channel)
Vantagens para Infraestrutura B2B
Arquitetura: 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 │ │
│ └────────────────────┘ │
└─────────────────────────────────────────────┘
Passo a Passo: Configurando iSCSI no TrueNAS
Pré-requisitos
-
TrueNAS instalado e acessível via rede (ex:
192.168.0.95) -
Pool de storage já criado com espaço disponível
-
Rede dedicada para iSCSI (recomendado) ou VLAN segregada
-
Iniciadores (Proxmox, hypervisors, servidores Linux) com conectividade IP
1. Criar um Dataset para iSCSI
Primeiro, prepare o espaço de armazenamento:
-
Acesse Storage → Datasets
-
Selecione seu pool (ex:
vol-bkp) -
Clique em Add Dataset
-
Configure:
-
Name:
iscsi-lun-01 -
Recordsize:
16K(padrão para OLTP/DB) ou128K(para cargas aleatórias) -
Compression:
lz4(balanceado entre performance e taxa de compressão) -
Sync:
Disabled(para melhor throughput) ouStandard(mais seguro)
-
Nota: Para ambientes críticos (Oracle, SQL Server), use
Sync: Standarde considere ZFS Intent Log (ZIL) em SSD.
2. Configurar Extent (Exportação de LUN)
Um Extent é o equivalente a um disco virtual que será exportado via iSCSI:
-
Acesse Shares → iSCSI → Extents
-
Clique em Add
-
Configure:
-
Type:
Device(disco físico) ouFile(arquivo em dataset) -
For File-based Extent:
-
Dataset: Selecione
vol-bkp/iscsi-lun-01 -
Logical Block Size:
4096(padrão moderno) -
Size: Define tamanho da LUN (ex: 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. Criar Target (Alvo iSCSI)
O Target é o ponto de acesso que iniciadores contactarão:
-
Acesse Shares → iSCSI → Targets
-
Clique em 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 aba
-
Importante: Use um IQN único e padronizado. Exemplo para sua 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 ao Target (LUN Mapping)
-
Na aba Target to LUN Mapping, clique em Add
-
Configure:
-
Logical Unit Number (LUN):
0(primeira LUN do target) -
Extent: Selecione
iscsi-lun-01(criado anteriormente)
-
Multiplos extents? Use LUN 0, 1, 2... para cada extent mapeado ao mesmo target.
5. Configurar Portal Group
Um Portal Group define IPs e portas de listen:
-
Acesse Shares → iSCSI → Portals
-
Verifique se existe
default:-
IP:
0.0.0.0(escuta em todas as interfaces) -
Port:
3260(padrão iSCSI)
-
Para segurança em produção, crie um portal específico:
-
Clique em Add
-
Configure:
-
IP Address:
192.168.0.95(sua rede de storage) -
Port:
3260 -
Comment:
Production iSCSI Network
-
6. Configurar Authorized Access (ACL)
Restrinja o acesso a iniciadores específicos:
-
Acesse Shares → iSCSI → Authorized Access
-
Clique em Add
-
Configure:
-
Initiator Group: Selecione (ou crie nova)
-
Initiator IQN: Especifique o IQN do cliente
-
Exemplo:
iqn.1991-05.com.example:storage.prod01(Proxmox node)
-
-
Dica: Deixe vazio para "Allow all initiators" (apenas se confiável ou em lab)
7. Ativar o Serviço iSCSI
-
Acesse Services
-
Localize iSCSI
-
Alterne para ON
-
Opcionalmente, marque Start Automatically
Conectar um Iniciador (Proxmox Example)
No seu Proxmox node, configure acesso à LUN:
Via CLI (Proxmox PVE)
# Instalar cliente iSCSI
apt-get install open-iscsi -y
# Descobrir targets disponíveis
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 conexão
iscsiadm -m session -o show
# Listar blocos iSCSI
lsblk | grep sd
# Exemplo: sdb (LUN mapeada)
Via Proxmox Web UI
-
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, conforme necessário
-
-
Verificar → Proxmox detectará automaticamente o tamanho da LUN
Conectar um Servidor Oracle Linux 7.9
Para servidores Oracle Linux Server 7.9 (RHEL 7.9 compatible), como srvoracle-prod, a configuração é similar mas com particularidades de systemd e yum:
Pré-requisitos no Oracle Linux 7.9
# Verificar versão
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 do Iniciador
O IQN (iSCSI Qualified Name) identifica seu servidor no target:
# Verificar IQN atual
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 um IQN único por servidor. Recomendamos incluir hostname:
iqn.2026-08.br.nyverra:initiator.srvoracle-prod iqn.2026-08.br.nyverra:initiator.srvoracle-backup
3. Iniciar o Serviço 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. Descobrir Targets no TrueNAS
# Descobrir 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 ao 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 Blocos 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. Persistência de Conexão na Inicialização
Para garantir que as LUNs sejam montadas automaticamente ao boot:
# 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. Formatar e Montar LUN (Opcional)
Se precisar formatar a LUN para uso no 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 (sem formatação ext4) para melhor performance. LUNs iSCSI devem ser gerenciadas via ASM ou LVM, não systemd mount.
9. Script Completo de Configuração 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 no Linux 7.9
Para otimizar iSCSI em ambientes 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) no Oracle Linux 7.9
Para conexões múltiplas e HA:
# 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
Gerenciamento de Sessões 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
Troubleshooting 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 não aparece após boot"
# 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: "Latência alta ou conexão instável"
# 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
Integração com ASM (Oracle Grid)
Se usar Oracle Grid Infrastructure com 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;
Otimizações e Melhores Práticas
1. Usar Múltiplas Conexões (MPIO)
Para alta disponibilidade, configure múltiplos caminhos:
# No Proxmox/Linux, criar multipath
apt-get install multipath-tools -y
# Configurar /etc/multipath.conf para round-robin
multipath -ll
No TrueNAS, ative ALUA (Asymmetric Logical Unit Assignment):
-
Shares → iSCSI → Global Target Configuration
-
Marque
Enable ALUA
2. Tuning de Performance
No 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)
No 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. Monitoramento
Configure alertas no TrueNAS:
-
System → Alerts
-
Monitore:
-
Pool capacity (alerta em 80%)
-
iSCSI session status
-
Network latency para storage
-
4. Segurança
CHAP Authentication
-
Shares → iSCSI → Auth Groups
-
Crie credenciais CHAP
-
Aplique ao 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
Rede Dedicada
-
Isoler tráfego iSCSI em VLAN separada
-
Usar bonding de NICs para redundância
-
Minimizar latência (cabo direto quando possível)
Troubleshooting Comum
Problema: "Target não 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: "iSCSI session drops"
-
Verificar latência:
ping -c 100 192.168.0.95 | tail -1 # Deve estar < 5ms em rede 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: "LUN não cresce"
-
Espaço em disco ZFS insuficiente
-
Verificar:
zfs list -o name,available -
Expandir pool ou dataset conforme necessário
Case: Integração com Oracle RAC no Proxmox
Um exemplo prático é usar iSCSI do TrueNAS para Oracle RAC em 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)
Configuração no Oracle:
-
Data files: LUN dedicada com recordsize 8K
-
Redo logs: LUN separada com sync standard
-
Archive: LUN com compression lz4
Conclusão
O iSCSI no TrueNAS oferece uma solução robusta, escalável e cost-effective para centralizar storage em ambientes B2B. Com as práticas recomendadas neste artigo, você terá:
✅ Acesso centralizado ao armazenamento
✅ Alta disponibilidade via MPIO
✅ Performance otimizada para cargas específicas
✅ Segurança com ACL e autenticação
✅ Facilidade de manutenção e escalabilidade
Próximos passos:
-
Implementar snapshot automático para backup
-
Configurar replicação iSCSI para DR
-
Monitorar com Zabbix ou Prometheus
Nyverra Tecnologia | Soluções de Infraestrutura B2B
Senador Canedo, GO | Brasil
nyverra.com.br
Artigo escrito para infraestrutura moderna em Proxmox, VMware e ambientes de virtualização com armazenamento compartilhado.
Continuar a ler
Leia também
SegurançaCertificados SSL/TLS: Guia Completo de Geração e Conversão entre Formatos
Este guia técnico cobre a geração de certificados SSL/TLS com Certbot, conversão entre formatos PEM, PFX, DER e as melhores práticas de segurança para proteger chaves privadas e automatizar renovações. Inclui exemplos práticos de configuração para Nginx e Apache.
9 min de leitura
StorCLI - Cheat Sheet Completo
12 min de leitura
Sistemas de ArquivosCorrupção de filesystem em servidores críticos: como diagnosticar antes de sair reparando
Saiba por que o primeiro passo não é o reparo, mas a saúde do disco: como o SMART, o histórico de shutdowns e o dry-run do xfs_repair separam um incidente resolvido de um desastre de dados.
6 min de leitura
Comentários
Ainda sem comentários
Seja o primeiro a compartilhar sua opinião sobre este artigo.
Deixe um comentário