12.4. RAID

12.4.1. RAID feito em Software

12.4.1.1. Configuração do Controlador de Discos Concatenados(CCD)

Trabalho original de Christopher Shumway. Revisado por Jim Brown.

Quando estiver escolhendo uma solução de armazenamento em massa os fatores mais importantes a considerar são a velocidade, a confiança e o custo. É raro ter todos os três num equilíbrio; normalmente um rápido e confiável dispositivo de armazenamento em massa é caro, e para baixar o preço tanto a velocidade como a confiánça do dispositivo podem ser sacrificadas.

No desenvolvimento do sistema descrito abaixo, o custo é escolhido como o fator mais importante, seguido da velocidade e então a confiança. A velocidade da tranferência de dados deste sistema determinada é relacionada pela rede. E enquanto a confiança é muito importante, o controlador CCD descrito abaixo disponibiliza dados que já tiveram cópias de segurança geradas em CD-Rs e que podem facilmente ser substituídos.

Definir seus próprios requerimentos é o primeiro passo na escolha de uma solução de armazenamento em massa. Se suas necessidades preferirem a velocidade e a confiança ao invés do custo, sua solução irá ser diferente do sistema descrito nesta seção.

12.4.1.1.1. Instalando o Hardware

Em relação ao sistema de discos IDE, temos três discos IDE Western Digital 30GB de 5400 RPM para o núcleo do disco CCD descrito abaixo, disponibilizando aproximadamente 90GB de armazenamento. De maneira ideal, cada disco IDE teria sua própria controladora e cabo, mas para minimizar custos não utilizaremos controladoras IDEs adicionais. Uma vez que os discos são configurados com jumpers, temos que cada controladora IDE possui um mestre(master) e um escravo(slave).

Ao reciniciar, a BIOS do sistema terá que detectar automaticamente os discos conectados. Ainda mais importante, o FreeBSD terá que detectar os discos ao reiniciar:

ad0: 19574MB <WDC WD205BA> [39770/16/63] at ata0-master UDMA33
ad1: 29333MB <WDC WD307AA> [59598/16/63] at ata0-slave UDMA33
ad2: 29333MB <WDC WD307AA> [59598/16/63] at ata1-master UDMA33
ad3: 29333MB <WDC WD307AA> [59598/16/63] at ata1-slave UDMA33

Nota: Se o FreeBSD não detectar todos os discos, confira se os discos foram jumpeados corretamente. A maioria das controladores também possuem a opção de jumpeamento ``Cable Select''. Este não é o jumper para a relação master/slave. Consulte a documentação da controladora para ter ajuda de como identificar a maneira correta de configurar.

Em seguida, consideraremos como serão conectados como parte do sistema de arquivos. Você deve realizar uma pesquisa entre o vinum(8) (Capítulo 13) e o ccd(4). Nesta configuração em particular, o ccd(4) foi o escolhido.

12.4.1.1.2. Configurando o CCD

O controlador ccd(4) permite que você pegue diversos discos iguais e concatenê-os em um sistema de arquivos lógico. Para fazer o uso do ccd(4) você precisará de um kernel contruído com o suporte ao ccd(4). Adicione esta linha no seu arquivos de configuração do kernel, recompile e reinstale o kernel:

pseudo-device   ccd     4

Nos sistemas 5.X você deve usar a linha à seguir:

device   ccd

Nota: No FreeBSD 5.X não é necessário especificar um número de dispositivos ccd(4), como o dispositivo do controlador ccd(4) agora se auto-replica -- novas instâncias do dispositivo serão criadas automaticamente sobre demanda.

O suporte ao ccd(4) pode também ser carregado como um módulo de kernel carregável no FreeBSD 3.0 ou anterior.

Para configurar o ccd(4) você deve primeiro usar o disklabel(8) para rotular os discos:

disklabel -r -w ad1 auto
disklabel -r -w ad2 auto
disklabel -r -w ad3 auto

