RAID no Linux (múltiplos HDs aumentando performance, backup em tempo real...)

Iniciado por gabriel0085, 21 de Novembro de 2007, 04:39

tópico anterior - próximo tópico

gabriel0085

 
Autor: Rafael Siqueira Telles Vieira

Fonte: http://gelsol.lia.ufc.br/wiki/Artigos/RAID







Artigos / RAID - Redundant Array of Independent Disks



Índice

    * Definição
    * Qual a função do RAID?
    * Exemplo simples
    * Conclusão
    * Referências




Definição

Vetor Redundante de Discos Independente é simplesmente um meio de se criar disco virtual que atuará como um ponteiro para um conjunto de unidades de armazenamento que ficam alocadas em posições diferentes de um vetor. Em outras palavras, é como se colocássemos vários discos rígidos em uma fila e possuíssemos um apelido para todos os disco rígidos da fila, independentemente da posição que ocupam. Desta forma, se tivermos 4 discos rígidos na fila e atribuíssemos para eles o nome de MeusDados(nosso disco virtual), ao fazermos acesso aos MeusDados teríamos acesso as 4 disco rígidos ao mesmo tempo. Mas como isso é possível? Isto não gera conflito? Não, de forma alguma, pois no caso do RAID, como se trata de um vetor redundante, isto quer dizer que todos os disco rígidos dentro da fila ou vetor possuem exatamente os mesmo dados armazenados em si, com uma única exceção para o RAID-linear(um tipo de falso de RAID) que veremos logo adiante.




Qual a função de um RAID?

A função do RAID é basicamente evitar a perca de dados devido a erros de hardware ou mecânicos, como possuímos um vetor ou fila de discos com dados redundantes, se um destes discos ou queimar, ou tiver problemas de consistência de dados, ou mal funcionamento, poderemos simplesmente tirar o disco específico da fila, enquanto o nosso sistema armazenado no vetor continuará funcionando normalmente. Imagine então um servidor que possui 2 discos em RAID, se um de seus discos rígidos parar de funcionar, teremos o segundo disco com exatamente os mesmos dados do primeiro funcionando no mesmo instante que ocorreu o problema, de modo que o servidor continuará no ar(on-line), como se nada tivesse acontecido. Contudo, vale salientar que o RAID não exclui erros humanos, isto quer dizer que se um vírus ou alguém deletar um arquivo de nosso RAID, o arquivo será deletado de todos os dispositivos no RAID, da mesma forma se um arquivo estiver corrompido e for gravado no RAID, ele será gravado ou salvo corrompido em todos os discos. O RAID também servem para aumentar o desempenho de entrada e saída de dados na nossa unidade de armazenamento, já que estes estão presente em vários dispositivos podemos requisita-los de fontes diferentes simultaneamente. Como por exemplo, se abríssemos o Gimp e um vídeo ao mesmo tempo, O Gimp poderia ser lido a partir do primeiro dispositivo presente em nosso vetor enquanto que o vídeo fosse lido a partir do segundo.




Tipos de RAID

Há dois tipos mais abrangentes de RAID, o RAID via hardware e o RAID via software. Quando realizamos um RAID via hardware, possuímos ou uma placa-mãe que dispõe de tal recurso ou então uma placa controladora que será acoplada a nossa placa-mãe para realizar o processo, aonde cada unidade de armazenamento possuíra um slot respectivo aonde poderá ser encaixado. O acesso para entrada e saída de dados em tais unidades será todo controlado pelo hardware do computador. Logo, o hardware será responsável por duplicar os dados em cada unidade e garantir assim sua integridade, não existindo, portanto, um disco virtual. No RAID via hardware, também é necessário que todos os dispositivos presentes sejam exatamente iguais quanto ao dispositivo, a capacidade de armazenamento e preferencialmente quanto a marca inclusive, para se evitar conflitos, restrição que não ocorre no RAID via software.

Quando realizamos um RAID via software, há 7 níveis de RAID que poderão ser realizados atualmente e que serão expostos neste artigo: RAID-linear, RAID 0, RAID 1, RAID 2, RAID 3, RAID 4, RAID 5. Além dos tipos básico de RAID, ainda podemos fazer combinações destes RAIDs, obtendo assim RAIDs híbridos! por exemplo, RAID 50, seria a combinação do RAID 5 com um RAID 0, logo se algum dia você ouvir falar em um RAID 25 não precisa entrar em pânico ;-). É bom salientar que os RAIDs não se limitam, apesar do que o nome sugere, a apenas discos rígidos, mas sim, eles se aplicam a toda e qualquer forma de armazenamento existente no computador, podemos fazer RAIDs de disquetes, cds, hds, flash disks, pendrives, etc. É também bom lembrar que como estamos trabalhando via software os dispositivos não precisa ter a mesma capacidade de armazenamento, de fato você pode inclusive trabalhar com dispositivos e/ou partições de discos diferentes porém estes serão limitados pelo dispositivo/partição de menor capacidade, caso ambos não tenham a mesma quantidade.

