RAID via Software no Linux!

Eis que em uma bela manhã de sol… todo aquele espaço enorme de 250gb no servidor começou a ficar pequeno para os arquivos… e fui inspirado a projetar um upgrade para a longevidade próspera dos dados… Por sorte ou ironia do destino, após minerar meu acervo tecnológico me deparei com dois HDs idênticos! Mesma marca, mesmo cache, mesmo tamanho, mesmo modelo, e mesma vontade de se agruparem….

E ao invés de apenas adicionar um HD extra em outro ponto de montagem resolvi buscar por uma solução de Raid via Software para o Linux, que apesar de não ser tão rápida quanto uma RAID real com hardware dedicado é muito mais ágil do que ter os discos funcionando de maneira independente.

Após pesquisas e leituras.. percebi o quanto seria fácil alcançar esse objetivo com o módulo “md” do kernel conjuntamente com pacote de utilitários mdadm!

(*) Device Drivers
    (*) Multiple devices driver support (RAID and LVM)
         <*> RAID support
         <*> Tipo de raid...
         <*> Multipath I/O support

Com uma chave de fenda na mão e animação para um grande dia o backup dos arquivos começou, liberando aquele pequeno espaço para novas fronteiras!! Abri o gabinete e montei os drives levando em consideração que o barramento IDE se comunica apenas com um dispositivo (seja Mestre ou Escravo) por vez. Assim sendo projetei cada HD de 250gb em um barramento IDE diferente, mantendo o HD de boot como mestre do barramento primário e o HD do servidor web e emails como escravo do barramento secundário. Tudo sem deixar os fios confusos nem emaranhados!

         

O resultado na foto me agradou, principalmente pelo posicionamento térmico dos HDs, o Maxtor que é o mais esquentado ficou próximo ao cooler, em seguida tenho o Samsung Slim que por ser fino auxilia na circulação do ar e por não esquentar muito auxilia a isolar o calor entre o Maxtor e o casal Samsung da RAID.

Feita a montagem foi possível dar o boot e, dentro do sistema, prosseguir com a criação da Super RAID0!

Com o fdisk, criei uma partição de tamanho máximo no primeiro HD de 250Gb e em tipo de partição selecionei Linux raid autodetect. Cabe uma idéia aqui para quem quiser utilizar swap: que é configurá-la logo no começo do disco, pois essa é a área de acesso mais rápida do disco.

Para agilizar o trabalho, já que os drives são perfeitamente idênticos, pude copiar o design da partição de um disco diretamente no outro disco com o comando:

sfdisk -d /dev/hdb | sfdisk /dev/hdc

Partição pronta, é hora de desenhar a RAID… E nessa hora paramos para pensar.. qual seria o tamanho ideal dos chunks para a raid? 4k? 8k? 16k? 32k? 64k? 128k? 256k???

É algo a primeira vista difícil de responder, porquê varia principalmente de acordo com o tamanho médio dos arquivos que você possui… se você possui diversos arquivos pequenos, que variam de 1k a 10k, é interessante usar um chunk pequeno de 4k…

Agora se a partição for dedicada a vídeos, músicas lossless, imagens com milhões de DPI, e outros arquivos enormes, um chunk de 256k irá te prover maior performance na hora de ler e gravar esses arquivos na RAID.

Se você quiser pode usar arquivos enormes com chunks de 4k, com uma leve perda na performance (quase imperceptível)… como também pode usar arquivos pequenos com chunks de 256k, com uma leve perda de espaço em disco… (essa já mais perceptível… rs)

Ilustrando melhor: 1 arquivo de 10kb em uma raid com chunk de 256k ocuparia o espaço de 256k em disco… enquanto o mesmo arquivo em uma raid com chunk de 4k ocuparia 3 chunks totalizando 12k. Assim sendo é interessante escolher qual o multiplicador mais viável para a média dos arquivos que você possui, se possuíres muitos arquivos de 25k chunks de 4k ou 8k aproveitam melhor o espaço do que chunks de 16k ou 32k.

Com o tamanho de 4k para os chunks, prossegui para o passo simples de definir a raid com o comando:

mdadm --create /dev/md0 --chunk=4 --level=0 --raid-devices=2 /dev/hdb1 /dev/hdc1

Para o formato da partição eu escolhi ext4, pela performance e recursos equiparáveis e superiores aos outros formatos ao trabalhar com grande volume de arquivos e dados.

Na hora de formatar é interessante definir os parâmetros da raid devidamente calculados para alinhar performance e confiabilidade. Em minha raid utilizei:

mkfs.ext4 -b 4096 -c -E stride=4 -E stripe-width=8 /dev/md0

Sendo stride o tamanho do chunk da raid, definindo o tamanho dos blocos que serão gravados. E stripe-width sendo o produto do stride pelo número de discos na raid, o que define qual o tamanho dos agrupamentos de blocos que serão enviados para a raid para gravação em paralelo. É interessante observar que essas opções são apenas para raids que façam stripping.

Depois de formatar apropriadamente, a RAID já está pronta para ser montada e receber os arquivos!! 😀

Para salvar a geometria da raid e garantir a montagem prática em futuros boots, é aconselhável configurar o arquivo mdadm.conf com o comando:

mdadm -Es >> /etc/mdadm.conf

Happy Raiding! 💡