br-linux

Artigos br-linux.org
Artigos sobre Linux em bom português, originais e com qualidade

Raid nivel 1 via software em sistemas Linux
Publicado em 29 de maio de 2003

O Luiz Cassetari Vieira Filho (luiz@altoriopreto.com.br) mandou esta substancial contribuição: um completo artigo que ele escreveu sobre RAID nivel 1 via software em Linux. A versão original está no site da Alto Rio Preto Informática empresa em que ele trabalha, e que disponibiliza uma série de outros artigos originais para a consulta pelos interessados.

Veja o texto dele logo abaixo.

Raid nivel 1 via software em sistemas Linux.
Por Luiz Cassetari Vieira Filho (luiz@altoriopreto.com.br)

Raid (Redundant Arrays of Inexpensive Disks), é uma técnica onde os dados ficam armazenados em vários discos para se aumentar a velocidade de acesso/gravação ou/e aumentar a redundância do sistema. Se uma aplicação necessita de uma taxa de I/O muito alta, pode-se ter os dados espalhados em vários HDs e utilizar esses dados em vários HDs ao mesmo tempo. Se um servidor não pode parar por motivo algum, pode-se colocar 2 HDs e copiar tudo que existe em um para o outro. Assim se um dos HDs sofrer algum problema físico, existe uma copia automática em outro HD.

Existem vários tipos de raid. Os mais comuns são os raid de nivel 0, 1 e 5. O raid de nível 0 faz striping dos dados. Ou seja, ele guarda os dados em vários HDs ao mesmo tempo, aumentando a velocidade de I/O. O raid 1, é apenas uma copia de dados. Assim se um HD sofrer algum tipo de pane física, existirá uma copia pronta para entrar em ação. Já o raid 5 é como o raid 0, mas com a redundância do raid 1. Ele grava os dados em vários HDs, entretanto ele guarda a paridade em vários discos. Isso significa que ele sempre vai ter duas copias de qualquer dado que seja gravado no array raid. No caso de um HD morrer, ele ainda vai ter os dados daquele HD espelhados nos outros HDs, sendo possível uma recuperação dos dados.

Obs: RAID NÃO É BACKUP! Se por acidente você digitar um rm -rf /, o sistema irá apagar todos os dados, inclusive das partições espelhadas.

Esse artigo irá tratar do raid nível 1 via software, usando como sistema o Conectiva Linux 9, usando raid em apenas um ponto de montagem.

0: Requerimentos.
Um computador com linux, não precisa ser conectiva, ou conectiva 9, um kernel com suporte a raid (Multi-device support (RAID and LVM) ---> <*> RAID support, <*> RAID-1 (mirroring) mode), o pacote raidtools, e é claro, mais de um HD em seu computador.

1: Instale fisicamente os HDs.
No nosso exemplo iremos usar HDs ide normais, mas em produção seria ideal usar HDs scsi ou ide ATA133. No caso de se usar HD ide, é importante colocar eles em controladoras separadas, pois se a controladora sofrer algum problema, o problema irá se espalhar para os 2 HDs. Mas no nosso teste, os HDs estão na mesma controladora ;)

2: Particione os HDs.
Os HDs não precisam ter as partições do mesmo tamanho, entretanto a partição raid será do tamanho da menor partição.

[root@arp root]# fdisk /dev/hdc

Comando (m para ajuda): n
Comando - ação
   e   estendida
   p   partição primária (1-4)
p
Número da partição (1-4): 1
Primeiro cilindro (1-784, padrão 1):
Usando valor padrão 1
Último cilindro ou +tamanho ou +tamanho M ou  +tamanho K (1-784, padrão
784):
Usando valor padrão 784

Comando (m para ajuda):
Criando uma partição
Usando o fdisk, crie uma nova partição com o comando 'n'. No nosso caso, todo o HD será usado como partição raid, por isso foi criada uma partição ocupando todo o HD. O segundo passo é passar a identidade do HD para RAID.
Comando (m para ajuda): t
Selected partition 1
Código hexadecimal (digite L para listar os códigos): fd
O tipo da partição 1 foi alterado para fd (Detecção automática de RAID
Linux)

Comando (m para ajuda):
Alterando a identificação da partição
Usando o comando 't' do fdisk, a identificação da partição pode ser alterada. O código da partição raid no linux é 'fd'. Fazendo essas alterações, saia do fdisk com o comando 'w'. Repita isso com o segundo HD.

3: Crie o /etc/raidtab.
O /etc/raidtab é o arquivo de configuração do sistema raid. É nele em que estão os HDs a serem usados, o nível de raid, etc.

