iSCSI Linux · 11 min read · Feb 07, 2026
Configurando Um Ambiente iSCSI No Linux
Configurando Um Ambiente iSCSI No Linux
Hoje em dia, a tecnologia iSCSI é bastante popular no mundo do armazenamento. Este artigo mostra um ambiente de demonstração iSCSI que consiste em um host Debian Linux e um Netapp Filer. Tentamos mostrar os recursos mais importantes deste protocolo.
1. O que é iSCSI?
É um protocolo de armazenamento em rede sobre TCP/IP. Este protocolo encapsula dados SCSI em pacotes TCP. O iSCSI nos permite conectar um host a um array de armazenamento via uma simples conexão Ethernet (unidade de fita). Esta solução é mais barata do que o Fibre Channel SAN (HBAs e switches de Fibre Channel são caros). Do ponto de vista do host, o usuário vê os LUNs do array de armazenamento como discos locais. Dispositivos iSCSI não devem ser confundidos com dispositivos NAS (por exemplo, NFS). A diferença mais importante é que volumes NFS podem ser acessados por múltiplos hosts, mas um volume iSCSI pode ser acessado por um único host. É semelhante ao protocolo SCSI: geralmente, apenas um host tem acesso a um disco SCSI (a diferença é o ambiente de cluster). O protocolo iSCSI é definido no documento RFC3720 pelo IETF (Internet Engineering Task Force).
Alguns críticos disseram que o iSCSI tem um desempenho pior em comparação ao Fibre Channel e causa alta carga de CPU nas máquinas host. Eu acho que se usarmos Ethernet Gigabit, a velocidade pode ser suficiente. Para superar a alta carga de CPU, alguns fornecedores desenvolveram os iSCSI TOE-s (TCP Offload Engine). Isso significa que a placa tem um chip de rede embutido, que cria e computa os quadros TCP. O kernel Linux não suporta isso diretamente e os fornecedores de placas escrevem seus próprios drivers para o SO.
Os termos iSCSI mais importantes:
Iniciador:
O iniciador é o nome do cliente iSCSI. O cliente iSCSI tem acesso em nível de bloco aos dispositivos iSCSI, que podem ser um disco, unidade de fita, gravador de DVD/CD. Um cliente pode usar múltiplos dispositivos iSCSI.
Alvo:
O alvo é o nome do servidor iSCSI. O servidor iSCSI oferece seus dispositivos (discos, fita, dvd/cd … etc.) aos clientes. Um dispositivo pode ser acessado por um único cliente.
Descoberta:
Descoberta é o processo que mostra os alvos para o iniciador.
Método de descoberta:
Descreve a maneira pela qual os alvos iSCSI podem ser encontrados. Os métodos atualmente disponíveis são:
- Internet Storage Name Service (iSNS) - Alvos potenciais são descobertos interagindo com um ou mais servidores iSNS.
- SendTargets – Alvos potenciais são descobertos usando um endereço de descoberta.
- SLP - Descobrir alvos via protocolo de localização de serviço (RFC 4018)
- Estático – Endereço de alvo estático é especificado.
Nomeação iSCSI:
O documento RFC também cobre os nomes iSCSI. O nome iSCSI consiste em duas partes: string de tipo e string de nome único.
A string de tipo pode ser a seguinte:
- iqn. : nome qualificado iscsi
- eui. : identificador eui-64 bits
A maioria das implementações usa o formato iqn. Vamos ver nosso nome de iniciador: iqn.1993-08.org.debian:01.35ef13adb6d
iqn: usamos o endereço de nome qualificado iSCSI.
1993-08: o ano do mês em que a autoridade de nomeação adquiriu o nome de domínio que é usado no nome iSCSI.
org.debian: nome dns reverso que define a autoridade de nomeação organizacional.
01.35ef13adb6d: esta string é definida pela autoridade de nomeação.
Nosso nome de alvo é semelhante (iqn.1992-08.com.netapp:sn.84211978). A diferença é que contém o número de série do Netapp filer. Ambos os nomes são editáveis pelo usuário (iniciador, alvo). Também precisamos de dois endereços IP para o alvo e para o iniciador.
A figura a seguir mostra nosso ambiente de demonstração. Consiste em um host Debian que é o iniciador iSCSI e acessa o
disco iSCSI via dispositivo /dev/sdb. O Netapp filer é nosso dispositivo alvo iSCSI, que oferece o disco /vol/iscsivol/tesztlun0 ou lun para o host Debian Linux. A sessão iSCSI consiste na fase de login, seguida pela fase de troca de dados.