RAID linear – É simplesmente quando concatenamos(ou seja unimos), todos os elementos do vetor em um só, ou seja todos os dispositivos na nossa fila ou vetor atuam como um só dispositivo. Desta maneira se eu tiver dois hds(disco rígido ou hard disk), um de 40Gb e outro de 80 Gb, eu posso criar um hd de 120Gb concatenando os dois através de um RAID linear. Por isto este RAID é dito falso, pois não há redundância dos dados e a perca de um dos dois hds poderá resultar em dados corrompidos ou falhas no sistema como um todo.

RAID 0 – Também chamado de Stripping, é quando dividimos todos os dados enviados para o nosso disco virtual sob a forma de segmentos(stripes) de tamanho fixo, desta maneira parte de nosso dados podem ser gravados em todos os dispositivos presentes no RAID. Desta forma se definimos tais segmentos como 64kb , e enviamos este arquivo para um RAID com dois hds, 64kb serão gravados no primeiro hd e os 64kb restantes no seguinte, isto aumenta em muito o desempenho do sistema, mas compromete sua integridade. Assim como no caso do RAID linear, não há redundância e a perca de um dos dispositivos pode comprometer o sistema inteiro.

RAID 1 – Também chamado de espelhamento ou mirroring, é a forma mais comum de RAID. Colocamos dois ou mais dispositivos de armazenamento e uma fila ou vetor sendo que os dados são gravados de maneira redundante em todos os dispositivos presentes no vetor. Se por um acaso alguns destes dispositivos falhar, os outros dispositivos assumem a responsabilidade pela resposta da entrada e saída de dados no nosso disco virtual. E através dos dispositivos sobreviventes podemos inclusive recuperar os dados no dispositivo defeituoso por simples processo de cópia.

RAID 2– Raramente são usados, e em algum momento ficaram obsoletos pelas novas tecnologias de disco. RAID 2 é similar ao RAID 4, mas armazena informação ECC (Error Correcting Code), que é a informação de controle de erros, no lugar da paridade. Este facto possibilitou uma pequena protecção adicional, visto que todas as unidades de disco mais novas incorporaram ECC internamente. RAID 2 origina uma maior consistência dos dados se houver queda de energia durante a escrita. Baterias de segurança e um encerramento correcto podem oferecer os mesmos benefícios.

RAID 3 - RAID 3 é similar ao RAID 4, excepto pelo facto de que ele usa o menor tamanho possível para o stripe. Como resultado, qualquer pedido de leitura invocará todos os discos, tornando as requisições de sobreposição de I/O difíceis ou impossíveis. A fim de evitar o atraso em razão da latência rotacional, o RAID 3 exige que todos os eixos das unidades de disco estejam sincronizados. A maioria das unidades de disco mais recentes não possuem a opção de sincronização do eixo, ou se são capazes disto, faltam os conectores necessários, cabos e documentação do fabricante.

RAID 4 - Funciona com três ou mais discos iguais. Um dos discos guarda a paridade (uma forma de soma de segurança) da informação contida nos discos. Se algum dos discos avariar, a paridade pode ser imediatamente utilizada para reconstituir o seu conteúdo. Os restantes discos, usados para armazenar dados, são configurados para usarem segmentos suficientemente grandes (tamanho medido em blocos) para acomodar um registo inteiro. Isto permite leituras independentes da informação armazenada, fazendo do RAID 4 um array perfeitamente ajustado para ambientes transaccionais que requerem muitas leituras pequenas e simultâneas. O RAID 4 assim como outros RAID's, cuja característica é utilizarem paridade, usam um processo de recuperação de dados mais envolvente que arrays espelhados, como RAID 1. Este nível também é útil para criar discos virtuais de grande dimensão, pois consegue somar o espaço total oferecido por todos os discos, exceto o disco de paridade. O desempenho oferecido é razoável nas operações de leitura, pois podem ser utilizados todos os discos em simultâneo. Sempre que os dados são escritos no array, as informações são lidas do disco de paridade e um novo dado sobre paridade deve ser escrito para o respectivo disco antes da próxima requisição de escrita ser realizada. Por causa dessas duas operações de I/O, o disco de paridade é o factor limitante do desempenho total do array. Devido ao facto do disco requerer somente um disco adicional para protecção de dados, este RAID é mais acessível em termos monetários que a implementação do RAID 1.

