Como fazer RAID 0(zero)
Autor: Patrick Brandão
E-mail: contato@tmsoft.com.br
Copyright: Proibida a cópia ou reprodução do conteúdo ou parte dele, exceto se o nome do autor, e-mail e este aviso constarem na cópia.

Esta documentação tem como proposito ensinar e exemplificar a aplicação de RAID 0 via software, usando Linux.

Caso não esteja familiarizado com o termo RAID, recomendo a leitura desse artigo técnico: http://pt.wikipedia.org/wiki/RAID

1 - O que é e como funciona RAID 0

União de unidades de armazenamento. Necessário duas ou mais unidades. O tamanho das unidades serão unidos (2 unidades de 200 gigas cada resultarão em uma unidade de 400 gigas). Ao gravar um arquivo, ele será dividido em padaços e cada pedaço será gravado em uma unidade. Assim, se forem necessários 200 operações de escrita para gravar o arquivo, cada disco (considerando dois disco no exemplo) fará apenas 100 operações. O arquivo será gravado na metade do tempo normal. Na leitura o processo é o mesmo, cada disco fornecerá sua parte do arquivo, reduzindo o tempo de leitura, e aumentando a largura de banda.

Vantagem: possibilita conseguir enormes espaços de armazenamento, com velocidades reais mais rápidas do que o hardware dos discos são capazer de prover. Largura de banda com no mínimo o dobro da velocidade de escrita e leitura.

Desvantagem: no caso de uma das unidades envolvidas sofrer dano, todo o sistema de arquivos é perdido, pois todos os dados gravados no sistema RAID 0 precisam das partes envolvidas para ser totalmente legivel, o sistema RAID 0 tem que ser remontado com um novo disco.

Onde se deve usar RAID 0: sistemas de cache de arquivos temporários, ou onde a perda dos arquivos não significa dano sério.

