Red Hat Training

A Red Hat training course is available for RHEL 8

Capítulo 7. Começando com iSCSI

O Red Hat Enterprise Linux 8 usa a shell targetcli como uma interface de linha de comando para realizar as seguintes operações:

  • Adicionar, remover, visualizar e monitorar as interconexões de armazenamento iSCSI para utilizar o hardware iSCSI.
  • Exportar recursos de armazenamento local que são apoiados por arquivos, volumes, dispositivos SCSI locais, ou por discos RAM para sistemas remotos.

A ferramenta targetcli tem um layout baseado em árvores, incluindo preenchimento de guias embutidas, suporte de auto-completar e documentação inline.

7.1. Adicionando uma meta iSCSI

Como administrador de sistema, você pode adicionar uma meta iSCSI usando a ferramenta targetcli.

7.1.1. Instalando o targetcli

Instale a ferramenta targetcli para adicionar, monitorar e remover as interconexões de armazenamento iSCSI .

Procedimento

  1. Instale targetcli:

    # yum instalar targetcli
  2. Iniciar o serviço alvo:

    # alvo de partida systemctl
  3. Configurar o alvo para começar no momento da inicialização:

    # systemctl habilita o alvo
  4. Abra a porta 3260 no firewall e recarregue a configuração do firewall:

    # firewall-cmd --permanent --add-port=3260/tcp
    Success
    
    # firewall-cmd --reload
    Success
  5. Veja o layout targetcli:

    # targetcli
    /> ls
    o- /........................................[...]
      o- backstores.............................[...]
      | o- block.................[Storage Objects: 0]
      | o- fileio................[Storage Objects: 0]
      | o- pscsi.................[Storage Objects: 0]
      | o- ramdisk...............[Storage Objects: 0]
      o- iscsi...........................[Targets: 0]
      o- loopback........................[Targets: 0]

Recursos adicionais

  • A página do homem targetcli.

7.1.2. Criando uma meta iSCSI

A criação de um alvo iSCSI permite ao iniciador iSCSI do cliente acessar os dispositivos de armazenamento no servidor. Tanto os alvos quanto os iniciadores têm nomes de identificação únicos.

Pré-requisitos

Procedimento

  1. Navegue até o diretório iSCSI:

    /> iscsi/
    Nota

    O comando cd é usado para mudar os diretórios, assim como para listar o caminho a ser seguido.

  2. Use uma das seguintes opções para criar um alvo iSCSI:

    1. Criação de um alvo iSCSI usando um nome de alvo padrão:

      /iscsi> create
      
      Created target
      iqn.2003-01.org.linux-iscsi.hostname.x8664:sn.78b473f296ff
      Created TPG1
    2. Criação de um alvo iSCSI usando um nome específico:

      /iscsi> create iqn.2006-04.com.example:444
      
      Created target iqn.2006-04.com.example:444
      Created TPG1
      Here iqn.2006-04.com.example:444 is target_iqn_name

      Substituir iqn.2006-04.com.example:444 pelo nome do alvo específico.

  3. Verificar o alvo recém-criado:

    /iscsi> ls
    
    o- iscsi.......................................[1 Target]
        o- iqn.2006-04.com.example:444................[1 TPG]
            o- tpg1...........................[enabled, auth]
               o- acls...............................[0 ACL]
                o- luns...............................[0 LUN]
               o- portals.........................[0 Portal]

Recursos adicionais

  • A página do homem targetcli.

7.1.3. backstore iSCSI

Um backstore iSCSI permite suporte para diferentes métodos de armazenamento de dados de um LUN exportado na máquina local. A criação de um objeto de armazenamento define os recursos que o backstore utiliza. Um administrador pode escolher qualquer um dos seguintes dispositivos de backstore que o Linux-IO (LIO) suporta:

Recursos adicionais

  • A página do homem targetcli.

7.1.4. Criação de um objeto de armazenamento fileio

fileio os objetos de armazenamento podem suportar tanto as operações write_back como write_thru. A operação write_back permite o cache do sistema de arquivo local. Isto melhora o desempenho, mas aumenta o risco de perda de dados. Recomenda-se usar write_back=false para desativar a operação write_back em favor da operação write_thru.