Isto criará um rótulo de disco para o ad1c, ad2c e ad3c que farão uso do disco todo.

Nota: Desde o FreeBSD 5.1-RELEASE, o utilitário bsdlabel(8) substitui o antigo programa disklabel(8). No bsdlabel(8) algumas opções e parâmetros obsoletos foram retirados; no exemplo que segue temos a opção -r que deve ser retirada. Para mais informações, visite a página de manual do bsdlabel(8).

O próximo passo é mudar o tipo do rótulo. Você pode usar o disklabel(8) para editar os discos:

disklabel -e ad1
disklabel -e ad2
disklabel -e ad3

Isto abre o rótulo atual de cada disco com o editor especificado pela variável de ambiente EDITOR, que geralmente é o vi(1).

Um rótulo de disco não modificado parecerá com algo como isto:

8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  c: 60074784        0    unused        0     0     0   # (Cyl.    0 - 59597)

Adicione uma nova partição e para que o ccd(4) use. Isto pode usualmente ser copiado da partição c, mas a opção fstype tem de ser 4.2BSD. O rótulo do disco agora deve parecer com algo como isto:

8 partitions:
#        size   offset    fstype   [fsize bsize bps/cpg]
  c: 60074784        0    unused        0     0     0   # (Cyl.    0 - 59597)
  e: 60074784        0    4.2BSD        0     0     0   # (Cyl.    0 - 59597)

12.4.1.1.3. Construindo o Sistema de Arquivos

O dispositivo ccd0c pode não existir ainda, para criá-lo execute os seguintes comandos:

cd /dev
sh MAKEDEV ccd0

Nota: No FreeBSD 5.0, o devfs(5) gerenciará automaticamente os dispositivos listados em /dev, o que dispensa o uso do MAKEDEV.

Agora que você tem todos os discos rotulados você deve contruir o ccd(4). Para fazer isso, use o ccdconfig(8) com opções similares as que seguem:

ccdconfig ccd0(1) 32(2) 0(3) /dev/ad1e(4) /dev/ad2e /dev/ad3e

O uso e o significado de cada opção está listado abaixo:

(1)
O primeiro argumento é o dispositivo que será configurado, neste caso, o /dev/ccd0c. A porção /dev/ é opcional.
(2)
O intercalamento para o sistema de arquivos. O intercalamento define o tamanho da faixa(stripe) em blocos de disco, que é normalmente 512 bytes. Ebntão, um intercalamento de 32 seria 16,384 bytes.
(3)
Parâmetros para o ccdconfig(8). Se você deseja ativar o controle de espelhamento você pode especificar o parâmetro aqui. Esta configuração não provê espelhamento para o ccd(4), então esta está sendo definida por 0 (zero).
(4)
As argumentos finais para o ccdconfig(8) são os dispositivos para colocar na matriz. Utilize o caminho e nome completo para cada dispositivo.

Após executar o ccdconfig(8) o ccd(4) é configurado. Um sistema de arquivo pode ser instalado. Use o newfs(8) para mais opções, ou simplesmente execute:

newfs /dev/ccd0c

12.4.1.1.4. Fazendo tudo automaticamente

Geralmente, você irá querer montar o ccd(4) em cada reinício do sistema. Para fazer isso você deve configurar isso primeiro. Escreva sua configuração corrente no /etc/ccd.conf utilizando os seguintes comandos:

ccdconfig -g > /etc/ccd.conf

Durante o reinício do sistema o script /etc/rc executa ccdconfig -C caso exista o /etc/ccd.conf. Isto automaticamente configura o ccd(4) e então este poderá ser montado.

Nota: Se você estiver inicializando o sistema em modo monousuário, antes você poder dar mount(8) no ccd(4), você precisa definir os seguintes comandos para configurar a matriz:

ccdconfig -C

Para montar automaticamente o ccd(4) coloque uma entrada para o ccd(4) em /etc/fstab e então este será montado no início do sistema:

