18.5. Dispositivos RAID por Software

Originalmente contribuído por Warren Block.

Algumas placas-mãe e placas de expansão adicionam um hardware simples, geralmente apenas uma ROM, que permite que o computador inicialize a partir de um array RAID. Após a inicialização, o acesso ao array RAID é feito pelo software em execução no processador principal do computador. Este RAID via software assistido por hardware fornece arrays RAID que não dependem de nenhum sistema operacional em particular, e que são funcionais antes mesmo de um sistema operacional ser carregado.

Vários níveis de RAID são suportados, dependendo do hardware em uso. Veja graid(8) para uma lista completa.

O graid(8) requer o módulo do kernel geom_raid.ko, que está incluído no kernel GENERIC a partir do FreeBSD 9.1. Se necessário, ele pode ser carregado manualmente com o comando graid load.

18.5.1. Criando um Array

Os dispositivos de RAID via software geralmente têm um menu que pode ser acessado pressionando teclas especiais quando o computador está inicializando. O menu pode ser usado para criar e excluir arrays RAID. O graid(8) também pode criar arrays diretamente a partir da linha de comando.

O graid label é usado para criar um novo array. A placa-mãe usada neste exemplo tem um chipset RAID da Intel, portanto, o formato de metadados da Intel é especificado. A nova matriz recebe um rótulo de gm0, é um espelhamento (RAID1) e usa as unidades ada0 e ada1.

Cuidado:

Algum espaço nas unidades será sobrescrito quando elas forem transformadas em um novo array. Faça o backup dos dados existentes primeiro!

# graid label Intel gm0 RAID1 ada0 ada1
GEOM_RAID: Intel-a29ea104: Array Intel-a29ea104 created.
GEOM_RAID: Intel-a29ea104: Disk ada0 state changed from NONE to ACTIVE.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:0-ada0 state changed from NONE to ACTIVE.
GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from NONE to ACTIVE.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NONE to ACTIVE.
GEOM_RAID: Intel-a29ea104: Array started.
GEOM_RAID: Intel-a29ea104: Volume gm0 state changed from STARTING to OPTIMAL.
Intel-a29ea104 created
GEOM_RAID: Intel-a29ea104: Provider raid/r0 for volume gm0 created.

Uma verificação de status mostra que o novo espelhamento está pronto para uso:

# graid status
   Name   Status  Components
raid/r0  OPTIMAL  ada0 (ACTIVE (ACTIVE))
                  ada1 (ACTIVE (ACTIVE))

O dispositivo de array aparece em /dev/raid/. O primeiro array é chamado de r0. Arrays adicionais, se presentes, serão r1, r2 e assim por diante.

O menu da BIOS em alguns desses dispositivos pode criar arrays com caracteres especiais em seus nomes. Para evitar problemas com esses caracteres especiais, os arrays recebem nomes numerados simples como r0. Para mostrar os rótulos reais, como gm0 no exemplo acima, use o sysctl(8):

# sysctl kern.geom.raid.name_format=1

18.5.2. Múltiplos Volumes

Alguns dispositivos de RAID via software suportam mais de um volume em um array. Os volumes funcionam como partições, permitindo que o espaço nas unidades físicas seja dividido e usado de diferentes maneiras. Por exemplo, os dispositivos RAID via software Intel suportam dois volumes. Este exemplo cria um espelho de 40G para armazenar com segurança o sistema operacional, seguido por um volume de 20G RAID0 (stripe) para armazenamento temporário rápido:

# graid label -S 40G Intel gm0 RAID1 ada0 ada1
# graid add -S 20G gm0 RAID0

Os volumes aparecem como entradas adicionais rX em /dev/raid/. Um array com dois volumes mostrará r0 e r1.

Veja graid(8) para o número de volumes suportados por diferentes dispositivos RAID via software.

18.5.3. Convertendo uma Única Unidade em um Espelho

Sob certas condições específicas, é possível converter uma única unidade existente em um array graid(8) sem reformatar. Para evitar a perda de dados durante a conversão, a unidade existente deve atender a esses requisitos mínimos:

  • A unidade deve ser particionada com o esquema de particionamento MBR. O GPT ou outros esquemas de particionamento com metadados no final da unidade serão sobrescritos e corrompidos pelos metadados do graid(8).

  • Deve haver espaço não particionado e não utilizado o suficiente no final da unidade para conter os metadados do graid(8). Esses metadados variam em tamanho, mas o maior ocupa 64M, então pelo menos este espaço livre é recomendado.

