Redundância de discos (RAID1) com Debian Squeeze (para sistemas em produção): mudanças entre as edições

De Eriberto Wiki
Ir para navegação Ir para pesquisar
Linha 149: Linha 149:
Dentro do ambiente do ''fdisk'', pressione "''p''" e ''ENTER'' para ver o esquema de particionamento. Se você instalou o Debian corretamente, notará a presença do "''ID System''" como sendo "''83 Linux''". Deveremos mudar isso para "RAID Linux". Para tanto, pressione "''t''" e ''ENTER''. Como ''número da partição'', pressione "''1''" e ''ENTER''. Como ''código da partição'', pressione ''fd'' e ''ENTER''. Para conferir, pressione "''p''" e ''ENTER''. Faça o mesmo procedimento para a outra partição. No fim, salve e saia, pressionando "''w''" e ''ENTER''.
Dentro do ambiente do ''fdisk'', pressione "''p''" e ''ENTER'' para ver o esquema de particionamento. Se você instalou o Debian corretamente, notará a presença do "''ID System''" como sendo "''83 Linux''". Deveremos mudar isso para "RAID Linux". Para tanto, pressione "''t''" e ''ENTER''. Como ''número da partição'', pressione "''1''" e ''ENTER''. Como ''código da partição'', pressione ''fd'' e ''ENTER''. Para conferir, pressione "''p''" e ''ENTER''. Faça o mesmo procedimento para a outra partição. No fim, salve e saia, pressionando "''w''" e ''ENTER''.


Uma vez alterada a identificação das partições de ''/dev/sdb'' para ''RAID Linux'', faça o mesmo com as partições de ''/dev/sda''.
'''IMPORTANTE!''' Uma vez alterada a identificação das partições de ''/dev/sdb'' para ''RAID Linux'', faça o mesmo com as partições de ''/dev/sda''.


O próximo passo será incluir o esquema RAID no fim do seu arquivo de configuração. Para ver o esquema, utilize o seguinte comando:
O próximo passo será incluir o esquema RAID no fim do seu arquivo de configuração. Para ver o esquema, utilize o seguinte comando:

Edição das 10h36min de 18 de janeiro de 2011

by (C) João Eriberto Mota Filho <eriberto (a) eriberto pro br>

Artigo criado em: 13 de janeiro de 2011.

Última atualização: veja o rodapé desta página.

Tiny URL ou bit.ly: http://bit.ly/raid1_squeeze_producao



Este tutorial é destinado a quem possui algum sistema já em produção (com Debian Squeeze) e precisa implementar a redundância de dados entre dois HDs (RAID1).

O RAID1

RAID é a sigla de Redundant Array of Independent Drives ou agrupamento redundante de discos independentes. Há vários níveis de RAID, sendo que neste artigo nos interessa o nível um.

No nível um (RAID1), teremos que trabalhar com pares de disco. Neste artigo trabalharemos apenas com um par. Quando um dado é enviado para o disco, na verdade, ele é escrito, ao mesmo tempo, nos dois discos. Caso um dos dois discos falhe, o outro continuará a operar normalmente. Com isso, não teremos a perda de dados e nem da disponibilidade do sistema.

Tendo em vista o baixo custo dos HDs atualmente, é extremamente indicado o uso de RAID1 em todos os ambientes, inclusive em casa.

O cenário deste artigo e as variações possíveis

Neste artigo utilizaremos um cenário onde teremos que espelhar um HD com duas partições: uma que contém a raiz e outra que contém o /home.

A clonagem da partição raiz é um pouco complicada, pois o sistema já está em produção e ela é necessária todo o tempo. Então, procedimentos especiais deverão ser adotados. Já a partição /home será bem mais simples. Não haverá partição de swap, pois partimos do princípio que, atualmente, todos preferem trabalhar com swap em arquivo.

Outras variações que poderão ser implementadas facilmente após o entendimento deste tutorial. Três delas:

  • A existência de uma única partição para todo o sistema, sendo esta espelhada.
  • A existência de várias partições para todo o sistema, sendo todas espelhadas.
  • O espelhamento de apenas algumas partições do sistema, como a que contém o /home, por exemplo.

É importante dizer que a partição que será espelho de outra deverá ter o exato tamanho da original (situação ideal) ou ser maior.

Procedimentos iniciais

Inicialmente, instale o pacote mdadm, que é responsável pela administração do sistema de RAID:

# apt-get install mdadm
Obs: MD é a sigla de Multiple Devices. Essa sigla será muito utilizada a partir de agora. Um exemplo disso é o dispositivo /dev/md0, que será criado adiante.