raiddev /dev/md0
        raid-level               1
        nr-raid-disks            2
        persistent-superblock    1
        chunk-size               8

        device                   /dev/hdc1
        raid-disk                0
        device                   /dev/hdd1
        raid-disk               1

				O arquivo /etc/raidtab
raid-level é o nível do raid.

nr-raid-disks é o numero de partições que irão participar nesse array.

persistent-superblock é uma opção para armazenar um superbloco em todos os discos do array. Muito importante se usar o / em raid, como será visto em um artigo posterior

chunk-size o numero de bytes no striping.

device a partição raid. O raid via software no linux, olha a partição e não o HD como algumas soluções via hardware. Assim você pode fazer com que um HD participe de mais de um array raid ao mesmo tempo.

raid-disk é a posição do disco no array.

Mais informações, man raidtab

4: Crie o array
Para criar o array raid, use o comando mkraid /dev/md0.

[root@arp root]# mkraid /dev/md0
disk 0: /dev/hdc1, 6297448kB, raid superblock at 6297344kB
disk 1: /dev/hdd1, 10032561kB, raid superblock at 10032448kB
[root@arp root]#
Criando o array propriamente dito
Se a saída foi pelo menos parecida com essa, parabéns ;) Você agora deve estar vendo a luzinha do HD piscando como louca. Os HDs estão sendo sincronizados. Se você quiser acompanhar esse processo, olhe o arquivo /proc/mdstat.
[root@arp proc]# cat mdstat
Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 hdd1[1] hdc1[0]
      6297344 blocks [2/2] [UU]
      [==>..................]  resync = 12.0% (761536/6297344) finish=6.7min
speed=13614K/sec
unused devices: 
[root@arp proc]#
Array raid nível 1 sendo criado.
Uma dica legal, é usar um script como esse e ficar olhando o sistema trabalhar ;D

while true; do cat /proc/mdstat; sleep 1; clear; done

Quando o processo acabar, você pode usar o raid como um device normal. Para montar ele, é necessário formatar, exatamente como se faz com um HD comum, mas com a diferença que o processo será espelhado nos 2 HDs.
[root@arp root]# mkfs.ext3 /dev/md0
mke2fs 1.33 (21-Apr-2003)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
788704 inodes, 1574336 blocks
78716 blocks (5.00%) reserved for the super user
First data block=0
49 block groups
32768 blocks per group, 32768 fragments per group
16096 inodes per group
Superblock backups stored on blocks:
        32768, 98304, 163840, 229376, 294912, 819200, 884736

Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done

This filesystem will be automatically checked every 34 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.
[root@arp root]# tune2fs -c0 -i0 /dev/md0
tune2fs 1.33 (21-Apr-2003)
Setting maximal mount count to -1
Setting interval between check 0 seconds
[root@arp root]#
Formatando o device raid
Após a partição formatada, é só colocar ela no fstab e correr pro abraço.
[root@arp mnt]# mount -t ext3 /dev/md0 /mnt/raid
[root@arp mnt]# cd raid
[root@arp raid]# ls
lost+found
[root@arp raid]# mount
/dev/hda2 on / type ext3 (rw)
none on /proc type proc (rw)
/dev/md0 on /mnt/raid type ext3 (rw)
[root@arp raid]# df -hT
Filesystem    Type    Size  Used Avail Use% Mounted on
/dev/hda2     ext3    9.2G  2.4G  6.4G  27% /
/dev/md0      ext3    5.9G   33M  5.5G   1% /mnt/raid
[root@arp raid]#
Tudo funcionando :D

5: Testando
Para testar nosso array raid, vamos copiar um arquivo cheio de zeros para a partição com raid, e fazer um checksum dele para termos certeza que o arquivo não vai se corromper.

[root@arp raid]# dd if=/dev/zero of=/mnt/raid/zeros count=50 bs=1MB
50+0 registros de entrada
50+0 registros de saída
[root@arp raid]# ls
lost+found  zeros
[root@arp raid]# du -sh zeros
51M     zeros
[root@arp raid]# md5sum zeros
25e317773f308e446cc84c503a6d1f85  zeros
[root@arp raid]#
				Criando arquivo cheio de zeros...
Agora pegue uma marreta de 10 kgs, e bata levemente em cima de um dos HDs do array raid, até que se forme um pequeno buraco de uns 15 cm. Se você (ou sua empresa) for como eu e não querer perder permanentemente um dos HDs, apenas retire o cabo de um deles. Se você não quer correr risco algum, desligue o computador, desconecte o cabo, e re-ligue o computador. Se você desligar o HD no quente, normalmente ele irá travar a partição. Isso é completamente esperado, por ser uma solução via software. Ao reiniciar o computador, o sistema irá ler o arquivo /etc/raidtab, e irá verificar os HDs. Como um HD não estará on-line, o raid irá ser iniciado usando apenas um HD. E você não perdeu nenhum dado ;D
[root@arp proc]# cat mdstat
Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 hdc1[0]
      6297344 blocks [2/1] [U_]