Há duas de fazer RAID:
  • Hardware: quando a placa-mãe ou controladora RAID disponível fisicamente no servidor é capaz de realizar essa tarefa entre os discos disponíveis. O sistema operacional não é capaz de identificar a existencia de RAID, ele apenas perceberá a unidade resultando como sendo um único disco. No caso de danos nos discos, a controladora RAID tomará a medida adequada.
  • Software: o sistema operacional percebe a existencia de vários discos, e se encarrega de fazer o RAID entre as partições pre-configuradas nesses discos. Em casos de danos nos discos ou partições, o RAID pode tomar uma ação pre-configurada ou parar, exigindo que o administrador do sistema repare-o.


    1 - Como fazer RAID via Linux

    Para explicar, usarei o seguinte ambiente:
    • No disco principal está o sistema (disco /dev/sda), esse disco não será envolvido na implementação.
    • Existem dois discos recem instalados no servidor, /dev/sdb e /dev/sdc, ambos SCSI de 3 Gigabytes cada.
    • Ao terminar o RAID, o novo array (união dos discos) será montado na pasta /supercache, o tamanho final será de 6 Gigabytes.
    2 - Preparando as partições

    Com a ajuda do programa fdisk ou cfdisk, crie uma partição com 100% do disco, o tipo da partição deve ser FD (Linux raid autodetect)
    Exemplo de como ficou o particionamento no nosso exemplo:
    root@servidor:~# fdisk -l
    Disk /dev/sdb: 3221 MB, 3221225472 bytes
    255 heads, 63 sectors/track, 391 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1         391     3140676   fd  Linux raid autodetect
    
    Disk /dev/sdc: 3221 MB, 3221225472 bytes
    255 heads, 63 sectors/track, 391 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdc1               1         391     3140676   fd  Linux raid autodetect
    root@servidor:~#
    3 - Unindo partições e criando o disco RAID

    No comando abaixo, informaremos ao sistema operacional por meio do comando mdadm que as duas partições acima serão unidas em uma única unidade lógica. Informaremos que desejamos fazer um raid0 (--level=raid0), o caminho do dispositivo lógico será /dev/md0 (-C /dev/md0), que o RAID envolverá 2 partições já criadas (--raid-devices=2) e em seguida, o caminho das partições. (/dev/sdb1 e /dev/sdc1)
    root@servidor:~# mdadm -C /dev/md0 --level=raid0 --raid-devices=2 /dev/sdb1 /dev/sdc1
    mdadm: array /dev/md0 started.
    Agora, iremos imprimir a lista de discos, podemos notar que uma nova unidade aparecerá (/dev/md0)
    root@servidor:~# fdisk -l
    Disk /dev/sdb: 3221 MB, 3221225472 bytes
    255 heads, 63 sectors/track, 391 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdb1               1         391     3140676   fd  Linux raid autodetect
    
    Disk /dev/sdc: 3221 MB, 3221225472 bytes
    255 heads, 63 sectors/track, 391 cylinders
    Units = cylinders of 16065 * 512 = 8225280 bytes
    
       Device Boot      Start         End      Blocks   Id  System
    /dev/sdc1               1         391     3140676   fd  Linux raid autodetect
    
    Disk /dev/md0: 6431 MB, 6431965184 bytes
    2 heads, 4 sectors/track, 1570304 cylinders
    Units = cylinders of 8 * 512 = 4096 bytes
    
    Disk /dev/md0 doesn't contain a valid partition table
    
    Você poderá observar que o disco lógico /dev/md0 não possui uma tabela de partição. Não é necessário particionar esse disco, pois ele é a união de duas partições reais.
    O próximo passo será formatá-lo com um tipo de sistema de arquivos.

    4 - Formatando a partição RAID 0
    root@servidor:~# mkreiserfs /dev/md0
    mkreiserfs 3.6.19 (2003 www.namesys.com)
    
    A pair of credits:
    Joshua Macdonald wrote the first draft of the transaction manager. Yuri Rupasov
    did testing  and benchmarking,  plus he invented the r5 hash  (also used by the
    dcache  code).  Yura  Rupasov,  Anatoly Pinchuk,  Igor Krasheninnikov,  Grigory
    Zaigralin,  Mikhail  Gilula,   Igor  Zagorovsky,  Roman  Pozlevich,  Konstantin
    Shvachko, and Joshua MacDonald are former contributors to the project.
    
    Many persons came to www.namesys.com/support.html,  and got a question answered
    for $25, or just gave us a small donation there.
    
    
    Guessing about desired format.. Kernel 2.6.28.10-prol7 is running.
    Format 3.6 with standard journal
    Count of blocks on the device: 1570304
    Number of blocks consumed by mkreiserfs formatting process: 8259
    Blocksize: 4096
    Hash function used to sort names: "r5"
    Journal Size 8193 blocks (first block 18)
    Journal Max transaction length 1024
    inode generation number: 0
    UUID: b357be78-2ef6-496b-8ca3-eb14421ba63b
    ATTENTION: YOU SHOULD REBOOT AFTER FDISK!
            ALL DATA WILL BE LOST ON '/dev/md0'!
    Continue (y/n):y<ENTER>
    Initializing journal - 0%....20%....40%....60%....80%....100%
    Syncing..ok
    
    Tell your friends to use a kernel based on 2.4.18 or later, and especially not a
    kernel based on 2.4.9, when you use reiserFS. Have fun.
    
    ReiserFS is successfully created on /dev/md0.
    root@servidor:~#
    5 - Montando a partição RAID 0 em uma pasta
    root@servidor:~# mount /dev/md0 /supercache
    root@servidor:~# df -h
    Filesystem            Size  Used Avail Use% Mounted on
    /dev/hda2             7.6G  6.6G 1016M  87% /
    /dev/md/0             6.0G   33M  6.0G   1% /supercache
    
    Não se esqueça de declarar no arquivo /etc/fstab a relação de montagem.

    6 - Programando RAID para iniciar automaticamente com o Linux

    Alem da configuração normal do arquivo /etc/fstab, é necessário configurar o arquivo /etc/mdadm.conf

    A - Declarar partições que participam de sistemas RAID:
    root@servidor:~# echo 'DEVICE /dev/sdb*[0-9] /dev/sdc*[0-9]' > /etc/mdadm.conf
    
    B - Declarar o RAID ativo e o id do array:
    root@servidor:~# mdadm --examine --scan >> /etc/mdadm.conf
    
    Veja como ficou o arquivo /etc/mdadm.conf apos os comandos acima (arquivo válido apenas para nosso exemplo):
    root@servidor:~# cat /etc/mdadm.conf
    DEVICE /dev/sdb*[0-9] /dev/sdc*[0-9]
    ARRAY /dev/md0 level=raid0 num-devices=2 UUID=83307bf6:8745a2b8:24b64cab:910738ac
    

    O sistema RAID está pronto. Reinicie o servidor e certifique-se de que a unidade é montada automaticamente, conforme sua configuração de /etc/fstab.