Este documento tem o objetivo de demonstrar na prática o funcionamento e a configuração de 3 níveis de RAID no FreeBSD 6.3 utilizando as ferramentas do GEOM(4) para isso. Todas as implementaçõees foram feitas no VMware Server por falta de discos reais. Lembrando que o Handbook do FreeBSD também nos traz boas informações sobre este assunto aqui .
Nossos agradecimentos ao Danilo Egêa que nos enviou este artigo, valeu Danilo! O original, em formato PDF pode ser obtido aqui.
1 RAID, níveis de RAID e o GEOM(4)
RAID é o agrupamento de discos, a grosso modo é pegar 2 ou mais discos e fazê-los trabalhar como se fossem um. Existem vários níveis diferentes de RAID, entenda-se por níveis a maneira como o RAID vai trabalhar.
GEOM(4) é um framework criado para o desenvolvimento de drivers de disco com suporte a infra-estrutura que permite a utilização de vários discos como se fossem um. Com ele é possível unir, replicar e distribuir dados em vários discos e até em uma rede, criando assim uma redundância de dados. Nas próximas seções demonstrarei como configurar os níveis 0, 1 e 10 de RAID no seu sistema FreeBSD.
2 RAID 0
O nível 0 de RAID é a união de dois ou mais discos de tamanhos iguais, seus tamanhos são somados aumentando assim a capacidade de armazenamento da unidade. O GEOM(4) permite a criação de RAID de nível 0 com a ferramenta gstripe(8).
Pois bem, como dito na introdução eu não tinha discos reais para fazer todo o trabalho em uma máquina real, ai tive que apelar para o uso do VMware Server. Criei 5 discos no VMware, 1 para a instalação do sistema e outros 4 para a configuração do RAID, 2 IDE e 2 SCSI. Vamos utilizar os dois discos IDE para a configuração do RAID 0. Bom, o primeiro passo é configurar os módulos necessários para carregarem automaticamente no sistema, para isso inclua as 2 linhas abaixo no arquivo /boot/loader.conf:
geom_stripe_load="YES" geom_mirror_load="YES"
Muito bem, os discos que usarei para configurar o RAID são ad1 e ad3. O comando para criar o RAID é:
gstripe label -v gs0 ad1 ad3
Onde gs0 é o nome do dispositivo que será criado, esse pode ser qualquer nome, como raid0 por exemplo. Como retorno do comando temos:
GEOM_STRIPE: Device gs0 created (id=3059829028). GEOM_STRIPE: Disk ad1 attached to gs0. GEOM_STRIPE: Disk ad3 attached to gs0. GEOM_STRIPE: Device gs0 activated.
É fascinante como FreeBSD é simples, basta apenas formatar o dispositivo gs0 para termos nosso RAID 0 pronto para usar:
newfs /dev/stripe/gs0
Agora jé podemos montar nosso dispositivo e usar como bem entendermos:
mount /dev/stripe/gs0 /raid0
Não é preciso declarar em lugar nenhum que você desaja carregar seu RAID agora, pois sempre que o módulo é carregado o RAID é ativado automaticamente.
2.1 Manutenção do RAID 0
Como todo bom RAID 0, se você perder um dos discos você perde todos os seus dados, e como inserir novos discos exige a formatação do RAID novamente, não há muito o que ser feito na questão manutenção do RAID 0. Podemos verificar o estado do RAID com o comando:
gstripe status
E obteremos a seguinte informação:
Name Status Components stripe/gs0 UP ad1 ad3
2.2 Desativando o RAID 0
Os passos abaixo desativam o RAID e removem as informações do GEOM(4) dos discos:
umount /raid0 gstripe stop -v gs0 gstripe unload -v gstripe clear -v ad1 ad3
3 RAID 1
RAID 1 é o espelhamento entre dois ou mais discos, onde todos os discos são cópias idênticas. A ferramenta para configuração de RAID 1 no FreeBSD é o gmirror(8). Bom, como no RAID 0 o RAID 1 também é muito fácil de configurar. Antes de criar o RAID temos que desativar a proteção contra gavação na MBR dos discos, para isso sete a MIB Sysctl kern.geom.debugflags com o valor 16:
sysctl kern.geom.debugflags=16
O comando abaixo cria um RAID 1 chamado gm0 já com dois discos e os sincroniza automaticamente:
gmirror label -v -b load gm0 ad1 ad3 gmirror load
Assim temos a seguinte saída do kernel:
GEOM_MIRROR: Device gm0 created (id=1545084164). GEOM_MIRROR: Device gm0: provider ad3 detected. GEOM_MIRROR: Device gm0: provider ad1 detected. GEOM_MIRROR: Device gm0: provider ad3 activated. GEOM_MIRROR: Device gm0: provider ad1 activated. GEOM_MIRROR: Device gm0: provider mirror/gm0 launched.
Pronto, se o seu primeiro disco já estava formatado é só montar a partição:
mount /dev/mirror/gm0 /raid1
Ou senão formatá-lo:
newfs /dev/mirror/gm0
3.1 Consideraçõoes importantes sobre o gmirror(8)
O parâmetro -b indica o algoritmo que será usado para escolher a maneira como os dados serão lidos dos discos, load é um algoritmo que lê preferencialmente do disco com menos carga. Outros algoritmos podem ser encontrados nas páginas de manual do gmirror(8). Você também pode criar um RAID com um disco que possui um sistema já instalado tranqüilamente. Caso o faça, para cada label existente em sua partição FreeBSD será criado um dispositivo /dev/mirror/gm0s1x. Exemplo:
ls /dev/mirror/ gm0 gm0s1 gm0s1a gm0s1b gm0s1c gm0s1d gm0s1e gm0s1f
Para iniciar o sistema pelo RAID basta substituir em seu /etc/fstab o disco /dev/ad0 por /dev/mirror/gm0 :
/dev/mirror/gm0s1b none swap sw 0 0 /dev/mirror/gm0s1a / ufs rw 1 1 /dev/mirror/gm0s1e /tmp ufs rw 2 2 /dev/mirror/gm0s1f /usr ufs rw 2 2 /dev/mirror/gm0s1d /var ufs rw 2 2
3.2 Inserindo mais um disco no RAID 1
Inserir outro disco no arranjo é muito simples, o comando abaixo insere o disco da0 no RAID:
gmirror insert -v gm0 da0
É possível ver o andamento da sincronização com o comando gmirror status:
Name Status Components mirror/gm0 DEGRADED ad1 ad3 da0 (3%)
3.3 Removendo um disco do RAID 1
Caso seja preciso trocar um disco da máquina que pertença ao RAID, será necessário removê-lo do arranjo, o comando abaixo remove o disco ad3 do RAID:
gmirror remove -v gm0 ad3
Com o comando gmirror status é possível ver que o disco ad3 não está mais no RAID:
Name Status Components mirror/gm0 COMPLETE ad1 da0
3.4 Desativando o RAID 1
Semelhante ao visto na seção sobre RAID 0, desativar um RAID 1 também é muito simples (pra variar). O comando abaixo desativa o arranjo e limpa as informações do GEOM(8) dos discos:
gmirror stop -v gm0 gmirror unload -v gmirror clear -v ad1 da0
4 RAID 10
O nível de RAID 10 (1+0) precisa no mínimo de 4 discos para funcionar corretamente, o objetivo deste estrutura é fornecer um alto nível de redundância. A ilustração abaixo tenta mostrar a organização dos discos em um RAID 10:
DISCO0 DISCO1 DISCO2 DISCO3 | | RAID1 RAID1 | | ------RAID0------
Como podemos ver, primeiramente os discos são dividos em 2 pares de RAID 1 e depois é feito um RAID 0 com os dois arranjos de nível 1. Simples demais. Bom, vamos lá então, dividi os discos em ad1 e ad3 e da0 e da1, um RAID 1 de dois discos IDE e outro de dois discos SCSI respectivamente. Primeiro vamos criar os arranjos de nível 1:
gmirror label -v -b load gm0 ad1 ad3 ... gmirror label -v -b load gm1 da0 da1 ...
Com o comando gmirror status vemos que os dois arranjos foram criados:
Name Status Components mirror/gm0 COMPLETE ad1 ad3 mirror/gm1 COMPLETE da0 da1
Bem, vamos agora criar o RAID 0 com os dois arranjos gm0 e gm1:
gstripe label -v gs0 /dev/mirror/gm0 /dev/mirror/gm1 ...
Com o comando gstripe status vemos que o RAID 0 foi criado:
Name Status Components stripe/gs0 UP mirror/gm0 mirror/gm1
Pronto, falta somente formatar o RAID e usar como quiser:
newfs /dev/stripe/gs0 .. mount /dev/stripe/gs0 /raid10
Num RAID 10 você pode perder qualquer um discos que o funcionamento do sistema não será afetado.
4.1 Desativando um RAID 10
Para desativar um RAID 10 você deve primeiro desativar o RAID 0:
gstripe stop -v gs0 gstripe unload -v gstripe clear -v /dev/mirror/gm0 /dev/mirror/gm1
E depois desativar os RAID 1:
gmirror stop -v gm0 gmirror stop -v gm1 gmirror unload -v gmirror clear -v ad1 ad3 da0 da1
Pronto, nos livramos de todos eles.
Danilo Egêa Gondolfo daniloegea at yahoo.com.br http://daniloegea.wordpress.com
|