Observação:

Configurar Volumes Lógicos RAID no Oracle Linux

Introdução

O LVM RAID é uma maneira de criar um LV (Logical Volume) que usa vários dispositivos físicos para melhorar o desempenho ou tolerar falhas de dispositivos. No LVM, os dispositivos físicos são Volumes Físicos (PVs) em um único Grupo de Volumes (VG).

Este tutorial trabalhará com os utilitários do Oracle Linux Volume Manager para criar um volume lógico de RAID e, em seguida, tratar de uma falha de disco.

Objetivos

Pré-requisitos

Qualquer sistema Oracle Linux 8 com as seguintes configurações:

Configurar Ambiente de Laboratório

Observação: ao usar o ambiente de laboratório gratuito, consulte Conceitos Básicos do Oracle Linux Lab para obter conexão e outras instruções de uso.

  1. Se ainda não estiver conectado, abra um terminal e conecte-se via ssh a cada instância mencionada acima.

    ssh oracle@<ip_address_of_instance>
    
  2. Verifique se os volumes em blocos existem.

    sudo lsblk
    

    A saída do ambiente de laboratório gratuito deve mostrar o /dev/sda para o sistema de arquivos existente e os discos disponíveis /dev/sdb, /dev/sdc, /dev/sdd e /dev/sde. Também há dois discos adicionais (/dev/sdf, /dev/sdg) que usaremos posteriormente.

Volume Físico (PV)

  1. Crie os volumes físicos (PV) usando os discos disponíveis.

    sudo pvcreate -v /dev/sd[b-e]
    

    Execute o comando com a opção -v para obter informações verbosas.

  2. Verifique a criação de PV.

    sudo pvs
    

    Exemplo de Saída:

    [oracle@ol-node01 ~]$ sudo pvs
      PV         VG        Fmt  Attr PSize  PFree 
      /dev/sda3  ocivolume lvm2 a--  45.47g     0 
      /dev/sdb             lvm2 ---  50.00g 50.00g
      /dev/sdc             lvm2 ---  50.00g 50.00g
      /dev/sdd             lvm2 ---  50.00g 50.00g
      /dev/sde             lvm2 ---  50.00g 50.00g
    

Grupo de Volumes (VG)

  1. Crie o grupo de volumes (VG) usando os volumes físicos recém-criados.

    sudo vgcreate -v foo /dev/sd[b-e]
    
  2. Verifique a criação de VG.

    sudo vgs
    

    Exemplo de Saída:

    [oracle@ol-node01 ~]$ sudo vgs
      VG             #PV #LV #SN Attr   VSize   VFree  
      foo              4   0   0 wz--n- 199.98g 199.98g
      ocivolume        1   2   0 wz--n-  45.47g      0 
    

Volume Lógico (LV)

  1. Criar o LV (Lical Volume) RAID.

    sudo lvcreate --type raid5 -i 3 -L 5G -n rr foo
    
    • --type: Defina o nível de RAID. O LVM suporta os níveis de RAID 0, 1, 4, 5, 6 e 10.
    • -i: Defina o número (n) de faixas (dispositivos) para um volume lógico RAID 4/5/6. Um LV raid5 requer dispositivos n+1.
    • -L: Tamanho total do array RAID.
    • -n: Nome do array RAID.

    Exemplo de Saída:

    [oracle@ol-node01 ~]$ sudo lvcreate --type raid5 -i 3 -L 5G -n rr foo
      Using default stripesize 64.00 KiB.
      Rounding size 5.00 GiB (1280 extents) up to stripe boundary size 5.00 GiB (1281 extents).
      Logical volume "rr" created.
    

    Para obter mais informações, verifique a página manual lvmraid(7).

  2. Verifique a criação de LV.

    sudo lvdisplay foo
    

    A saída mostra todos os volumes lógicos contidos no foo VG.

    Exemplo de Saída:

    [oracle@ol-node01 ~]$ sudo lvdisplay foo
      --- Logical volume ---
      LV Path                /dev/foo/rr
      LV Name                rr
      VG Name                foo
      LV UUID                vghyRi-nKGM-3b9t-tB1I-biJX-10h6-UJWvm2
      LV Write Access        read/write
      LV Creation host, time ol-node01, 2022-05-19 01:23:46 +0000
      LV Status              available
      # open                 0
      LV Size                5.00 GiB
      Current LE             1281
      Segments               1
      Allocation             inherit
      Read ahead sectors     auto
      - currently set to     1024
      Block device           252:10
    
  3. Exiba o tipo de LV.

    sudo lvs -o name,segtype foo/rr
    
    • O comando lvs pode assumir o caminho LV completo como uma opção para restringir os resultados.

    Exemplo de Saída:

    [oracle@ol-node01 ~]$ sudo lvs -o name,segtype /dev/foo/rr
      LV     Type 
      rr     raid5
    

