Configurando servidor de armazenamento com iSCSI no Linux.

Configurando um servidor de armazenamento utilizando iSCSI no Linux com o iscsitarget. O iSCSI permite compartilhar discos de armazenamento em rede, que podem ser acessados como se fossem discos locais por outros computadores (iniciadores iSCSI).

Instalar as ferramentas de administração

$ apt-get -y install iscsitarget iscsitarget-dkms

Ative o serviço iscsitarget no arquivo /etc/default/iscsitarget:

ISCSITARGET_ENABLE=true

Melhores práticas para armazenar discos iSCSI:

Use um diretório dedicado em uma partição separada: É recomendado criar um diretório dedicado para armazenar imagens de discos iSCSI em uma partição separada do sistema principal. Por exemplo:

  • Crie um ponto de montagem em /mnt/iscsi20G, e utilize uma partição dedicada ou um disco físico separado para essa finalidade.

Primeiro, liste os discos disponíveis no sistema para verificar se o novo disco foi detectado. Use o comando lsblk ou fdisk para listar os dispositivos:

$ lsblk

NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 120G 0 disk
├─sda1 8:1 0 119G 0 part /
├─sda2 8:2 0 1K 0 part
└─sda5 8:5 0 976M 0 part [SWAP]
sdb 8:16 0 20G 0 disk (Disco adicionado)
sr0 11:0 1 1024M 0 rom

Para particionar o disco /dev/sdb:

Criar uma partição no disco

$ fdisk /dev/sdb

Aqui estão os passos básicos dentro do fdisk:

  • Pressione n para criar uma nova partição.
  • Escolha as opções padrão para a partição (pressione Enter).
  • Quando terminar, pressione w para escrever as alterações no disco.

Formatar a partição

$ mkfs.ext4 /dev/sdb

Crie um diretório onde o disco será montado. O ponto de montagem é o diretório no qual o conteúdo da partição será acessível

$ mkdir /mnt/iscsi20G

Monte a partição no diretório que você acabou de criar:

$ mount /dev/sdb /mnt/iscsi20G

Para confirmar que o disco foi montado corretamente, use o comando df ou lsblk:

$ df -h

Agora, o disco está montado e você pode acessar o conteúdo dele no diretório /mnt/iscsi20G.

$ touch /mnt/iscsi20G/jrf.txt
$ ls /mnt/iscsi20G/

Adicionar ao /etc/fstab para montagem automática

Adicionar o UUID (identificador único) do disco no arquivo /etc/fstab é uma prática recomendada, pois garante que o disco será montado corretamente.

$ blkid

*Isso listará todos os dispositivos e suas informações, incluindo o UUID. O resultado será algo assim:

/dev/sdb: UUID="ffb24b14-f2e8-494c-aae6-b853ea5fda4d" TYPE="ext4"

*Anote o UUID deseja adicionar e edite o arquivo /etc/fstab

$ vim /etc/fstab

Adicione a entrada com o UUID

# Disco iSCSI 20G
UUID=ffb24b14-f2e8-494c-aae6-b853ea5fda4d /mnt/iscsi20G ext4 defaults 0 0

Testar a montagem automática

Após salvar as alterações no arquivo /etc/fstab, você pode testar a montagem automaticamente sem reiniciar o sistema:

$ mount -a

*Se não houver erros, o disco foi montado com sucesso

Passos para criar o arquivo de imagem baseado no tamanho da partição:

  1. Calcular o tamanho em megabytes: A partição /dev/sdb tem 20 GB, então, para criar um arquivo de imagem de 20 GB, você precisará de 20 * 1024 = 20480 MB.
  2. Criar o arquivo de imagem com 20 GB: Execute o seguinte comando para criar o arquivo de imagem com o mesmo tamanho da partição:
$ dd if=/dev/zero of=/mnt/iscsi20G/disk20G.img bs=1M count=20480
  • if=/dev/zero: Isso cria o arquivo preenchido com zeros.
  • of=/mnt/iscsi20G/disk20G.img: Este é o caminho onde o arquivo de imagem será armazenado, dentro do diretório /mnt/iscsi20G.
  • bs=1M: Define o tamanho do bloco como 1 MB.
  • count=20480: Cria um arquivo com 20480 blocos de 1 MB, resultando em 20 GB.

Verificar o arquivo de imagem: Após a criação, você pode verificar o tamanho do arquivo de imagem para garantir que ele tem 20 GB:

$ ls -lh /mnt/iscsi20G/disk20G.img

Configurar o alvo iSCSI (Target):

$ vim /etc/iet/ietd.conf
# Nomeando o alvo iSCSI usando o formato iqn (iSCSI Qualified Name)
Target iqn.2024-04.jrf.srv:target20

    # Associando o disco ao alvo (LUN 0)
    Lun 0 Path=/mnt/iscsi20G/disk20G.img,Type=fileio

    # Definindo o IP do iniciador iSCSI que poderá se conectar ao alvo
    initiator-address 192.168.0.43

    # Definindo usuário e senha para autenticação (utilize senha forte)
    # incominguser username password

Lun 0: Define a imagem de disco (LUN 0) que será compartilhada. O caminho para a imagem deve ser exato.

initiator-address: Especifica o endereço IP do cliente (iniciador iSCSI) que terá permissão para se conectar.

Reiniciar o serviço iSCSI Target

$ systemctl restart iscsitarget

Verificar o status do alvo iSCSI

Você pode verificar se o alvo iSCSI foi criado corretamente e se está funcionando utilizando o comando ietadm:

$ ietadm --op show --tid=1

Conexão do Cliente iSCSI

Agora que o servidor iSCSI está configurado, o cliente iSCSI (iniciador) pode se conectar ao alvo utilizando o IQN e o endereço IP do servidor iSCSI.