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. 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.
1: Instale fisicamente os HDs.
2: Particione os HDs.
[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):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):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.
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 [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]#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:
Uma dica legal, é usar um script como esse e ficar olhando o sistema
trabalhar ;Dwhile 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]#
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]#
5: Testando [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:
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 checksumO 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:
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. 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:
» Postado por: cassiano em setembro 23, 2003 07:41 PM, 200.167.84.:
» Postado por: Rodrigo de Oliveira em outubro 22, 2003 08:53 AM, 200.161.70.:
» Postado por: Dechen em novembro 13, 2003 07:51 AM, 200.158.180:
» Postado por: Pedro H. em janeiro 27, 2004 11:12 AM, 200.206.26.:
» Postado por: Weslley em março 23, 2004 04:17 PM, 200.165.143:
» Postado por: Daniel Bastos em março 28, 2004 09:33 AM, 200.164.136:
» Postado por: walter em maio 14, 2004 12:08 PM, 200.184.29.:
» Postado por: tiago em junho 12, 2004 06:54 PM, 200.191.212:
» Postado por: Buy Amoxicillin em outubro 5, 2004 10:58 AM, 67.19.91.50:
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
|