Criar um sistema de arquivos

  1. Crie um sistema de arquivos XFS no LV RAID.

    sudo mkfs.xfs -f /dev/foo/rr
    
    • -f: Força a substituição de um sistema de arquivos existente.

    Exemplo de Saída:

    [oracle@ol-node01 ~]$ sudo mkfs.xfs -f /dev/foo/rr
    meta-data=/dev/foo/rr            isize=512    agcount=8, agsize=163952 blks
             =                       sectsz=4096  attr=2, projid32bit=1
             =                       crc=1        finobt=1, sparse=1, rmapbt=0
             =                       reflink=1
    data     =                       bsize=4096   blocks=1311616, imaxpct=25
             =                       sunit=16     swidth=48 blks
    naming   =version 2              bsize=4096   ascii-ci=0, ftype=1
    log      =internal log           bsize=4096   blocks=2560, version=2
             =                       sectsz=4096  sunit=1 blks, lazy-count=1
    realtime =none                   extsz=4096   blocks=0, rtextents=0
    

    Observação: O sistema de arquivos XFS não pode reduzir seu tamanho após a criação. No entanto, o comando xfs_growfs pode ampliá-lo.

Montar o LV RAID

  1. Monte o sistema de arquivos.

    sudo mkdir -p /u01
    sudo mount /dev/foo/rr /u01
    
  2. Relate o uso do disco do sistema de arquivos.

    df -h
    

    Exemplo de Saída:

    [oracle@ol-node01 ~]$ df -h
    Filesystem                         Size  Used Avail Use% Mounted on
    ...
    /dev/mapper/foo-rr                 5.0G   69M  5.0G   2% /u01
    

Redimensionar um LV RAID

Há várias maneiras de redimensionar um LV RAID:

Importante: A redução de um LV é arriscada e pode resultar em perda de dados. Ao executar um sistema de arquivos XFS no LV, evite diminuir o LV, pois o XFS não permite reduzir o tamanho do sistema de arquivos.

Aumentar a Capacidade do LV RAID

  1. Usando o espaço livre disponível no VG, aumente o tamanho do LV RAID para 10G.

    sudo lvresize -L 10G foo/rr
    

    Para aumentar o tamanho em 10G, use a opção -L +10G.

  2. Verifique se o LV aumentou para 10G.

    sudo lvs foo/rr
    

    O LSize deve mostrar 10g.

  3. Amplie o sistema de arquivos.

    sudo xfs_growfs /u01
    
  4. Relate o uso do disco do sistema de arquivos atualizado.

    df -h
    
  5. Verifique o status de sincronização RAID antes de continuar.

    Aviso: Continuar muito rapidamente para a próxima etapa pode mostrar um erro porque foo/rr não está em sincronia.

    Esse erro ocorrerá se a sincronização não tiver sido concluída após o redimensionamento do LV RAID acima.

    Verifique o LV RAID com watch sudo lvs foo/rr e aguarde o campo Cpy%Sync atingir 100%. Quando Cpy%Sync atingir 100%, use ctrl-c para sair do comando watch.