unused devices: 
[root@arp proc]#
				/proc/mdstat com um HD morto.
Será que não perdemos nenhum dado mesmo?
Vamos montar a partição raid (se é que você já não colocou no fstab) e fazer um checksum daquele arquivo cheio de zeros que fizemos para teste.
[root@arp mnt]# mount /dev/md0 raid
[root@arp mnt]# cd raid
[root@arp raid]# ls
lost+found  zeros
[root@arp raid]# md5sum zeros
25e317773f308e446cc84c503a6d1f85  zeros
[root@arp raid]#
				Verificando checksum
O checksum é identico! Nós realmente não perdemos nenhum dado :D Agora vamos digamos que você comprou um HD novo, e quer colocar ele no lugar do HD que você marreteou (ou só tirou o cabo). Em primeiro lugar, crie as partições no HD novo como falado anteriormente. Depois use o comando raidhotadd.
[root@arp root]# raidhotadd /dev/md0 /dev/hdd1
[root@arp root]# cat /proc/mdstat
Personalities : [raid1]
read_ahead 1024 sectors
md0 : active raid1 hdd1[2] hdc1[0]
      6297344 blocks [2/1] [U_]
      [>....................]  recovery =  2.2% (144000/6297344)
finish=6.4min speed=16000K/sec
unused devices: 
[root@arp root]#
				Reconstruindo o array
Pronto! Agora estamos reconstruindo o array. Para acompanhar o processo, olhe o arquivo /proc/mdstat. Os dados estão sendo copiados de um HD para outro. E você pode usar a partição normalmente enquanto as partições estão sendo reconstruídas, apenas com uma pequena perca de desempenho ;)

Links: Se desejar mais informações, use esses sites.

http://www-106.ibm.com/developerworks/linux/library/l-raid2/index.html
http://www.uni-mainz.de/~neuffer/scsi/what_is_raid.html
http://linas.org/linux/raid.html
http://www.acnc.com/04_01_0p1.html

Postado por brain em maio 29, 2003 10:05 AM

Comentários para "Raid nivel 1 via software em sistemas Linux"

» Postado por: Humberto Junior em junho 17, 2003 12:15 PM, 200.149.153:

    BOM DIA

    Luiz Cassetari Vieira Filho,

    Estou tentando fazer o Espelhamneto RAID 1 com dois HDs de 40 GB e ate agora
    so consegui isso:

    ------ arquivo /proc/mdstat
    Personalities : [raid1]
    read_ahead 1024 sectors
    md0 : active raid1 hda1[0]
    136448 blocks [2/1] [U_]

    unused devices:

    ------- arquivo raidtab

    raiddev /dev/md0
    raid-level 1
    nr-raid-disks 2
    nr-spare-disks 0
    chunk-size 4
    persistent-superblock 1
    device /dev/hda1
    raid-disk 0
    device /dev/hdc1
    raid-disk 1
    failed-disk 1

    ----- meus HDs
    [root@servidor /root]# df -h
    Filesystem Size Used Avail Use% Mounted on
    /dev/hda2 37G 11G 24G 31% /
    /dev/hdb2 36G 33M 33G 1% /mnt/mirror

    ----- detalhes dos HDs
    [root@servidor /root]# fdisk -l

    Disco /dev/hda: 255 cabeças, 63 setores, 4870 cilindros
    Unidades = cilindros de 16065 * 512 bytes

    Dispositivo Boot Início Fim Blocos Id Sistema
    /dev/hda1 1 17 136521 82 Linux swap
    /dev/hda2 18 4870 38981722+ 83 Linux

    Disco /dev/hdb: 255 cabeças, 63 setores, 4870 cilindros
    Unidades = cilindros de 16065 * 512 bytes

    Dispositivo Boot Início Fim Blocos Id Sistema
    /dev/hdb1 * 1 129 1036161 82 Linux swap
    /dev/hdb2 130 4870 38082082+ 83 Linux

    No livro esta escrito que hdbx e para dsico sobresalentes, mas so que e o meu
    HD de Espelho...........................onde estou errando para que o arquivo MDSTAT
    fique certo mostrando hda2 principal e o espelho no hdb2 (mirroring). Tenho que parcionar e formatar denovo para hdc ou hdd para q funcione, mas o HD principal e o hda....como faço agora para resolver meu problema.

    desde ja agradeço.

 

