iSCSI é uma maneira de compartilhar o armazenamento em uma rede. Ao contrário do NFS, que funciona no nível do sistema de arquivos, o iSCSI funciona no nível do dispositivo de bloco.
Na terminologia iSCSI, o sistema que compartilha o armazenamento é conhecido como alvo. O armazenamento pode ser um disco físico ou uma área representando vários discos ou uma parte de um disco físico. Por exemplo, se os discos estiverem formatados com ZFS, um zvol poderá ser criado para ser usado como armazenamento iSCSI.
Os clientes que acessam o armazenamento do iSCSI são chamados de iniciadores. Para os iniciadores, o armazenamento disponível por meio do iSCSI aparece como um disco bruto, não formatado, conhecido como LUN. Nós de dispositivo para o disco aparecem em /dev/
e o dispositivo deve ser formatado e montado separadamente.
O FreeBSD fornece um alvo e iniciador nativo, baseado em kernel iSCSI. Esta seção descreve como configurar um sistema FreeBSD como um alvo ou um iniciador.
Para configurar um alvo iSCSI, crie o arquivo de configuração /etc/ctl.conf
, adicione uma linha ao arquivo /etc/rc.conf
para certificar-se de que o daemon ctld(8) seja iniciado automaticamente na inicialização e, em seguida, inicie-o.
A seguir, um exemplo de um arquivo de configuração simples /etc/ctl.conf
. Consulte ctl.conf(5) para obter uma descrição mais completa das opções disponíveis deste arquivo.
portal-group pg0 { discovery-auth-group no-authentication listen 0.0.0.0 listen [::] } target iqn.2012-06.com.example:target0 { auth-group no-authentication portal-group pg0 lun 0 { path /data/target0-0 size 4G } }
A primeira entrada define o grupo de portais pg0
. Grupos de portal definem quais endereços de rede o daemon ctld(8) irá escutar. A entrada discovery-auth-group no-authentication
indica que qualquer iniciador tem permissão para executar descoberta de alvo iSCSI sem autenticação. As linhas três e quatro configuram ctld(8) para escutar em todos os endereços IPv4 (listen 0.0.0.0
) e IPv6 (listen [::]
) na porta padrão 3260.
Não é necessário definir um grupo de portais, pois há um grupo de portais interno chamado default
. Nesse caso, a diferença entre default
e pg0
é que com default
, a descoberta de alvo é sempre negada, enquanto com pg0
, é sempre permitido.
A segunda entrada define um único alvo. O alvo tem dois significados possíveis: uma máquina que atende iSCSI ou um grupo nomeado de LUNs. Este exemplo usa o último significado, onde iqn.2012-06.com.example:target0
é o nome do alvo. Este nome de alvo é adequado para fins de teste. Para uso real, altere com.example
para o nome de domínio real, invertido. O 2012-06
representa o ano e o mês de aquisição do controle desse nome de domínio, e target0
pode ser qualquer valor. Qualquer número de alvos pode ser definido neste arquivo de configuração.
A linha auth-group no-authentication
permite que todos os iniciadores se conectem ao alvo especificado e portal-group pg0
torna o alvo acessível através do grupo do portal pg0
.
A próxima seção define o LUN. Para o iniciador, cada LUN será visível como um dispositivo de disco separado. Múltiplos LUNs podem ser definidos para cada destino. Cada LUN é identificado por um número, onde LUN 0 é obrigatório. A linha path/data/target0-0
define o caminho completo para um arquivo ou zvol que suporta o LUN. Esse caminho deve existir antes de iniciar ctld(8). A segunda linha é opcional e especifica o tamanho do LUN.
Em seguida, para ter certeza que o daemon ctld(8) foi iniciado no boot, adicione esta linha ao arquivo /etc/rc.conf
:
ctld_enable="YES"
Para iniciar o ctld(8) agora, execute este comando:
#
service ctld start
Quando o daemon ctld(8) é iniciado, ele lê o arquivo /etc/ctl.conf
. Se este arquivo for editado depois que o daemon iniciar, use este comando para que as mudanças entrem em vigor imediatamente:
#
service ctld reload
O exemplo anterior é inerentemente inseguro, pois não usa autenticação, concedendo a qualquer um acesso total a todos os alvos. Para exigir um nome de usuário e senha para acessar os alvos, modifique a configuração da seguinte maneira:
auth-group ag0 { chap username1 secretsecret chap username2 anothersecret } portal-group pg0 { discovery-auth-group no-authentication listen 0.0.0.0 listen [::] } target iqn.2012-06.com.example:target0 { auth-group ag0 portal-group pg0 lun 0 { path /data/target0-0 size 4G } }
A seção auth-group
define os pares de nome de usuário e senha. Um inicializador tentando se conectar a iqn.2012-06.com.example:target0
deve primeiro especificar um nome de usuário e senha definidos. No entanto, a descoberta do alvo ainda é permitida sem autenticação. Para exigir autenticação de descoberta de alvo, defina discovery-auth-group
como um nome auth-group
definido em vez de no-authentication
.
É comum definir um único alvo exportado para cada inicializador. Como um atalho para a sintaxe acima, o nome de usuário e a senha podem ser especificados diretamente na entrada do alvo:
target iqn.2012-06.com.example:target0 { portal-group pg0 chap username1 secretsecret lun 0 { path /data/target0-0 size 4G } }
O inicializador iSCSI descrito nesta seção é suportado a partir do FreeBSD 10.0-RELEASE. Para usar o inicializador iSCSI disponível em versões mais antigas, consulte iscontrol(8).
O inicializador iSCSI requer que o daemon iscsid(8) esteja em execução. Este daemon não usa um arquivo de configuração. Para iniciá-lo automaticamente na inicialização, adicione esta linha ao arquivo /etc/rc.conf
:
iscsid_enable="YES"
Para iniciar iscsid(8) agora, execute este comando:
#
service iscsid start
Conectar-se a um alvo pode ser feito com ou sem um arquivo /etc/iscsi.conf
de configuração. Esta seção demonstra os dois tipos de conexões.
Para conectar um inicializador a um único alvo, especifique o endereço IP do portal e o nome do alvo:
#
iscsictl -A -p
10.10.10.10
-tiqn.2012-06.com.example:target0
Para verificar se a conexão foi bem sucedida, execute iscsictl
sem nenhum argumento. A saída deve ser semelhante a esta:
Target name Target portal State iqn.2012-06.com.example:target0 10.10.10.10 Connected: da0
Neste exemplo, a sessão iSCSI foi estabelecida com sucesso, com /dev/da0
representando o LUN anexado. Se o destino iqn.2012-06.com.example:target0
exportar mais de um LUN, vários nós de dispositivos serão mostrados nessa seção da saída:
Connected: da0 da1 da2.
Quaisquer erros serão relatados na saída, assim como os logs do sistema. Por exemplo, esta mensagem normalmente significa que o daemon iscsid(8) não está em execução:
Target name Target portal State iqn.2012-06.com.example:target0 10.10.10.10 Waiting for iscsid(8)
A mensagem a seguir sugere um problema de rede, como uma porta ou endereço IP incorreto:
Target name Target portal State iqn.2012-06.com.example:target0 10.10.10.11 Connection refused
Esta mensagem significa que o nome do alvo especificado está errado:
Target name Target portal State iqn.2012-06.com.example:target0 10.10.10.10 Not found
Esta mensagem significa que o alvo requer autenticação:
Target name Target portal State iqn.2012-06.com.example:target0 10.10.10.10 Authentication failed
Para especificar um nome de usuário e uma senha de CHAP, use esta sintaxe:
#
iscsictl -A -p
10.10.10.10
-tiqn.2012-06.com.example:target0
-uuser
-ssecretsecret
Para se conectar usando um arquivo de configuração, crie o /etc/iscsi.conf
com o seguinte conteúdo:
t0 { TargetAddress = 10.10.10.10 TargetName = iqn.2012-06.com.example:target0 AuthMethod = CHAP chapIName = user chapSecret = secretsecret }
O t0
especifica um nickname para a seção do arquivo de configuração. Ele será usado pelo iniciador para especificar qual configuração usar. As outras linhas especificam os parâmetros a serem usados durante a conexão. O TargetAddress
e TargetName
são obrigatórios, enquanto as outras opções são opcionais. Neste exemplo, o nome de usuário e a senha do CHAP são mostrados.
Para se conectar ao alvo definido, especifique o apelido:
#
iscsictl -An
t0
Como alternativa, para conectar-se a todos os alvos definidos no arquivo de configuração, use:
#
iscsictl -Aa
Para fazer com que o inicializador se conecte automaticamente a todos os alvos no arquivo /etc/iscsi.conf
, adicione o seguinte ao arquivo /etc/rc.conf
:
iscsictl_enable="YES" iscsictl_flags="-Aa"
All FreeBSD documents are available for download at https://download.freebsd.org/ftp/doc/
Questions that are not answered by the
documentation may be
sent to <freebsd-questions@FreeBSD.org>.
Send questions about this document to <freebsd-doc@FreeBSD.org>.