Consulte as páginas man lvresize(8), lvextend(8) e lvreduce(8) para obter mais informações.

Aumentar faixas no LV RAID

A alteração do número de faixas em um LV RAID aumenta a capacidade geral e é possível em RAID4/5/6/10. Cada segmento adicional requer um número igual de volumes físicos não alocados (dispositivos) dentro do grupo de volumes.

  1. Verifique quais volumes físicos (PV) existem no VG foo.

    sudo pvs
    

    Na saída /dev/sdb, /dev/sdc, /dev/sdd e /dev/sde são todos associados ao foo VG.

  2. Determine se há volumes físicos não utilizados.

    sudo pvdisplay -m /dev/sd[b-e]
    

    Exemplo de Saída:

      --- Physical volume ---
      PV Name               /dev/sdb
      VG Name               foo
      PV Size               50.00 GiB / not usable 4.00 MiB
      Allocatable           yes 
      PE Size               4.00 MiB
      Total PE              12799
      Free PE               11944
      Allocated PE          855
      PV UUID               Q1uEMC-0zL1-dgrA-9rIT-1xrA-Vnfr-2E8tJT
       
      --- Physical Segments ---
      Physical extent 0 to 0:
        Logical volume	/dev/foo/rr_rmeta_0
        Logical extents	0 to 0
      Physical extent 1 to 854:
        Logical volume	/dev/foo/rr_rimage_0
        Logical extents	0 to 853
      Physical extent 855 to 12798:
        FREE
    ...
    

    O comando pvdisplay com a opção -m mostra o mapeamento de extensões físicas para volumes lógicos e extensões logiais. O PV /dev/sdb na saída de exemplo mostra extensões físicas associadas ao LV RAID. O mesmo deve aparecer para /dev/sdc, /dev/sdd e /dev/sde.

  3. Adicione outro PV ao VG.

    Como o LV RAID existente usa todos os volumes físicos existentes, adicione /dev/sdf ao foo PV.

    sudo vgextend foo /dev/sdf
    

    A saída mostra que o comando vgextend converte /dev/sdf em um PV antes de adicioná-lo ao foo do VG.

  4. Adicione um segmento ao LV RAID.

    sudo lvconvert --stripes 4 foo/rr
    

    Responda com y no prompt.

    Exemplo de Saída:

    [oracle@ol-node01 ~]$ sudo lvconvert --stripes 4 foo/rr
      Using default stripesize 64.00 KiB.
      WARNING: Adding stripes to active and open logical volume foo/rr will grow it from 2562 to 3416 extents!
      Run "lvresize -l2562 foo/rr" to shrink it or use the additional capacity.
    Are you sure you want to add 1 images to raid5 LV foo/rr? [y/n]: y
      Logical volume foo/rr successfully converted.
    
  5. Verifique o novo tamanho do LV.

    sudo lvs foo/rr
    

    Exemplo de Saída:

    [oracle@ol-node01 ~]$ sudo lvs foo/rr
      LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
      rr   foo rwi-aor--- 13.34g                                    2.24          
    

    A capacidade (LSize) cresceu 3.34g e a sincronização (Cpy%Sync) começa. A sincronização é o processo que torna todos os dispositivos em um LV RAID consistentes entre si, e uma sincronização completa se torna necessária quando os dispositivos no LV RAID são modificados ou substituídos.

  6. Verifique o status da sincronização.

    Execute a verificação até que o andamento atinja 100%.

    watch sudo lvs foo/rr
    

    Quando Cpy%Sync atingir 100%, use ctrl-c para sair do comando watch.

    Outras maneiras de usar o comando watch incluem:

    • Execute watch -n 5 sudo lvs foo/rr para atualizar a cada 5s em vez dos 2s padrão.
    • Execute timeout 60 watch -n 5 sudo lvs foo/rr para sair automaticamente após os anos 60.
  7. Mostre a nova faixa de segmentos e PV, que agora inclui /dev/sdf.

    sudo lvs -a -o lv_name,attr,segtype,seg_pe_ranges,dataoffset foo
    