Pré-requisitos

Procedimento

  1. Navegue até o diretório de backstores:

    /> backstores/
  2. Criar um objeto de armazenamento em fileio:

    /> backstores/fileio create file1 /tmp/disk1.img 200M write_back=false
    
    Created fileio file1 with size 209715200
  3. Verifique o objeto de armazenamento criado fileio:

    /backstores> ls

Recursos adicionais

  • A página do homem targetcli.

7.1.5. Criação de um objeto de armazenamento em bloco

O driver de bloco permite o uso de qualquer dispositivo de bloco que apareça no diretório /sys/block/ para ser usado com Linux-IO (LIO). Isto inclui dispositivos físicos (por exemplo, HDDs, SSDs, CDs, DVDs) e dispositivos lógicos (por exemplo, volumes RAID de software ou hardware, ou volumes LVM).

Pré-requisitos

Procedimento

  1. Navegue até o diretório de backstores:

    /> backstores/
  2. Criar uma backstore block:

    /> backstores/block create name=block_backend dev=/dev/sdb
    
    Generating a wwn serial.
    Created block storage object block_backend using /dev/vdb.
  3. Verifique o objeto de armazenamento criado block:

    /backstores> ls
    Nota

    Você também pode criar um backstore de blocos em um volume lógico.

Recursos adicionais

  • A página do homem targetcli.

7.1.6. Criação de um objeto de armazenamento pscsi

Você pode configurar, como backstore, qualquer objeto de armazenamento que suporte a passagem direta dos comandos SCSI sem emulação SCSI e com um dispositivo SCSI subjacente que aparece com lsscsi no /proc/scsi/scsi (tal como um disco rígido SAS) . O SCSI-3 e superiores são suportados com este subsistema.

Atenção

pscsi deve ser usado somente por usuários avançados. Comandos SCSI avançados, tais como para Asymmetric Logical Unit Assignment (ALUAs) ou Persistent Reservations (por exemplo, aqueles usados pelo VMware ESX, e vSphere) geralmente não são implementados no firmware do dispositivo e podem causar mau funcionamento ou falhas. Em caso de dúvida, utilize o backstore block para configurações de produção.

Pré-requisitos

Procedimento

  1. Navegue até o diretório de backstores:

    /> backstores/
  2. Criar um backstore pscsi para um dispositivo SCSI físico, um dispositivo TYPE_ROM usando /dev/sr0 neste exemplo:

    /> backstores/pscsi/ create name=pscsi_backend dev=/dev/sr0
    
    Generating a wwn serial.
    Created pscsi storage object pscsi_backend using /dev/sr0
  3. Verifique o objeto de armazenamento criado pscsi:

    /backstores> ls

Recursos adicionais

  • A página do homem targetcli.

7.1.7. Criação de um objeto de armazenamento em disco RAM de cópia de memória

Os discos RAM de cópia de memória (ramdisk) fornecem discos RAM com emulação SCSI completa e mapeamentos de memória separados usando cópia de memória para iniciadores. Isto fornece capacidade para multi-sessões e é particularmente útil para armazenamento em massa rápido e volátil para fins de produção.

Pré-requisitos

Procedimento

  1. Navegue até o diretório de backstores:

    /> backstores/
  2. Criar um backstore de disco de 1GB de RAM:

    /> backstores/ramdisk/ create name=rd_backend size=1GB
    
    Generating a wwn serial.
    Created rd_mcp ramdisk rd_backend with size 1GB.
  3. Verifique o objeto de armazenamento criado ramdisk:

    /backstores> ls

Recursos adicionais

  • A página do homem targetcli.

7.1.8. Criando um portal iSCSI

A criação de um portal iSCSI adiciona um endereço IP e uma porta ao alvo que mantém o alvo habilitado.

Pré-requisitos

