29.12. Inicializador iSCSI e Configuração Alvo

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.

29.12.1. Configurando um Alvo iSCSI

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

29.12.1.1. Autenticação

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
	}
}

29.12.2. Configurando um Inicializador iSCSI

Nota:

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.

29.12.2.1. Conectando-se a um Alvo sem um Arquivo de Configuração

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 -t iqn.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 -t iqn.2012-06.com.example:target0 -u user -s secretsecret

29.12.2.2. Conectando-se a um Alvo com um Arquivo de Configuração

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>.