Introdução, softwares e o ambiente utilizado
Trago neste artigo, uma abordagem simples sobre conceitos e a configuração de RAID por software com duas ferramentas muito utilizadas para tal propósito, o raidtools e o mdadm.
Mas antes de entrarmos afundo nas ferramentas, o que é RAID?! - RAID significa: Redudant Array of Independent Disk Algo como "Matriz redundante de discos independentes", e a ideia básica de RAID é combinar diversos discos em um volume lógico com o intuito de disponibilizar maior confiabilidade, redundância de dados e/ou ganho de desempenho, dividindo as operações realizadas nos discos (leitura e escrita). O que define o modo ao qual o RAID em si irá trabalhar (desempenho e/ou redundância) é o "nível" de RAID, onde destes existem vários (0,1,5,10..), cada um com uma utilização específica, podendo inclusive ser combinados entre si. Abaixo, abordarei dois níveis básicos e muito conhecidos, o RAID-0 e o RAID-1. RAID 0É utilizado exclusivamente para o aumento de desempenho usando dois discos iguais para reduzir o tempo de escrita no disco. O grande problema deste tipo de RAID é a falta de confiabilidade nos dados, pois se um dos discos falhar todos os dados armazenados serão perdidos devido aos dados estarem "separados" entre os membros do array.RAID 1Este tipo de RAID é utilizado para a redundância dos dados, onde uma cópia dos dados é feita entre os membros que estão no array.São utilizados dois discos, sendo que o espaço disponível será o do menor disco, porém, o desempenho é um pouco afetado devido às operações serem gravadas mais de uma vez. Quanto aos softwares utilizados:
O ambiente: Dois discos rígidos de 3GB, utilizando uma máquina virtual com o Debian instalado. | |
RAID: Particionando os discos com a ferramenta fdisk
A primeira coisa a fazer é criar e configurar o tipo de partições dos discos que serão utilizados no RAID para o tipo fd (RAID Linux autodetect), onde nos exemplos seguintes, iremos configurar um RAID nível 1.
Podemos utilizar o fdisk para o particionamento e para alterar o tipo da partição, exemplo: Obs.: Os discos que irei utilizar estão representados no meu servidor como /dev/sdd e /dev/sdc. # fdisk -l /dev/sd[cd] Disk /dev/sdc: 3221 MB, 3221225472 bytes 255 heads, 63 sectors/track, 391 cylinders Units = cilindros of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000Conclusão: O disco /dev/sdc não contém uma tabela de partições válida: Disk /dev/sdd: 3221 MB, 3221225472 bytes 255 heads, 63 sectors/track, 391 cylinders Units = cilindros of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0x00000000Conclusão: O disco /dev/sdd não contém uma tabela de partições válida. Como pode ser verificado, os discos em questão não contêm nenhuma tabela de partição, ainda. Eu irei criar uma única partição que irá englobar todo o HD, vamos lá: # fdisk /dev/sdc Comando (m para ajuda): n # Nova partição Comando - ação e estendida p partição primária (1-4) p # partição primáriaNúmero da partição (1-4): 1 #Primeira partição (/dev/sdc1) Primeiro cilindro (1-391, default 1): # Valor do primeiro cilindro Using default value 1 Last cilindro, +cilindros or +size{K,M,G} (1-391, default 391): +3000M # cilindro final, ou # tamanho, neste caso aproximadamente 3 GB.Comando (m para ajuda): p #Imprime a tabela de partições Disk /dev/sdc: 3221 MB, 3221225472 bytes 255 heads, 63 sectors/track, 391 cylinders Units = cilindros of 16065 * 512 = 8225280 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk identifier: 0xd976698f Dispositivo Boot Start End Blocks Id System /dev/sdc1 1 383 3076416 83 LinuxAqui, eu altero o tipo de partição para fd: Comando (m para ajuda): t #Tipo de partição Selected partition 1
Código hexadecimal (digite L para listar os códigos): fd #Tipo de partição selecionada
O tipo da partição 1 foi alterado para fd (Detecção automática de RAID Linux)
Comando (m para ajuda): w #Grava a tabela de partições
A tabela de partições foi alterada! Chamando ioctl() para reler tabela de partições. Sincronizando discos.O mesmo deve ser feito com o segundo disco e após o correto particionamento dos discos, vamos à configuração. ;) | |
Configurando um RAID 1 com o raidtools
Pacotes necessáriosTenho que admitir que, devido ao raidtools ser um software deveras antigo, tive um pouco de dificuldade para encontrá-lo, até por que ele não está presente nos repositórios oficiais, pelo menos não da distribuição que usei.Encontrei para o Debian neste mirror: Depois de feito o download, instale o pacote através do dpkg: # dpkg -i raidtools_0.42-33_i386.deb Caso ocorram dependências, use a seguinte opção do apt-get, ou instale as dependências manualmente: # apt-get install -f E depois, rode o dpkg novamente. Após instalar o raidtools e alterar o tipo de partição em ambos os discos, iremos partir para o arquivo de configuração do nosso dispositivo de RAID, o /etc/raidtab: # vi /etc/raidtab
# Informa qual o nome do dispositivo de RAID.
raiddev /dev/md0 # O nivel de RAID. raid-level 1 # A quantidade de discos que farão parte do RAID. nr-raid-disks 2 # Tamanho dos blocos do Array(KB). chunk-size 4 # Cria um superbloco no final de cada um dos discos RAID (valores 0 ou 1) persistent-superblock 1 # Os discos a serem utilizados no array. device /dev/sdc1 raid-disk 0 device /dev/sdd1 raid-disk 1 Agora precisamos somente criar o dispositivo de RAID, e para isso utilizamos o comando mkraid: # mkraid /dev/md0 Ele deve retornar algo como: mkraid version 0.36.4 parsing configuration file handling MD device /dev/md0 analyzing super-block disk 0: /dev/sdc1, 3076416kB, raid superblock at 3076352kB disk 1: /dev/sdd1, 3076416kB, raid superblock at 3076352kB initializing raid set clearing device /dev/sdc1 clearing device /dev/sdd1 (98% done; ~0:00 left 1:30 elapsed [33821.2 KB/sec]) writing raid superblock MD ID: a92b4efc Conforms to MD version: 0.36.4 Raid set ID: 48eeb121 Creation time: Sun Jan 20 03:35:16 2013 Update time: Sun Jan 20 03:36:48 2013 State: 1 (clean) Raid level: 1 Individual disk size: 3004MB (3076352kB) Total number of disks: 2 Number of raid disks: 2 Number of active disks: 2 Number of working disks: 2 Number of failed disks: 0 Number of spare disks: 0 Disk 0: raid_disk 0, state: 6 (operational, active, sync) Disk 1: raid_disk 1, state: 6 (operational, active, sync) mkraid: completedObs.: Podemos verificar a sincronização dos HD's no arquivo /proc/mdstat. Agora basta formatar: # mkfs -t ext3 /dev/md0 E montar: # mount /dev/md0 /backup Pronto! :) | |
Configurando um RAID 1 com o mdadm
O ambiente utilizado foi o mesmo do exemplo anterior, neste caso somente restaurei o snapshoot da VM.
O mdadm, provavelmente, encontra-se disponível nos repositórios da sua distribuição. Para procurá-lo em distribuições derivadas do Debian usando o apt, use o seguinte comando: # apt-cache search mdadm Ele deve retornar: mdadm - tool to administer Linux MD arrays (software RAID)Agora, basta instalar: # apt-get install mdadm Em Red Hat e derivados: # yum list mdadm # yum install mdadm Devido ao mdadm trabalhar com superblocos persistentes por padrão, podemos utiliza-lo na criação de dispositivos RAID de duas maneiras, sendo uma delas usando o arquivo de configuração /etc/mdadm/mdadm.conf ou diretamente através da ferramenta mdadm (esta será a forma utilizada no artigo). O primeiro passo a seguir é idêntico ao utilizar o raidtools, é necessário alterar o tipo das partições para fd. Para quem não sabe realizar o procedimento, na parte onde abordei o raidtools, o procedimento é feito passo a passo, basta dar uma olhadinha. :) Após as alterações realizadas no disco, vamos começar a criar o nosso dispositivo de RAID (RAID 1) utilizando o comando mdadm, irei explicando seus parâmetros a cada comando: # mdadm -C -v /dev/md0 -l 1 -n 2 /dev/sdc1 /dev/sdd1 mdadm: size set to 2056192K mdadm: array /dev/md0 started.Onde:
Finalizamos a criação do array, agora vamos ver o andamento da sincronização dos 2 discos: # cat /proc/mdstat ou # watch -n 1 cat /proc/mdstat Como pode ser observado, o próprio mdadm já informa que o dispositivo de RAID foi inicializado na saída do comando. E uma das maneiras de verificar se o RAID está funcionado é utilizando o arquivo /proc/mdstat, onde o sincronismo entre os discos também pode ser verificado. Outra maneira de verificar o funcionamento do RAID é utilizando a opção "-D" (ou: --detail [detalhes]) do mdadm, onde a saída é bem completa. Agora basta fazer o mesmo procedimento básico, aplicar um sistema de arquivos ao nosso sistema de RAID (Ex.: mkfs -t ext3 /dev/md0), montar em um ponto de montagem qualquer, de acordo com as suas necessidades e ser feliz. :) * Lembrando que o mdadm fornece muitas opções bacanas para o RAID, vamos à mais algumas. Uma coisa muito interessante é testar a eficiência do RAID que estou configurando, e para isso o mdadm possibilita "falhar" um dos discos. Mas calma, ele não vai destruir o seu HD. O que o mdadm faz é "marcar" o seu disco como defeituoso, assim o mdadm passa a utilizar os outros discos do array para o seu correto funcionamento (claro, dependendo das configurações que você fez e o nível do RAID). Antes de falhar um dos meus discos, vamos ver como que está o "status" do meu device de raid: # mdadm -D /dev/md0 /dev/md0: Version : 00.90 Creation Time : Mon Jan 21 02:39:08 2013 Raid Level : raid1 Array Size : 2056192 (2008.34 MiB 2105.54 MB) Used Dev Size : 2056192 (2008.34 MiB 2105.54 MB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Mon Jan 21 02:39:50 2013 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 UUID : 48c32905:e7358574:b05e291b:984b098e (local to host daileon) Events : 0.18 Number Major Minor RaidDevice State 0 8 33 0 active sync /dev/sdc1 1 8 49 1 active sync /dev/sdd1Como pode ser observado, está tudo OK, agora falhando um dos discos: # mdadm --manage /dev/md0 --set-faulty /dev/sdd1 mdadm: set /dev/sdd1 faulty in /dev/md0Agora meu disco apresentou uma "falha" no dispositivo /dev/sdd1: # mdadm -D /dev/md0 /dev/md0: Version : 00.90 Creation Time : Mon Jan 21 02:39:08 2013 Raid Level : raid1 Array Size : 2056192 (2008.34 MiB 2105.54 MB) Used Dev Size : 2056192 (2008.34 MiB 2105.54 MB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Mon Jan 21 02:52:53 2013 State : clean, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 1 Spare Devices : 0 UUID : 48c32905:e7358574:b05e291b:984b098e (local to host daileon) Events : 0.19 Number Major Minor RaidDevice State 0 8 33 0 active sync /dev/sdc1 1 0 0 1 removed 2 8 49 - faulty spare /dev/sdd1Neste caso, como existem somente dois HDs e o RAID é de nível 1, os dados não serão perdidos, pois as cópias dos dados estão salvas no outro disco, então, bastaria eu remover este HD "defeituoso", espetar um novo, particionar, alteração o tipo da partição e adicioná-lo no meu RAID. Como por exemplo: # mdadm --manage /dev/md0 --add /dev/sde1 Assim eu poderia verificar o andamento da sincronização do novo disco através do arquivo /proc/mdstat. É isso pessoal! Até a próxima... Referências
|
sábado, 11 de outubro de 2014
O básico sobre RAID com mdadm e raidtools
Assinar:
Postar comentários (Atom)
Nenhum comentário:
Postar um comentário