Considerando que o HD principal seja o /dev/sda e que o segundo HD já esteja disponível como /dev/sdb e, ainda, que os dois discos sejam exatamente do mesmo tamanho, utilizando o comando dd, clone o MBR do primeiro disco para o segundo, de forma que os esquema de particionamento permaneça o mesmo. Para isso, execute o comando:

# dd if=/dev/sda of=/dev/sdb bs=512 count=1
Lembre-se que você poderá adotar outros modelos de implementação, como espelhar apenas uma partição em um disco menor. Neste caso, o particionamento deverá ser feito manualmente, dispensando a cópia com o dd.

O próximo passo será reiniciar a máquina para que os módulos RAID sejam carregados e para que o sistema operacional reconheceça o novo esquema de particionamento do segundo HD. Para isso, execute:

# reboot



Clonagem da partição raiz

A partir de agora, teremos que criar um array RAID (/dev/md0), associar a primeira partição do segundo HD (/dev/sdb1) ao primeiro dispositivo RAID (/dev/md0). Depois disso, como só poderemos escrever em /dev/md0 (e não mais em /dev/sdb1), necessitaremos formatar /dev/md0 e, depois, copiar todos os dados de /dev/sda1 para /dev/md0 (que contém /dev/sdb1).

Para criar o array /dev/md0, associando o /dev/sdb1 ao mesmo, execute:

# mdadm -C /dev/md0 -l 1 -n 2 missing /dev/sdb1
No comando anterior, dissemos que queremos criar o /dev/md0, nível 1 (RAID1), com dois dispositivos (que serão o /dev/sda1 e o /dev/sdb1). Como só iremos adicionar o /dev/sdb1 por enquanto, pois o /dev/sda1 possui o sistema e está ocupado, temos que usar a palavra missing, pois dissemos no comando que seriam adicionados dois dispositivos.

Depois de pressionar o ENTER no comando anterior, surgirá na tela:

mdadm: Note: this array has metadata at the start and
    may not be suitable as a boot device.  If you plan to
    store '/boot' on this device please ensure that
    your boot-loader understands md/v1.x metadata, or use
    --metadata=0.90
Continue creating array?

Para responder à pergunta, pressione a tecla "y" e ENTER. Como resultado, surgirá na tela:

mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.

Para ver o array criado, utilize o comando:

# cat /proc/mdstat

O resultado será:

Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10] 
md0 : active (auto-read-only) raid1 sdb1[1]
      19529656 blocks super 1.2 [2/1] [_U]
      
unused devices: <none>
Observe que foi criado um dispositivo /dev/md0, funcionando como RAID1, e que o mesmo contém o /dev/sdb1.

O próximo passo será formatar o /dev/md0. Usarei o filesystem Ext4 com 0.5% de espaço reservado ao superusuário.

# mkfs.ext4 -m .5 /dev/md0

A seguir, deveremos montar o /dev/md0 em /mnt e copiar o conteúdo da partição raiz (exceto o /home). Para isso, utilizaremos o comando rsync, que permite excluir arquivos e diretórios de uma cópia. Então, inicialmente, instale o rsync:

# apt-get install rsync

Monte o /dev/md0:

# mount /dev/md0 /mnt

Copie tudo, menos o conteúdo do /home (que será colocado em outro array), o conteúdo do próprio /mnt (para evitar um loop de sistema) e o conteúdo do /proc e do /sys (para evitar uma paralisação do sistema):

# rsync -av --exclude=/home/* --exclude=/mnt/* --exclude=/proc/* --exclude=/sys/* / /mnt
Observe que o conteúdo de /proc e de /sys é virtual e estará disponível quando a máquina for reinicializada.

Terminada a cópia, verifique se tudo está ok:

# ls /mnt

Desmonte o /dev/md0:

# umount /dev/md0



Clonagem da partição que contém o /home

Deveremos realizar o mesmo procedimento feito com a partição raiz, em relação à partição que contém o /home, gerando o /dev/md1. Mas por que simplesmente não associamos o /dev/sda2, que contém o diretório /home, ao /dev/md1? Simples: porque o filesystem a ser utilizado tem que ser estabelecido em /dev/md1 e, em consequência, não podemos aproveitar o existente em /dev/sda2.

Para criar o array /dev/md1, associado a /dev/sdb2, utilize o comando:

# mdadm -C /dev/md1 -l 1 -n 2 missing /dev/sdb2

Ao ser feita a pergunta Continue creating array?, responda "y" e ENTER. Depois, verifique se o /dev/md1 foi criado corretamente:

# cat /proc/mdstat