Se a unidade atender a esses requisitos, comece fazendo um backup completo. Em seguida, crie um espelhamento de unidade única com essa unidade:

# graid label Intel gm0 RAID1 ada0 NONE

Os metadados do graid(8) foram gravados no final da unidade no espaço não utilizado. Uma segunda unidade pode agora ser inserida no espelhamento:

# graid insert raid/r0 ada1

Os dados da unidade original começarão imediatamente a ser copiados para a segunda unidade. O espelhamento operará em status degradado até que a cópia seja concluída.

18.5.4. Inserindo Novos Discos no Array

As unidades podem ser inseridas em uma matriz como substitutos de unidades que falharam ou estão faltando. Se não houver unidades com falha ou ausentes, a nova unidade se tornará uma reserva. Por exemplo, inserir uma nova unidade em um espelhamento de duas unidades de trabalho resulta em um espelhamento de duas unidades com uma unidade sobressalente, não em um espelhamento de três unidades.

No array de espelho do exemplo, os dados começam a ser copiados imediatamente para a unidade recém-inserida. Qualquer informação existente na nova unidade será substituída.

# graid insert raid/r0 ada1
GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from NONE to ACTIVE.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NONE to NEW.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 state changed from NEW to REBUILD.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-ada1 rebuild start at 0.

18.5.5. Removendo Discos do Array

Discos individuais podem ser permanentemente removidos de um array e seus metadados apagados:

# graid remove raid/r0 ada1
GEOM_RAID: Intel-a29ea104: Disk ada1 state changed from ACTIVE to OFFLINE.
GEOM_RAID: Intel-a29ea104: Subdisk gm0:1-[unknown] state changed from ACTIVE to NONE.
GEOM_RAID: Intel-a29ea104: Volume gm0 state changed from OPTIMAL to DEGRADED.

18.5.6. Parando o Array

Um array pode ser interrompido sem remover os metadados das unidades. O array será reiniciado quando o sistema for inicializado.

# graid stop raid/r0

18.5.7. Verificando o Status do Array

O status do array pode ser verificado a qualquer momento. Depois que um disco foi adicionado ao espelho no exemplo acima, os dados estarão sendo copiados do disco original para o novo disco:

# graid status
   Name    Status  Components
raid/r0  DEGRADED  ada0 (ACTIVE (ACTIVE))
                   ada1 (ACTIVE (REBUILD 28%))

Alguns tipos de arrays, como RAID0 ou CONCAT, podem não ser mostrados no relatório de status se os discos falharem. Para ver esses arrays com falhas parciais, adicione -ga:

# graid status -ga
          Name  Status  Components
Intel-e2d07d9a  BROKEN  ada6 (ACTIVE (ACTIVE))

18.5.8. Excluindo Arrays

Arrays são destruídos, excluindo todos os volumes deles. Quando o último volume presente é excluído, o array é interrompido e os metadados são removidos dos discos:

# graid delete raid/r0

18.5.9. Excluindo Arrays Inesperados

Os discos podem conter metadados graid(8) inesperados, originados no seu uso anterior ou em testes do fabricante. O graid(8) detectará estes discos e criará um array, interferindo no acesso ao disco individual. Para remover os metadados indesejados:

  1. Inicialize o sistema. No menu de inicialização, selecione 2 para o prompt do utilitário de boot. Entre:

    OK set kern.geom.raid.enable=0
    OK boot

    O sistema inicializará com o graid(8) desativado.

  2. Fazer backup de todos os dados na unidade afetada.

  3. Como solução alternativa, a detecção de arrays graid(8) pode ser desativada incluindo se a variável

    kern.geom.raid.enable=0

    no arquivo /boot/loader.conf.

    Para remover permanentemente os metadados graid(8) do disco afetado, inicialize uma instalação do FreeBSD usando um CD-ROM ou um memory stick e selecione a opção Shell. Use o comando status para encontrar o nome do array, normalmente raid/r0:

    # graid status
       Name   Status  Components
    raid/r0  OPTIMAL  ada0 (ACTIVE (ACTIVE))
                      ada1 (ACTIVE (ACTIVE))

    Exclua o volume pelo nome:

    # graid delete raid/r0

    Se houver mais de um volume exibido, repita o processo para cada volume. Após o último array ter sido excluído, o volume será destruído.

    Reinicialize e verifique os dados, restaurando a partir do backup, se necessário. Depois que os metadados forem removidos, a entrada kern.geom.raid.enable=0 no arquivo /boot/loader.conf também pode ser removida.

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