RAID 5 - O RAID 5 é frequentemente usado e funciona similarmente ao RAID 4, mas supera alguns dos problemas mais comuns sofridos por esse tipo. As informações sobre paridade para os dados do array são distribuídas ao longo de todos os discos do array , ao invés de serem armazenadas num disco dedicado, oferecendo assim mais desempenho que o RAID 4, e, simultaneamente, tolerância a falhas. Para aumentar o desempenho de leitura de um array RAID 5, o tamanho de cada segmento em que os dados são divididos pode ser optimizado para o array que estiver a ser utilizado. O desempenho geral de um array RAID 5 é equivalente ao de um RAID 4, excepto no caso de leituras sequenciais, que reduzem a eficiência dos algoritmos de leitura por causa da distribuição das informações sobre paridade. A informação sobre paridade ao ser distribuída ao longo de todos os discos, havendo a perda de um, reduz a disponibilidade de ambos os dados e da informação sobre paridade, até à recuperação do disco que falhou. Isto pode causar degradação do desempenho de leitura e de escrita.




Exemplo Simples
Observação: Veja o software necessários para criação do RAID no final deste artigo.


Citar
1. Crie uma partição do tipo fd(Linux RAID autodetect)

2. Crie o arquivo /etc/raidtab

3. Crie sua RAID usando mkraid(*)

4. Formate sua RAID com um sistema de arquivos



1. Para criar uma partição do tipo Linux RAID autodetect, basta usar o comando cfdisk [dipositivo] e ao escolher o tipo(Type) da partição escreva FD(que é o número em hexadecimal que representa o tipo RAID).





2. Para criar o arquivo raidtab use o seu editor de textos favorito, ele deve ter o seguinte formato para uma RAID nível 1, pode ocorrer algumas pequenas variações dependendo do tipo de RAID que você queira usar, mas este pode ser considerado um modelo genérico.




raiddev – O nosso disco virtual, no caso /dev/md0
raid-level – O nível escolhido para o nosso RAID, no caso 1
nr-raid-disks – O número de dispositivos em nosso RAID, no caso 2
persistente-superblock – Escreve uma espécie de indice nos discos para que possa acessá-los, normalmente só é preciso de 1.
Depois destes parametros segue uma lista de devices(dispostivos) e sua posição no vetor ou fila(raid-disk), no caso vemos que o dispositivo /dev/hda2 está na posição 0, enquanto /dev/hdd1 está na posição 1. Chunk-Size é o tamanho do segmento(stripe) utilizado para RAID 0.



3. Em um terminal como root execute o mkraid, depois de ter salvo o arquivo raidtab

[root@arp root]# mkraid /dev/md0

disk 0: /dev/hda2, 6297448kB, raid superblock at 6297344kB
disk 1: /dev/hdd1, 10032561kB, raid superblock at 10032448kB


Você pode acompanhar o processo de construção do seu RAID através do comando $cat /proc/mdstat

[root@arp proc]# cat mdstat

Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 hdd1[1] hda2[0]
      6297344 blocks [2/2] [UU]
      [==>..................]  resync = 12.0% (761536/6297344) finish=6.7min
speed=13614K/sec
unused devices:


Quando estiver acabado, repare que são listados os dispositivos presentes no RAID bem como o ponto de montagem do hd virtual(md0).



O comando lsraid, pode lhe indicar o status de seu RAID.






Conclusão

Pronto espero que este artigo sirva de ajuda a todos que desejem fazer um RAID e veja que é um processo bem simples, mas que pode ser complicado.

Vale lembrar que como estamos realizando um RAID via software precisamos de algumas ferramentas (que incluem o mkraid por exemplo) para realizá-lo.

Utilize o RAID-tools e/ou Mdadm.




Referências

    * http://pt.wikipedia.org/wiki/RAID
    * http://www.conectiva.com/doc/livros/online/9.0/servidor/raid.html
    * http://www.webopedia.com/TERM/R/RAID.html
    * http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=4356&pagina=1
    * http://piterpunk.info02.com.br/artigos/raid-slackware.html




Autor: Rafael Siqueira Telles Vieira

yzarc

ol'a, fiz um raid 0 e funciona perfeitamente. porem o system monitor applet do gnome nao é capaz de indicar sua utilização. tem como corrigir este erro?
outra coisa menos importante seria uma ferramenta q medisse a performance de partições. para saber se realmente valeu apena. 
; Linux is almost there!

Polaco

RAID 0 comanda, uma pena que o sistema fique mais frágil, mas por outro lado, o ganho em desempenho é considerável, meu desktop caseiro está configurado dessa forma e empiricamente percebo um ganho de mais de 100% de desempenho em aplicações de uso intensivo de disco, como cópia de arquivos para o mesmo disco. :)
Ubuntu 10.04 x64 @ Dell Optiplex 740