Procedimento

  1. Navegue até o diretório TPG:

    /iscsi> iqn.2006-04.example:444/tpg1/
  2. Use uma das seguintes opções para criar um portal iSCSI:

    1. A criação de um portal padrão utiliza a porta padrão iSCSI 3260 e permite que o alvo escute todos os endereços IP naquela porta:

      /iscsi/iqn.20...mple:444/tpg1> portals/ create
      
      Using default IP port 3260
      Binding to INADDR_Any (0.0.0.0)
      Created network portal 0.0.0.0:3260
      Nota

      Quando um alvo iSCSI é criado, um portal padrão também é criado. Este portal é configurado para ouvir todos os endereços IP com o número de porta padrão que é: 0.0.0.0:3260.

      Para remover o portal padrão:

      /iscsi/iqn-name/tpg1/portals delete ip_address=0.0.0.0 ip_port=3260

    2. Criação de um portal usando um endereço IP específico:

      /iscsi/iqn.20...mple:444/tpg1> portals/ create 192.168.122.137
      
      Using default IP port 3260
      Created network portal 192.168.122.137:3260
  3. Verificar o portal recém-criado:

    /iscsi/iqn.20...mple:444/tpg1> ls
    
    o- tpg.................................. [enambled, auth]
        o- acls ......................................[0 ACL]
        o- luns ......................................[0 LUN]
        o- portals ................................[1 Portal]
           o- 192.168.122.137:3260......................[OK]

Recursos adicionais

  • A página do homem targetcli.

7.1.9. Criando um iSCSI LUN

O número da unidade lógica (LUN) é um dispositivo físico que é apoiado pela backstore iSCSI. Cada LUN tem um número único.

Pré-requisitos

Procedimento

  1. Criar LUNs de objetos de armazenamento já criados:

    /iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/ramdisk/rd_backend
    Created LUN 0.
    
    /iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/block/block_backend
    Created LUN 1.
    
    /iscsi/iqn.20...mple:444/tpg1> luns/ create /backstores/fileio/file1
    Created LUN 2.
  2. Verificar as LUNs criadas:

    /iscsi/iqn.20...mple:444/tpg1> ls
    
    o- tpg.................................. [enambled, auth]
        o- acls ......................................[0 ACL]
        o- luns .....................................[3 LUNs]
        |  o- lun0.........................[ramdisk/ramdisk1]
        |  o- lun1.................[block/block1 (/dev/vdb1)]
        |  o- lun2...................[fileio/file1 (/foo.img)]
        o- portals ................................[1 Portal]
            o- 192.168.122.137:3260......................[OK]

    O nome padrão do LUN começa em 0.

    Importante

    Por padrão, os LUNs são criados com permissões de leitura-escrita. Se um novo LUN é adicionado após a criação de ACLs, o LUN mapeia automaticamente todas as ACLs disponíveis e pode causar um risco de segurança. Para criar um LUN com permissões somente de leitura, veja Seção 7.1.10, “Criando um iSCSI LUN somente de leitura”.

  3. Configurar ACLs. Para mais informações, veja Seção 7.1.11, “Criação de uma LCA iSCSI”.

Recursos adicionais

  • A página do homem targetcli.

7.1.10. Criando um iSCSI LUN somente de leitura

Por padrão, os LUNs são criados com permissões de leitura-escrita. Este procedimento descreve como criar um LUN somente de leitura.

Pré-requisitos