Formate o /dev/md1:

# mkfs.ext4 -m .5 /dev/md1

O próximo passo será copiar todo o conteúdo de /home para o /dev/md1. Assim sendo, monte o /dev/md1 em /mnt e faça a cópia de conteúdo:

# mount /dev/md1 /mnt
# cp -av /home/* /mnt

Verifique se a cópia foi realizada corretamente:

# ls /mnt

Desmonte o dispositivo:

# umount /dev/md1



Adequação das partições, configuração do RAID e ajustes

Para que o sistema RAID funcione, as partições dos discos deverão ser do tipo RAID Linux. Inicialmente, vamos alterar apenas as partições de /dev/sdb. Para tanto, emita o comando:

# fdisk /dev/sdb

Dentro do ambiente do fdisk, pressione "p" e ENTER para ver o esquema de particionamento. Se você instalou o Debian corretamente, notará a presença do "ID System" como sendo "83 Linux". Deveremos mudar isso para "RAID Linux". Para tanto, pressione "t" e ENTER. Como número da partição, pressione "1" e ENTER. Como código da partição, pressione fd e ENTER. Para conferir, pressione "p" e ENTER. Faça o mesmo procedimento para a outra partição. No fim, salve e saia, pressionando "w" e ENTER.

IMPORTANTE! Uma vez alterada a identificação das partições de /dev/sdb para RAID Linux, faça o mesmo com as partições de /dev/sda.

O próximo passo será incluir o esquema RAID no fim do seu arquivo de configuração. Para ver o esquema, utilize o seguinte comando:

# mdadm --examine --scan

Para incluir o esquema no arquivo de configuração RAID (/etc/mdadm/mdadm.conf), utilize o comando:

# mdadm --examine --scan >> /etc/mdadm/mdadm.conf

Verifique o resultado:

# cat /etc/mdadm/mdadm.conf

Edite o arquivo /etc/fstab e altere os discos referentes às partições para /dev/mdX. No meu caso, o arquivo original era o seguinte:

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0

# / was on /dev/sda1 during installation
UUID=6bee7c7c-0287-4f11-bcf8-310aca6c1c5c /               ext4    errors=remount-ro 0       1

# /home was on /dev/sda2 during installation
UUID=a234e87e-64b2-4dc0-8771-0072cd824311 /home           ext4    defaults        0       2

/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto     0       0

O arquivo final ficou da seguinte forma:

# <file system> <mount point>   <type>  <options>       <dump>  <pass>
proc            /proc           proc    defaults        0       0

# / was on /dev/sda1 during installation
/dev/md0        /               ext4    errors=remount-ro 0       1

# /home was on /dev/sda2 during installation
/dev/md1        /home           ext4    defaults        0       2

/dev/scd0       /media/cdrom0   udf,iso9660 user,noauto     0       0

Por fim, reinicie a máquina para que a mesma passe a utilizar os dispositivos /dev/mdX. Depois de reiniciada a máquina, faça login como root e utilize o comando # df -h para verificar se tudo deu certo. No meu caso, ficou assim:

root@aquarius:~# df -h
Sist. Arq.            Size  Used Avail Use% Montado em
/dev/md0               19G  2,6G   15G  15% /
tmpfs                 980M     0  980M   0% /lib/init/rw
udev                  975M  160K  975M   1% /dev
tmpfs                 980M     0  980M   0% /dev/shm
/dev/md1               46G  180M   46G   1% /home



Adequação e sincronização da partição raiz

Uma vez reiniciado o sistema, estaremos utilizando o /dev/md0 e o /dev/md1 que, na verdade, correspondem a /dev/sdb1 e a /dev/sdb2. Assim sendo, o disco /dev/sda não está mais em uso. Com isso, poderemos inserir as suas partições nos arrays (/dev/md0 e /dev/md1). Quando fizermos isso, todo o conteúdo das partições de /dev/sda será apagado, pois tais partições serão espelhos das existentes em /dev/sdb.

Para fazer com que as partições de /dev/sda entrem nos arrays e sejam espelhos das partições existentes em /dev/sdb, utilize os comandos:

A sincronização da partição /home

Teste de funcionamento

A troca de um disco danificado

Controle de acessos

<absHTML>

<a href="http://www2.clustrmaps.com/user/9abcc756"><img src="http://www2.clustrmaps.com/stats/maps-no_clusters/bit.ly-raid1_squeeze_producao-thumb.jpg" alt="Locations of visitors to this page" /> </a>


Consulte também o contador abaixo, iniciado em 13 jan. 11, além do gráfico acima.

</absHTML>