/dev/ccd0c              /media       ufs     rw      2       2

12.4.1.2. O gerenciador de volumes Vinum

O gerenciador de volumes Vinum é um controlador de dispositivo de bloco que implementa controladores de discos virtuais. Este isola o disco físico da interface de dispositivos de bloco e mapeia os dados em meios que resultam num aimento de flexibilidade, performance e confiança comparáveis as tradicionais slices de armazenamento em disco. O vinum(8) implementa os modelos RAID-0, RAID-1 e RAID-5, tanto individualmente como combinando.

Visite Capítulo 13 para mais informações sobre vinum(8).

12.4.2. RAID feito em Hardware

O FreeBSD também suporta uma variedade de controladoras RAID. Estes dispositivos controlam um subsistema RAID sem precisar de um software específico do FreeBSD para gerenciar a matriz.

Utilizando uma BIOS na placa, a placa controla a maioria das operações em disco. À seguir temos uma configuração descrevendo o uso de uma controladora Promise IDE RAID. Quando esta placa é instalada e o sistema é iniciado, é apresentado um prompt pedindo informações. Siga as instruções para entrar na tela de configuração da placa. Daqui, você tem a habilidade para combinar todos os discos conectados. Após ter feito a configuração os disco parecerão um único disco para o FreeBSD. Outros níveis de RAID podem ser configurados como descrito.

12.4.3. Reconstruindo Matrizes de ATA RAID1

O FreeBSD permite que você troque um disco falhando em uma matriz. Isto requere que você pegue-o antes de reiniciar o sistema.

Você provavelmente verá algo como o seguinte em /var/log/messages ou na saída do dmesg(8):

ad6 on monster1 suffered a hard error.
ad6: READ command timeout tag=0 serv=0 - resetting
ad6: trying fallback to PIO mode
ata3: resetting devices .. done
ad6: hard error reading fsbn 1116119 of 0-7 (ad6 bn 1116119; cn 1107 tn 4 sn 11) status=59 error=40
ar0: WARNING - mirror lost

Utilizando o atacontrol(8), busque por informações:

# atacontrol list
ATA channel 0:
    Master:      no device present
    Slave:   acd0 <HL-DT-ST CD-ROM GCR-8520B/1.00> ATA/ATAPI rev 0

ATA channel 1:
    Master:      no device present
    Slave:       no device present

ATA channel 2:
    Master:  ad4 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
    Slave:       no device present

ATA channel 3:
    Master:  ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
    Slave:       no device present

# atacontrol status ar0
ar0: ATA RAID1 subdisks: ad4 ad6 status: DEGRADED
  1. Você primeiramente precisará desconectar o disco da matriz para então poder removê-lo seguramente:

    # atacontrol detach 3
    
  2. Substitua o disco.

  3. Reconecte o disco como um reserva:

    # atacontrol attach 3
    Master:  ad6 <MAXTOR 6L080J4/A93.0500> ATA/ATAPI rev 5
    Slave:   no device present
    
  4. Reconstrua a matriz:

    # atacontrol rebuild ar0
    
  5. O comando de reconstrução executará até estar completo. Entretanto, é possível abrir outro terminal (utilizando Alt+Fn ) e checar o progresso da reconstruição com o seguinte comando:

    # dmesg | tail -10
    [output removed]
    ad6: removed from configuration
    ad6: deleted from ar0 disk1
    ad6: inserted into ar0 disk1 as spare
    
    # atacontrol status ar0
    ar0: ATA RAID1 subdisks: ad4 ad6 status: REBUILDING 0% completed
    
  6. Espere até que esta operação esteja completa.

Este, e outros documentos, podem ser obtidos em ftp://ftp.FreeBSD.org/pub/FreeBSD/doc/.

Para perguntas sobre FreeBSD, leia a documentação antes de contatar <questions@FreeBSD.org>.
Para perguntas sobre esta documentação, envie e-mail para <doc@FreeBSD.org>.