2. Suporte iSCSI em outras plataformas Unix
O Driver iSCSI da Cisco é uma das primeiras implementações de software do iniciador iSCSI. Este driver suporta todos os principais sistemas Unix comerciais e suas versões (HPUX:10.20,11,11i, AIX:4.3.3,5.1,5.2, Solaris: 2.6,7,8,9). O primeiro lançamento pode ser datado de 2001. Atualmente, cada fornecedor Unix implementa seu próprio driver, e investigamos esses drivers.
Solaris:
O Solaris 10 (a partir do lançamento 1/06) suporta iSCSI. O driver do iniciador pode fazer o seguinte:
- Suporte a múltiplas sessões para um alvo: este recurso permite que um cliente crie mais sessões iSCSI para um alvo conforme necessário, aumentando o desempenho.
- Multipath: com a ajuda do recurso Mpxio ou IPMP do Solaris, podemos criar caminhos redundantes para os alvos.
- Discos de 2 Tb e autenticação CHAP também são suportados. O driver Solaris pode usar os três métodos de descoberta (SLP não pode). Discos iSCSI podem ser acessados pelo programa de formato.
HPUX:
A HP suportou o iSCSI a partir do sistema operacional HP11i v1. Este driver pode descobrir os alvos via SLP (Protocolo de Localização de Serviço) que também é definido pelo IETF (RFC 4018). Isso significa que o iniciador iSCSI e os alvos se registram no agente de diretório SLP. Após o registro, o iniciador iSCSI consulta apenas o agente de diretório. O driver HPUX implementa todos os métodos de descoberta. A autenticação CHAP também é implementada e as ferramentas de multipath do SO (PVLinks) também são suportadas. O driver HPUX fornece estatísticas de transporte também.
AIX:
A partir da versão 5.2, o AIX suporta iSCSI. O driver implementa apenas a descoberta de alvo estático. Podemos usar os discos iSCSI com o multipath do AIX chamado MPIO. A autenticação CHAP também é suportada.
Nenhum dos drivers nos permite inicializar a partir do iSCSI. Este pode ser um próximo passo no desenvolvimento do driver.
3. Implementações iscsi no Linux
Implementações de iniciador:
A Cisco também lançou um driver para Linux, mas é bastante antigo.
A implementação iSCSI da Intel contém tanto drivers de alvo quanto de iniciador e uma ferramenta útil para gerar cargas de trabalho.
O UNH-iSCSI é uma implementação de iniciador e alvo da Universidade de New Hampshire.
O projeto Open-iSCSI é a implementação mais nova. Pode ser usado com kernels 2.6.11 e superiores. Testaremos este driver com o host Debian. Ele contém módulos do kernel e um daemon iscsid.
O iscsid pode ser iniciado com o seguinte comando:
/etc/init.d/open-scsi startAs operações iSCSI podem ser controladas com o comando iscsiadm. O comando pode descobrir os alvos, fazer login/logout no alvo e exibir as informações da sessão.
Os arquivos de configuração estão sob o diretório /etc/iscsi:
- iscsid.conf: Arquivo de configuração para o daemon iscsi. É lido na inicialização.
- initiatorname.iscsi: O nome do iniciador, que o daemon lê na inicialização.
- diretório nodes: O diretório contém os nós e seus alvos.
- diretório send_targets: O diretório contém os alvos descobertos.
O processo de instalação é bastante simples. Execute:
apt-get install open-iscsiEste driver implementa atualmente o método de descoberta Sendtargets.
Implementações de alvo:
O iSCSI enterprise target é a implementação de alvo de código aberto para Linux. É baseado na implementação iSCSI Ardis Linux e requer o kernel 2.6.14.
O Openfiler é uma implementação NAS Linux bastante popular e oferece um software NAS baseado em Linux com uma GUI baseada na web.
Muitas outras empresas oferecem drivers de alvo iSCSI comerciais baseados em software (Amgeon, Mayastor, Chelsio).
Os fabricantes de arrays de armazenamento também oferecem suporte nativo para iSCSI (EMC, Netapp, etc.).
Escolhemos o Netapp FAS filer para os testes, mas você pode testá-lo com um software gratuito. Há um link no final do artigo que mostra como podemos fazer isso com o Openfiler.
4. Configurando o ambiente de demonstração iSCSI Linux
Nosso ambiente de demonstração contém um host Debian Linux e um Netapp filer. O host Debian é o iniciador, e o Netapp filer é o alvo.
O processo de configuração é o seguinte, resumidamente:
- Devemos configurar a conexão tcp/ip entre o Debian e o Netapp filer. O iniciador e o alvo devem se pingar. Assumimos que o pacote open-iscsi já está instalado no Debian.
- O host Debian deve descobrir os alvos Netapp. Isso é chamado de processo de “descoberta”. Então o alvo envia as listas de alvos.
- O alvo deve permitir que o iniciador acesse o LUN. Do lado do Netapp, isso significa que devemos criar um grupo de iniciadores, que é uma ligação lógica entre os hosts e os luns. O grupo de iniciadores contém o lun e um host Debian que pode acessar esse lun.
- Quando o iniciador obtém as listas de alvos, ele deve “fazer login” no alvo.
- Quando o processo de “login” é concluído com sucesso e o Netapp filer permite o acesso, o iniciador pode usar o disco iSCSI como um disco normal. Ele aparece sob os dispositivos /dev/sdx e você pode formatá-lo, montá-lo como um disco normal.
Aqui estão os passos detalhados:
- Nós pingamos o Netapp filer a partir do host Linux:
debian:~# ping nasaPING nasa (192.168.2.222) 56(84) bytes de dados.
64 bytes de nasa (192.168.2.222): icmp_seq=1 ttl=255 time=0.716 ms
64 bytes de nasa (192.168.2.222): icmp_seq=2 ttl=255 time=0.620 ms
É bem-sucedido.
- Descobrimos os LUNs iSCSI do netapp filer com o comando iscsiadm. Escolhemos o método de descoberta st (sendtargets). Atualmente, ele é implementado com este driver:
debian:~# iscsiadm -m discovery -t st -p 192.168.2.222192.168.2.222:3260 via sendtargets
Vamos ver os alvos descobertos:
debian:~# iscsiadm -m node192.168.2.222:3260,1000 iqn.1992-08.com.netapp:sn.84211978
- Precisamos preparar o lado do Netapp: Neste exemplo, criaremos um LUN de 4GB (parte do grupo RAID) e o atribuíremos ao host Debian. Devemos verificar o espaço livre:
nasa> df -kSistema de arquivos
total
utilizado disponível capacidade Montado em
/vol/vol0/
8388608KB 476784KB
7911824KB 6% /vol/vol0/
/vol/vol0/.snapshot
2097152KB 10952KB
2086200KB 1%
/vol/vol0/.snapshot
/vol/iscsiLunVol/ 31457280KB 20181396KB 11275884KB 64% /vol/iscsiLunVol/
/vol/iscsiLunVol/.snapshot
0KB
232KB
0KB —%
/vol/iscsiLunVol/.snapshotunVol/testlun1
O seguinte comando cria um LUN de 4GB no volume iscsiLunVol:
nasa> lun create -s 4g -t linux /vol/iscsiLunVol/testlun1Verifique:
nasa> lun show/vol/iscsiLunVol/iscsitestlun 7.0g
(7526131200) (r/w, online, mapped)
/vol/iscsiLunVol/iscsitestlun2 7.0g
(7526131200) (r/w, online, mapped)
/vol/iscsiLunVol/testlun1 4g
(4294967296) (r/w, online)
Devemos verificar se o host Debian é visível a partir do host netapp:
nasa> iscsi initiator showIniciadores conectados:
TSIH TPGroup Iniciador
19 1000 debian (iqn.1993-08.org.debian:01.35ef13adb6d / 00:02:3d:00:00:00)
Ok, vemos o host Debian. Vamos criar o grupo de iniciadores, chamado Debian2.
nasa> igroup create -i -t linux Debian2 iqn.1993-08.org.debian:01.35ef13adb6dnasa> igroup show Debian2 (iSCSI) (ostype: linux):
iqn.1993-08.org.debian:01.35ef13adb6d (logged in on: e0a)Devemos atribuir o novo LUN criado aos hosts Debian2.
nasa> lun map /vol/iscsiLunVol/testlun1 Debian2lun map: auto-atribuído Debian2=2
O comando de verificação:
nasa> lun show -v/vol/iscsiLunVol/testlun1 4g
(4294967296) (r/w, online, mapped)
Número de série: hpGBe4AZsnLV
Compartilhamento: nenhum
Reserva de espaço: habilitada
Tipo de multiprotocolo: linux
Mapas: Debian2=2
- Vamos voltar ao nosso host iniciador. Agora tudo está preparado para acessar o LUN de 4GB. O seguinte comando torna o disco acessível a partir do host Linux.
debian:~# iscsiadm -m node -T iqn.1992-08.com.netapp:sn.84211978 -p 192.168.2.222:3260 –login
Devemos ver as seguintes entradas no arquivo de mensagens:
debian:~# tail /var/log/messages
Abr 13 00:31:34 debian kernel: scsi: tipo de dispositivo desconhecido 31
Abr 13 00:31:34 debian kernel: Fornecedor: NETAPP
Modelo: LUN Rev: 0.2
Abr 13 00:31:34 debian kernel:
Tipo: Desconhecido ANSI revisão SCSI: 04
Abr 13 00:31:34 debian kernel:
Fornecedor: NETAPP Modelo: LUN Rev: 0.2
Abr 13 00:31:34 debian kernel:
Tipo: Acesso Direto ANSI revisão SCSI: 04
Abr 13 00:31:34 debian kernel: SCSI dispositivo sdb: 8388608 512-byte hdwr setores (4295 MB)
Abr 13 00:31:34 debian kernel: sdb: Proteção de gravação está desligada
Abr 13 00:31:34 debian kernel: SCSI dispositivo sdb: cache de unidade: gravação através
Abr 13 00:31:34 debian kernel: sd 1:0:0:2: Dispositivo scsi sdb conectado
O disco aparece como o dispositivo sdb ( /dev/sdb).
- Podemos usá-lo como um disco normal. Você pode criar uma partição e pode facilmente montá-la.
debian:~# fdisk /dev/sdb debian:~# mkfs /dev/sdb1 ; mount /dev/sdb1 /mnt Se você quiser usar sdb após a próxima reinicialização, deve alterar a seguinte entrada:
node.conn[0].startup = manual para automático
no arquivo /etc/iscsi/nodes/
A implementação do iniciador open-iscsi tolera bem erros de rede. Se você desconectar o cabo Ethernet e conectá-lo novamente, deve iniciar o processo de io novamente, mas a reconexão ocorre automaticamente.
Outra boa solução para falhas de rede, se você criar múltiplos caminhos para um LUN (por exemplo: /dev/sdb, /dev/sdc), o iniciador faz login em dois locais (dois controladores RAID) e você faz os dois discos como um único disco lógico usando o software multipath do Linux ( dmsetup).
Recomendo outra alternativa para a implementação de alvo iSCSI: Openfiler (se você não puder testar na caixa Netapp). É um software NAS baseado em Linux gratuito, que pode ser gerenciado com uma GUI baseada na web.
O processo de configuração do iSCSI é bastante semelhante no caso de outras implementações Unix.
5. Resumo e resultados
iSCSI é uma boa solução para um site de recuperação de desastres barato. Você não deve comprar um caro cartão Fibre Channel no site de recuperação de desastres, pode usar o Ethernet e iSCSI. Você também pode usá-lo para conectar hosts a arrays de disco sem adaptadores de host Fibre Channel (se os arrays forem compatíveis com iSCSI).
Durante o teste, executei o host Debian no programa Vmware player, e minha conexão de rede era de 100 Mbit/s. Não consegui alcançar mais de 15 MB/s de desempenho de leitura/gravação, mas isso não é relevante. Com Ethernet Gigabit, você pode alcançar um desempenho muito melhor, a única desvantagem é que aumenta a carga da CPU (a CPU deve construir e computar quadros TCP).
Aqui está minha página inicial simples.
Receba novas postagens na sua caixa de entrada
Sem spam. Cancele a assinatura a qualquer momento.