23 de mar. de 2010

Raid 1 (Espelhamento) no Slackware

O Slackware 12.0 possui uma funcionalidade pouco conhecida que seus antecessores não tinham, a ferramenta mdadm no disco de boot para gerenciamento de arrays de discos o que permite implementar RAID já mesmo da instalação do Slackware 12.0.
1 - Particionando os discos:
O RAID via software que o kernel linux propicia não exige discos identicos, ele atua sobre partições o que é uma funcionalidade fantástica pois em sistemas proprietários e raid via hardware são exigidos discos identicos, e isso se torna um estorvo, pois um modelo de disco rígido não fica em linha mais do que um ano e dificilmente você encontrará um disco da mesma marca e modelo para repor em caso de danos. Podemos inclusive usar discos de interfaces diferentes, IDE com SATA e SCSI espelhando apenas certas partições. Um exemplo prático desta característica é que costumo usar uma partição inteira para fazer o cache do Squid com ponto de montagem em /var/squid e como são dados de pouca importância não faço raid sobre ela, apenas da partição de sistema e de uma partição para o /home.
Use a sua ferramenta preferida para particionamento de discos, o fdisk ou o cfdisk e defina o tipo de partição como Linux raid autodetec cujo o código hexadecimal é FD no fdisk faça isso somente no primeiro disco, com a ferramenta sfdisk iremos passar toda a tabela de partições para o segundo disco, mas isso só é válido se seus discos forem identicos caso não sejem i ideal é particionar manualmente. Atentem que ar partições que irão compor os arrays devem ser rigorosamente do mesmo tamanho.
sfdisk -d /dev/sda | sfdisk /dev/sdb
2 - Montando o RAID:
Neste exemplo vou particionar o HD 160 GB da seguinte forma:
PARTIÇÃO
PONTO de MONTAGEM
TAMANHO
/dev/sda1
/
8 GB
/dev/sda2
/var/squid
60 GB
/dev/sda2
/home
92 GB

Observem que eu não criei uma partição swap e isso não é a toa, embora isso não seja tema do artigo vale a pena comentar. Em servidores de e-mail, gateways que empregam proxy, DNS cache, servidores de banco de dados o swap acaba tornando-se mais um estorvo do que um benefício isso por que o kernel entende que o swap é memória RAM e no caso da RAM esgotar-se o sistema passará a usar o swap antes de realocar endereços na RAM o que faz com que o servidor tenha um desempenho sofrível, o swap só é recomendado em máquinas que necessitem abrir e manipular arquivos muito grandes, tais como editores de vídeo, foto ou áudio estas geralmente desktops.
A partição /dev/sda2 é destinada tão só ao cache do squid sendo dados de pouca importância não a colocaremos no array.
mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd[ab]1
mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sd[ab]2
Para exibir o array:
mdadm -D /dev/md0 exibirá as partições que integram o array /dev/md0 no caso /dev/sda1 e /dev/sdb1
mdadm -D /dev/md1 exibirá as partições que integram o array /dev/md0 no caso /dev/sda3 e /dev/sdb3
Entendam o seguinte daqui para frente não nos relacionaremos com nossas partições como /dev/sdaX conforme estamos acostumados, o que existe e deve ser tratado de igual forma serão os arrays /dev/md0 e /dev/md1 digamos que as partições estão "envelopadas" dentro dos arrays.
Se você simplesmente desconectar qualquer um dos discos o sistema continuará rodando e iniciando normalmente pois não existem mais disco 0 ou 1 e partição 1 ou 3 e sim os arrays /dev/md0 e /dev/md1.
Agora basta instalar o Slackware 12 normalmente formatando os arrays com seu sistema de arquivos preferido, no meu caso uso o Reiserfs.
Após o sistema instalado, crie o /etc/mdadm.conf com o comando:
mdadm -D --scan >> /etc/mdadm.conf
Em certos sistemas não sei por que o utilitário liloconfig que é executado durante a instalação do Slackware não consegue identificar os arrays sendo necessário modificar os parâmetros manualmente para a forma como está abaixo.
boot = /dev/md0
root = /dev/md0
3 - Testando o funcionamento do RAID 1:
Simulando uma falha:
O comando abaixo simula uma falha no partição /dev/sda1.
mdadm --manage /dev/md0 --set-faulty /dev/sda1
Em seguida verifique o status do array /dev/md0 com o comando mdadm -D /dev/md0 , ele lhe informará que houve uma falha em uma das partições. Agora vamos resincronizar as partições excluíndo a partição do array e readcionando-o com os comandos abaixo:
mdadm --manage /dev/md0 --remove /dev/sda1
mdadm --manage /dev/md0 --add /dev/sda1
Agora rode o mdadm -D /dev/md0 e observe o andamento da reconstrução do array em "Rebuild Status".
Se um de seus discos rígidos queimar, basta substiuí-lo e executar o sfdisk, sfdisk -d /dev/sda | sfdisk /dev/sdb, mas ATENÇÃO este procedimento só é válido se o disco novo for indentico ao disco presente ou maior! pode-se até substituir por um disco menor mas as partição deverão ter RIGOROSAMENTE o mesmo tamanho inclusive com as casas decimais exibidas pelo cfdisk. Em seguida recrie o /etc/mdadm.conf com o comando:
mdadm -D --scan >> /etc/mdadm.conf
Bom trabalho a todos!

Nenhum comentário:

Postar um comentário