Recuperar um Dispositivo RAID com Falha em um LV

Os arrays RAID podem continuar a ser executados com dispositivos com falha. A remoção de um dispositivo para tipos de RAID diferentes de RAID1 implicaria na conversão para um RAID de nível inferior (RAID5 para RAID0 nesse caso).

O LVM permite a substituição de um dispositivo com falha em um volume RAID em uma única etapa, usando o comando lvconvert --repair para dispositivos com falha, em vez de remover uma unidade com falha e possivelmente adicionar uma substituição.

  1. Verifique o layout de LV RAID atual.

    sudo lvs --all --options name,copy_percent,devices foo
    
  2. Simule uma falha em /dev/sdd.

    echo 1 | sudo tee /sys/block/sdd/device/delete
    
  3. Após a falha, verifique novamente o layout do LV RAID.

    sudo lvs --all --options name,copy_percent,devices foo
    

    Observe os dispositivos [unknown].

    Exemplo de Saída:

    [oracle@ol-node01 ~]$ sudo lvs --all --options name,copy_percent,devices foo
      WARNING: Couldn't find device with uuid o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc.
      WARNING: VG foo is missing PV o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc (last written to /dev/sdd).
      LV            Cpy%Sync Devices                                                                   
      rr            100.00   rr_rimage_0(0),rr_rimage_1(0),rr_rimage_2(0),rr_rimage_3(0),rr_rimage_4(0)
      [rr_rimage_0]          /dev/sdb(855)                                                             
      [rr_rimage_0]          /dev/sdb(1)                                                               
      [rr_rimage_1]          /dev/sdc(855)                                                             
      [rr_rimage_1]          /dev/sdc(1)                                                               
      [rr_rimage_2]          [unknown](855)                                                            
      [rr_rimage_2]          [unknown](1)                                                              
      [rr_rimage_3]          /dev/sde(855)                                                             
      [rr_rimage_3]          /dev/sde(1)                                                               
      [rr_rimage_4]          /dev/sdf(855)                                                             
      [rr_rimage_4]          /dev/sdf(1)                                                               
      [rr_rmeta_0]           /dev/sdb(0)                                                               
      [rr_rmeta_1]           /dev/sdc(0)                                                               
      [rr_rmeta_2]           [unknown](0)                                                              
      [rr_rmeta_3]           /dev/sde(0)                                                               
      [rr_rmeta_4]           /dev/sdf(0)        
    
  4. Substitua o dispositivo com falha.

    sudo lvconvert --repair foo/rr
    

    Responda com y no prompt.

    O comando falha ao localizar o espaço ou dispositivo disponível a ser usado no VG.

    Exemplo de Saída:

    [oracle@ol-node01 ~]$ sudo lvconvert --repair foo/rr
      WARNING: Couldn't find device with uuid o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc.
      WARNING: VG foo is missing PV o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc (last written to /dev/sdd).
      WARNING: Couldn't find device with uuid o1JwCl-DTpi-anww-rYt3-1LCq-vmLV-FQCKyc.
    Attempt to replace failed RAID images (requires full device resync)? [y/n]: y
      Insufficient free space: 856 extents needed, but only 0 available
      Failed to replace faulty devices in foo/rr.
    

    Aviso: Se o erro contiver uma mensagem "Não é possível substituir dispositivos em foo/rr enquanto ele não está sincronizado", verifique se o RAID-LV está sincronizado executando watch sudo lvs foo/rr e confirmando que Cpy%Sync é 100%. Em seguida, tente o comando lvconvert novamente.

  5. Adicione o dispositivo /dev/sdg ao VG

    sudo vgextend foo /dev/sdg
    

    As mensagens de AVISO na saída são decorrentes da unidade de disco com falha ainda ausente.

  6. Tente novamente substituindo a unidade de disco com falha.

    sudo lvconvert --repair foo/rr
    

    Responda novamente com y para o prompt.

    A saída mostra novamente as mensagens WARNING sobre a unidade ausente, mas o comando substituiu com sucesso o dispositivo defeituoso no VG.

  7. Examine o layout.

    sudo lvs --all --options name,copy_percent,devices foo
    

    Observe que /dev/sdg substituiu todas as entradas de dispositivo [unknown].

  8. Remova o dispositivo com falha do VG.

    Os utilitários LVM continuarão a relatar que o LVM não pode localizar o dispositivo com falha até que o remova do VG.

    sudo vgreduce --removemissing foo
    

    As mensagens de AVISO na saída são decorrentes da unidade de disco com falha ainda ausente.

  9. Verifique o status de sincronização RAID antes de continuar.

    Aviso: Continuar muito rapidamente para a próxima seção pode mostrar a seguinte mensagem de erro:

    Exemplo de Saída:

    [oracle@ol-node01 ~]$ sudo lvchange --syncaction check foo/rr
      foo/rr state is currently "recover".  Unable to switch to "check".
    

    Este erro ocorrerá se a sincronização não tiver sido concluída após a adição de faixas ao LV RAID.

    Verifique o LV RAID com watch sudo lvs foo/rr e aguarde o campo Cpy%Sync atingir 100%.