» Postado por: cassiano em setembro 23, 2003 07:41 PM, 200.167.84.:

    olã blz meu nome ~e cassiano sou de piraju-sp e estou procurando sobre raid e acho que vc pode me ajudar o professor pediu assim
    o que e raid ..
    como funciona ..
    ou seja algumas coisas principais sobre raid vc me retorna blz ..... falow t+ .......valew.

 

» Postado por: Rodrigo de Oliveira em outubro 22, 2003 08:53 AM, 200.161.70.:

    E ae galera, blz

    A empresa adquiriu um IBM x235 com 4 hd´s, gostaria de saber se alguem saber onde posso encontrar instalacao em RAID 5.

    desde jah agradeço.

    Rodrigo

 

» Postado por: Dechen em novembro 13, 2003 07:51 AM, 200.158.180:

    Outra maneira de fazer é usando dd ....
    crie as partições e depois

    dd if=/dev/hda of=/dev/hdc

    para quem precisa apenas criar o espelho

 

» Postado por: Jardel em janeiro 6, 2004 05:51 PM, 200.179.153:

    Raid via software!!!

 

» Postado por: Pedro H. em janeiro 27, 2004 11:12 AM, 200.206.26.:

    Alguem ai tem um script que fica olhando se algum HD caiu, e manda um email avisando?
    Obrigado.

 

» Postado por: Weslley em março 23, 2004 04:17 PM, 200.165.143:

    Aê galera, estou querendo saber se existe alguma incompatibilidade com o uso de RAID no red hat 7.1 com o kernel 2.4.2.

    Veleu!!!!!

 

» Postado por: Daniel Bastos em março 28, 2004 09:33 AM, 200.164.136:

    Caros,

    Eu já instalei o meu Linux normalmente, criando as partições através do instalador do Conectiva. Após estar tudo funcionando, me foi solicitado que fizesse o espelhamento dos HD´s (RAID 1). E Agora ? Terei que formatar os meus hd´s novamente ou posso mudar as partição existente do meu hd sem ter que apagar tudo e reconfigurar tudo novamente. Bastando apenas instalar o novo hd e fazer o RAID, ou seja, "RAID-1 on fly".

    Grato,

    Daniel Bastos
    Viper Solutions
    85.226.1306

 

» Postado por: walter em maio 14, 2004 12:08 PM, 200.184.29.:

    BOm dia,

    Gostaria de Saber como faco pra fazer um RAid no linux 9 tenho 2 HDS e quero que eles viram um so

    um HD de 80 gb e 1 de 160 virarem um de 240 como posso fazer isto e possilvel

    obrigado

    walter

    waltterm@pop.com.br
    waltterm@hotmail.com

 

» Postado por: tiago em junho 12, 2004 06:54 PM, 200.191.212:

    eu queria saber o que é ''raid" e para
    que ele serve.

 

» Postado por: Zithromax em setembro 25, 2004 09:34 AM, 65.75.139.9:

    Zithromax online antibiotic.

 

» Postado por: Buy Amoxicillin em outubro 5, 2004 10:58 AM, 67.19.91.50:

    Information on Amoxicillin online.

 

» Postado por: Cialis em outubro 9, 2004 10:30 AM, 67.19.91.50:

    Cialis information site.

 

» Postado por: Levaquin em outubro 13, 2004 10:01 AM, 67.19.91.50:

    Levaquin online information.

 

» Postado por: Remeron prescription em outubro 23, 2004 09:11 AM, 208.53.138.:

    Remeron online site.

 

» Postado por: Elidel em novembro 3, 2004 05:58 PM, 67.19.91.50:

    Elidel online site.

 

Antes de comentar...

- Preserve a qualidade desta discussão
- Leia os Termos de Uso.
- Este formulário deve ser usado para comentários sobre a notícia. Se você tem dúvidas ou precisa de ajuda, use o Fórum.
- Mantenha o foco nos argumentos e no assunto
- Não faça ataques pessoais.
- Pense 5 vezes antes de entrar em discussões inúteis, como "qual é a melhor distribuição/ambiente gráfico/linguagem de programação/etc.", mesmo se alguém já tiver provocado - um erro não justifica o outro
- Não seja um e-mala ;-)

Envie seu comentário









Lembrar as informações pessoais?


Atenção: Este formulário deve ser usado para comentários sobre a notícia. Se você tem dúvidas ou precisa de ajuda, use o Fórum, onde mais pessoas estarão disponíveis para respondê-lo..






Nota: os comentários pertencem a seus respectivos autores e são de responsabilidade de quem os postou. O restante desta nota está disponível sob a licença GNU FDL, exceto se explicitamente declarado em contrário.