Procedimento

  1. Definir permissões somente leitura:

    /> set global auto_add_mapped_luns=false
    
    Parameter auto_add_mapped_luns is now 'false'.

    Isto impede o mapeamento automático de LUNs para ACLs existentes, permitindo o mapeamento manual de LUNs.

  2. Crie o LUN:

    /> iscsi/target_iqn_name/tpg1/acls/initiator_iqn_name/ create mapped_lun=next_sequential_LUN_number tpg_lun_or_backstore=backstore write_protect=1

    Exemplo:

    /> iscsi/iqn.2006-04.example:444/tpg1/acls/2006-04.com.example.foo:888/ create mapped_lun=1 tpg_lun_or_backstore=/backstores/block/block2 write_protect=1
    
    Created LUN 1.
    Created Mapped LUN 1.
  3. Verificar o LUN criado:

    /> ls
    
    o- / ...................................................... [...]
      o- backstores ........................................... [...]
      <snip>
      o- iscsi ......................................... [Targets: 1]
      | o- iqn.2006-04.example:444 .................. [TPGs: 1]
      |   o- tpg1 ............................ [no-gen-acls, no-auth]
      |     o- acls ....................................... [ACLs: 2]
      |     | o- 2006-04.com.example.foo:888 .. [Mapped LUNs: 2]
      |     | | o- mapped_lun0 .............. [lun0 block/disk1 (rw)]
      |     | | o- mapped_lun1 .............. [lun1 block/disk2 (ro)]
      |     o- luns ....................................... [LUNs: 2]
      |     | o- lun0 ...................... [block/disk1 (/dev/vdb)]
      |     | o- lun1 ...................... [block/disk2 (/dev/vdc)]
      <snip>

    A linha mapped_lun1 agora tem (ro) no final (ao contrário dos mapped_lun0's (rw)) afirmando que ela é somente leitura.

  4. Configurar ACLs. Para mais informações, veja Seção 7.1.11, “Criação de uma LCA iSCSI”.

Recursos adicionais

  • A página do homem targetcli.

7.1.11. Criação de uma LCA iSCSI

Em targetcli, Listas de Controle de Acesso (ACLs) são usadas para definir regras de acesso e cada iniciador tem acesso exclusivo a uma LUN. Tanto os alvos quanto os iniciadores têm nomes de identificação únicos. Você deve saber o nome exclusivo do iniciador para configurar as LCAs. Os iniciadores iSCSI podem ser encontrados no arquivo /etc/iscsi/initiatorname.iscsi.

Pré-requisitos

Procedimento

  1. Navegue até o diretório acls

    /iscsi/iqn.20....mple:444/tpg1> acls/
  2. Use uma das seguintes opções para criar uma ACL :

    1. Usando o nome do iniciador a partir do arquivo /etc/iscsi/initiatorname.iscsi no iniciador.
    2. Usando um nome que seja mais fácil de lembrar, consulte a seção Seção 7.1.12, “Criando um iniciador iSCSI” para garantir que o ACL corresponda ao iniciador.

      /iscsi/iqn.20...444/tpg1/acls> create iqn.2006-04.com.example.foo:888
      
      Created Node ACL for iqn.2006-04.com.example.foo:888
      Created mapped LUN 2.
      Created mapped LUN 1.
      Created mapped LUN 0.
      Nota

      A configuração global auto_add_mapped_luns usada no exemplo anterior, mapeia automaticamente os LUNs para qualquer ACL criada.

      Você pode definir ACLs criadas pelo usuário dentro do nó TPG no servidor de destino:

      /iscsi/iqn.20...scsi:444/tpg1> set attribute generate_node_acls=1
  3. Verificar a ACL criada:

    /iscsi/iqn.20...444/tpg1/acls> ls
    
    o- acls .................................................[1 ACL]
        o- iqn.2006-04.com.example.foo:888 ....[3 Mapped LUNs, auth]
            o- mapped_lun0 .............[lun0 ramdisk/ramdisk1 (rw)]
            o- mapped_lun1 .................[lun1 block/block1 (rw)]
            o- mapped_lun2 .................[lun2 fileio/file1 (rw)]

Recursos adicionais

  • A página do homem targetcli.

7.1.12. Criando um iniciador iSCSI

Um iniciador iSCSI forma uma sessão para se conectar com o alvo iSCSI. Para mais informações sobre o alvo iSCSI, veja Seção 7.1.2, “Criando uma meta iSCSI”. Por padrão, um serviço iSCSI é lazily iniciado e o serviço começa após a execução do comando iscsiadm. Se o root não estiver em um dispositivo iSCSI ou não houver nós marcados com node.startup = automatic, então o serviço iSCSI não iniciará até que um comando iscsiadm seja executado, o que requer iscsid ou os módulos do kernel iscsi para ser iniciado.

Forçar o daemon iscsid a rodar e os módulos do kernel iSCSI a carregar:

# systemctl start iscsid.service

Pré-requisitos

Procedimento

  1. Instalar iscsi-initiator-utils na máquina do cliente:

    # yum instalar iscsi-iniciador-utils
  2. Verifique o nome do iniciador:

    # cat /etc/iscsi/initiatorname.iscsi
    
    InitiatorName=2006-04.com.example.foo:888
  3. Se a ACL recebeu um nome personalizado em Seção 7.1.11, “Criação de uma LCA iSCSI”, modifique o arquivo /etc/iscsi/initiatorname.iscsi de acordo.

    # vi /etc/iscsi/initiatorname.iscsi
  4. Descubra o alvo e faça login no alvo com o IQN do alvo exibido:

    # iscsiadm -m discovery -t st -p 10.64.24.179
        10.64.24.179:3260,1 iqn.2006-04.example:444
    
    # iscsiadm -m node -T iqn.2006-04.example:444 -l
        Logging in to [iface: default, target: iqn.2006-04.example:444, portal: 10.64.24.179,3260] (multiple)
        Login to [iface: default, target: iqn.2006-04.example:444, portal: 10.64.24.179,3260] successful.

    Substituir 10.64.24.179 pelo endereço-ip de destino.

    Você pode usar este procedimento para qualquer número de iniciadores conectados ao mesmo alvo se seus respectivos nomes de iniciadores forem adicionados ao ACL, conforme descrito no site Seção 7.1.11, “Criação de uma LCA iSCSI”.

  5. Encontre o nome do disco iSCSI e crie um sistema de arquivo neste disco iSCSI:

    # grep "Attached SCSI" /var/log/messages
    
    # mkfs.ext4 /dev/disk_name

    Substitua disk_name pelo nome do disco iSCSI exibido no arquivo /var/log/messages.

  6. Montar o sistema de arquivo:

    # mkdir /mount/point
    
    # mount /dev/disk_name /mount/point

    Substituir /mount/point pelo ponto de montagem da divisória.

  7. Edite o arquivo /etc/fstab para montar o sistema de arquivo automaticamente quando o sistema for inicializado:

    # vi /etc/fstab
    
    /dev/disk_name /mount/point ext4 _netdev 0 0

    Substitua disk_name pelo nome do disco iSCSI e /mount/point pelo ponto de montagem da partição.

Recursos adicionais

  • A página do homem targetcli.
  • A página do homem iscsiadm.

7.1.13. Estabelecendo o Protocolo de Autenticação do Desafio-Amerto de Mãos para o alvo

O Challenge-Handshake Authentication Protocol (CHAP) permite que o usuário proteja o alvo com uma senha. O iniciador deve estar ciente desta senha para poder se conectar com o alvo.

Pré-requisitos

Procedimento

  1. Definir autenticação de atributos:

    /iscsi/iqn.20...mple:444/tpg1> set attribute authentication=1
    
    Parameter authentication is now '1'.
  2. Conjunto userid e password:

    /tpg1> set auth userid=redhat
    Parameter userid is now 'redhat'.
    
    /iscsi/iqn.20...689dcbb3/tpg1> set auth password=redhat_passwd
    Parameter password is now 'redhat_passwd'.

Recursos adicionais

  • A página do homem targetcli.

7.1.14. Estabelecendo o Protocolo de Autenticação do Desafio-Amerto de Mãos para o iniciador

O Challenge-Handshake Authentication Protocol (CHAP) permite que o usuário proteja o alvo com uma senha. O iniciador deve estar ciente desta senha para poder se conectar com o alvo.

Pré-requisitos

Procedimento

  1. Habilitar a autenticação CHAP no arquivo iscsid.conf:

    # vi /etc/iscsi/iscsid.conf
    
    node.session.auth.authmethod = CHAP

    Por padrão, o site node.session.auth.authmethod está configurado para None

  2. Adicione o alvo username e password no arquivo iscsid.conf:

    node.session.auth.username = redhat
    node.session.auth.password = redhat_passwd
  3. Inicie o daemon iscsid:

    # systemctl start iscsid.service

Recursos adicionais

  • A página do homem iscsiadm