Verificar Coerência de Dados em LV RAID (Scrubbing)

O LVM fornece a capacidade de depuração para RAID LV, que lê todos os dados e blocos de paridade em uma matriz e verifica se há coerência.

  1. Inicie um scrub no modo de verificação.

    sudo lvchange --syncaction check foo/rr
    
  2. Exiba o status da ação de scrubbing.

    watch sudo lvs -a -o name,raid_sync_action,sync_percent foo/rr
    

    Exemplo de Saída:

    [oracle@ol-node01 ~]$ sudo lvs -a -o name,raid_sync_action,sync_percent foo/rr
      LV   SyncAction Cpy%Sync
      rr   check      30.08   
    
  3. Após a conclusão do scrubbing (syncronization), exiba o número de blocos inconsistentes encontrados.

    sudo lvs -o +raid_sync_action,raid_mismatch_count foo/rr
    

    A opção raid_sync_action exibe o campo SyncAction com um dos seguintes valores:

    • idle: Todas as ações foram concluídas.
    • resync: Inicializando ou Recuperando após uma falha do sistema.
    • recover: Substituindo um dispositivo no array.
    • check: Procurando diferenças.
    • repair: Analisando e reparando diferenças.

    Exemplo de Saída:

    [oracle@ol-node01 ~]$ lvs -o +raid_sync_action,raid_mismatch_count foo/rr
      LV   VG  Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert SyncAction Mismatches
      rr   foo rwi-aor--- 13.34g                                    44.42            check               0
    

    A saída mostra 0 inconsistências (Incompatíveis).

  4. (Opcional) Corrija as diferenças na matriz.

    Esta etapa é opcional, pois não há diferenças prováveis neste array de amostra.

    sudo lvchange --syncaction repair foo/rr
    
  5. (Opcional) Verifique o status do reparo.

    sudo lvs -o +raid_sync_action,raid_mismatch_count foo/rr
    

    Observe que o campo SyncAction foi alterado para repair.

Consulte as páginas man lvchange(8) e lvmraid(7) para obter mais informações.

Para Obter Mais Informações:

Mais Recursos de Aprendizagem

Explore outros laboratórios em docs.oracle.com/learn ou acesse mais conteúdo de aprendizado gratuito no canal YouTube do Oracle Learning. Além disso, visite education.oracle.com/learning-explorer para se tornar um Oracle Learning Explorer.

Para obter a documentação do produto, visite o Oracle Help Center.