Вы находитесь на странице: 1из 95

Dominando Linux

Usando RAID e LVM2


verso 0.5 Fernando Antunes

Este trabalho est licenciado sob uma Licena Creative Commons Atribuio-Uso No-ComercialVedada a Criao de Obras Derivadas 2.5 Brasil. Para ver uma cpia desta licena, visite http://creativecommons.org/licenses/by-nc-nd/2.5/br/ ou envie uma carta para Creative Commons, 171 Second Street, Suite 300, San Francisco, Califrnia 94105, USA.

Contedo
Viso geral do curso.............................................................................................................................4 RAID....................................................................................................................................................5 Preparando um computador para este curso...............................................................................6 Identificando o suporte a RAID no kernel Linux.......................................................................7 Habilitando RAID em um kernel Linux.....................................................................................8 Deteco de discos RAID durante a carga do kernel..................................................................9 Instalando as ferramentas de gerenciamento RAID..................................................................10 Dispositivos de bloco para uso do RAID..................................................................................10 Criando uma partio em RAID-1 (mirror)..............................................................................12 Testando a autodeteco............................................................................................................14 Ativando RAID manualmente..................................................................................................15 Examinando detalhes sobre os RAID configurados.................................................................17 Utilizando o RAID....................................................................................................................18 Substituindo um disco ou uma partio em um RAID-1 ntegro..............................................19 Removendo permanentemente uma partio do RAID............................................................23 Substituindo um disco ou uma partio em um RAID-1 danificado........................................24 Aumentando o nmero de discos ativos em um RAID.............................................................27 Diminuindo o nmero de discos do RAID................................................................................29 Monitorando um RAID.............................................................................................................30 Removendo um RAID..............................................................................................................32 Criando um RAID-5..................................................................................................................33 Criando um RAID-0..................................................................................................................35 Criando um RAID Linear.........................................................................................................37 Criando um RAID-6..................................................................................................................39 Criando um RAID-10................................................................................................................41 Criando um RAID-0+1.............................................................................................................45 Criando um RAID-50................................................................................................................48 Removendo as parties para reutilizarmos os discos nos mdulos seguintes.........................51 Device Mapper...................................................................................................................................52 Identificando o suporte ao Device Mapper no kernel Linux.....................................................53 Habilitando Device Mapper no kernel Linux...........................................................................53 Instalando a biblioteca e ferramentas Device Mapper..............................................................55 Criando um volume lgico de bloco usando Device Mapper...................................................55 Criando um segundo volume em um mesmo disco..................................................................56 Obtendo informaes sobre os volumes...................................................................................57 Ativando o volume aps a inicializao da mquina................................................................57 Removendo um volume............................................................................................................58 LVM2..................................................................................................................................................59 Preparando os discos para usarmos com LVM2 neste curso....................................................60 Instalando as ferramentas LVM2..............................................................................................60 Criando Physical Volumes (PV) ...............................................................................................60 Visualizando informaes sobre os PV.....................................................................................61 Removendo um PV no alocado...............................................................................................62 Dominando Linux - Usando RAID e LVM2

3 Criando Volume Group (VG)....................................................................................................62 Visualizando informaes sobre os VG....................................................................................63 Removendo um VG que no contm Logical Volumes (LV)....................................................64 Criando um segundo VG...........................................................................................................64 Criando um Logical Volume (LV).............................................................................................65 Visualizando informaes sobre um LV...................................................................................67 Utilizando um LV......................................................................................................................67 Aumentando o LV usando rea disponvel no VG....................................................................68 Ampliando um VG e um LV usando um novo PV....................................................................70 Criando um novo LV em um mesmo VG..................................................................................73 Reduzindo o tamanho de um LV...............................................................................................73 Removendo um PV sem alocao.............................................................................................74 Retirando um PV com dados alocados......................................................................................74 Realizando Snapshots...............................................................................................................76 Removendo um Snapshot ou um Logical Volume (LV)...........................................................80 Loop Devices......................................................................................................................................81 Identificando o suporte a Loop Device no kernel Linux..........................................................82 Habilitando Loop Device no kernel Linux...............................................................................82 Localizando e criando Loop Devices........................................................................................83 Preparando um Loop Device para uso......................................................................................84 Identificando que Loop Device esto associados......................................................................85 Utilizando um Loop Device......................................................................................................85 Associando os Loop Devices na inicializao da mquina.......................................................85 Desfazendo a associao com um Loop Device.......................................................................86 Criando um RAID com Loop Devices......................................................................................87 DM_CRYPT.......................................................................................................................................88 Identificando o suporte ao DM_CRYPT e aos algoritmos de criptografia no kernel Linux.....89 Habilitando DM_CRYPT no kernel Linux...............................................................................89 Verificando os algoritmos de criptografia disponveis em um kernel em execuo.................90 Criptografando com LUKS.......................................................................................................91 Obtendo informaes com LUKS.............................................................................................91 Usando uma partio ou Device Loop criptografado...............................................................92 Encerrando o uso.......................................................................................................................93 Adicionando senhas..................................................................................................................93 Removendo senhas....................................................................................................................94 Usando um arquivo arquivo para armazenar as senhas............................................................94 Usando os volumes aps reiniciar a mquina...........................................................................95

Dominando Linux - Usando RAID e LVM2

Viso geral do curso


RAID e LVM2 permitem aos administradores Linux maior flexibilidade e segurana no armazenamento dos dados do que o mtodo tradicional de particionamento de discos locais, permitindo alterar o tamanho das reas alocadas e proteo em caso de falhas dos dispositivos de armazenamentos.

Dominando Linux - Usando RAID e LVM2

RAID
Em 1988, foi publicado na Universidade de Berkeley um documento chamado A Case for Redundant Arrays of Inexpensive Disks (RAID), descrevendo cinco tcnicas para combinar mltiplos discos pequenos para prover tolerncia a falhas, cada uma com um conjunto diferente de caractersticas e diferentes impactos em performance. Estas cinco tecnologias so conhecidas como RAID-1 a RAID-5. Com o passar do tempo outras combinaes como RAID-0, RAID-6, RAID-10, RAID-50 e RAID-0+1 foram adicionadas s originais e esto disponveis em hardwares de diversos fabricantes de dispositivos de armazenamento. Uma boa visualizao do funcionamento destas diferentes combinaes pode ser vista no tutorial existente no site do fabricante AC&NC (http://www.acnc.com/04_00.html). Linux contempla suporte a RAID por software desde o kernel 2.0 atravs do driver MD, permitindo sua utilizao sem a necessidade de equipamentos especializados. Na atual verso 2.6, as diversas tecnologias so chamadas de personalidades e as possveis para uso so RAID-0, RAID-1, RAID-4, RAID-5, RAID-6 e RAID-10, alm de uma chamada Linear, onde um disco concatenado ao fim do outro sem prover tolerncia a falhas. O suporte a RAID 0+1 e 50 so possveis atravs de combinaes de RAID-0 e RAID-1. Este curso permite a compreenso das ferramentas para gesto de RAID por software em Linux e da configurao do kernel 2.6 para dar suporte a este recurso. Fora de seu escopo est a discusso do funcionamento conceitual das tecnologias RAID, bem como uma avaliao dos prs e contras de cada uma.

Dominando Linux - Usando RAID e LVM2

Preparando um computador para este curso


Neste curso usaremos uma mquina virtual para prover recursos de vrios discos ao sistema operacional Linux. Comecemos pela configurao de nossa mquina virtual com trs discos adicionais aos usados para a instalao de softwares e dados. Neste curso, usamos o virtualizador Virtualbox da SUN, mas qualquer outro software de virtualizao pode ser usado em seu lugar, desde que fornea suporte at a cinco discos SATA. Atravs da propriedade da mquina virtual, configure os discos conforme o esquema abaixo.

Nosso disco gentoo-lvm2-raid.vdi, contendo os software e dados, ser o disco sda. O disco virtual rd1 ser visto pelo Linux como sdb, o rd2 como sdc e rd3 como sdd. Este ltimos sero usados nos laboratrios de RAID. Inicie a mquina virtual escolhendo a primeira opo, Gentoo Kernel 2.6.30-r6, no menu do GRUB. Acesse a console como root, senha totonick. login: root Password: totonick

Dominando Linux - Usando RAID e LVM2

Identificando o suporte a RAID no kernel Linux


Para ter suporte a RAID por software em Linux, preciso que o kernel esteja compilado com este recurso habilitado. Isto pode ser verificado avaliando o arquivo /proc/config.gz, que contm a configurao do kernel em execuo. Procure por CONFIG_MD para ver o suporte a RAID e as personalidades habilitadas. Se o recurso foi compilado como mdulo, haver um valor m no lugar de y. # zcat /proc/config.gz | grep CONFIG_MD CONFIG_MD=y CONFIG_MD_AUTODETECT=y CONFIG_MD_LINEAR=y CONFIG_MD_RAID0=y CONFIG_MD_RAID1=y CONFIG_MD_RAID10=y CONFIG_MD_RAID456=y CONFIG_MD_RAID6_PQ=y # CONFIG_MD_MULTIPATH is not set # CONFIG_MD_FAULTY is not set Se seu kernel no expe o arquivo /proc/config.gz, voc pode identificar o suporte atravs das informaes exibidas durante sua carga pelo driver md. # dmesg | grep ^md md: raid0 personality registered for level 0 md: raid1 personality registered for level 1 md: raid6 personality registered for level 6 md: raid5 personality registered for level 5 md: raid4 personality registered for level 4 md: Waiting for all devices to be available before autodetect md: If you don't use raid, use raid=noautodetect md: Autodetecting RAID arrays. md: Scanned 0 and added 0 devices. md: autorun ... md: ... autorun DONE. Outra forma observar o contedo do arquivo /proc/mdstat, que existe apenas quando o suporte RAID esta habilitado. Este arquivo mostra as personalidades habilitadas no kernel e os RAID ativos no sistema. # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] unused devices: <none>

Dominando Linux - Usando RAID e LVM2

Habilitando RAID em um kernel Linux


Para habilitar o suporte RAID em um kernel Linux ou adicionar personalidades no habilitadas em sua instalao, preciso compil-lo. Carregue o menu de configurao do kernel. # cd /usr/src/linux # make menuconfig Selecione a opo de menu Device Drivers e configure seu kernel usando a configurao abaixo como modelo. Device Drivers ---> [*] Multiple devices driver support (RAID and LVM) --> <*> RAID support (NEW) <*> Autodetect RAID arrays during kernel boot (NEW) <*> Linear (append mode) <*> RAID-0 (striping) mode (NEW) <*> RAID-1 (mirroring) mode (NEW) <*> RAID-10 (mirroring striping) mode (NEW) <*> RAID-4/RAID-5/RAID-6 mode (NEW) < > Multipath I/O support (NEW) < > Faulty test module for MD (NEW) Saia do menu, salve a configurao e compile o novo kernel # make bzImage # make modules Faa a instalao do kernel e seus mdulos para que possamos us-lo e depois configure o GRUB para t-lo como padro. Neste curso o menu do GRUB j est configurado para carregar um kernel de nome kernel-2.6.30-raid, cujo title Gentoo Kernel 2.6.30-r6 (with RAID). # make modules_install # cp arch/x86/boot/bzImage /boot/kernel-2.6.30-r6-raid # cat /boot/grub/menu.lst default 1 timeout 30 color black/white splashimage=(hd0,0)/grub/robin.xpm.gz

Dominando Linux - Usando RAID e LVM2

9 title Gentoo Kernel 2.6.30-r6 root (hd0,0) kernel /kernel-2.6.30-r6 root=/dev/sda3 video=vesafb:ywrap,mtrr:3 vga=0x303 title Gentoo Kernel 2.6.30-r6 (with RAID) root (hd0,0) kernel /kernel-2.6.30-r6-raid root=/dev/sda3 video=vesafb:ywrap,mtrr:3 vga=0x303 title Gentoo Kernel 2.6.30-r6 (with RAID and LVM2) root (hd0,0) kernel /kernel-2.6.30-r6-raid-lvm2 root=/dev/sda3 video=vesafb:ywrap,mtrr:3 vga=0x303 Reinicialize a mquina e de carga no sistema atravs da opo Gentoo Kernel 2.6.30-r6 (with RAID). Note as informaes exibidas pelo driver MD durante a carga. md: linear personality registered for level -1 md: raid0 personality registered for level 0 md: raid1 personality registered for level 1 md: raid10 personality registered for level 10 md: raid6 personality registered for level 6 md: raid5 personality registered for level 5 md: raid4 personality registered for level 4 md: Waiting for all devices to be available before autodetect md: If you don't use raid, use raid=noautodetect md: Autodetecting RAID arrays. md: Scanned 0 and added 0 devices. md: autorun ... md: ... autorun DONE. O driver comea exibindo as personalidades habilitadas e que level deve usado como parmetro ao se criar um RAID deste tipo com o comando mdadm e depois procura por parties do tipo Linux raid auto para inici-las automaticamente.

Deteco de discos RAID durante a carga do kernel


Se voc possui um kernel compilado com suporte a autodeteco de discos array como em nosso laboratrio, CONFIG_MD_AUTODETECT=y, RAID criados em seu computador sero ativados pelo kernel durante sua carga e estaro disponveis para uso. Caso seu kernel no suporte isto, voc ter que ativar os RAID manualmente ou atravs de um script a cada inicializao. Contudo, para que a autodeteco funcione, as parties criadas tem que serem do tipo fd, Linux raid auto, e no o usual 83, Linux.

Dominando Linux - Usando RAID e LVM2

10 Entretanto, em um computador com o recurso habilitado, mas nenhum RAID criado, o tempo de inicializao do kernel impactado, pois ele demanda recursos procurando por estes discos arrays que no existem. Para diminuir este tempo em mquinas com autodeteco e sem RAID configurados, adicione o parmetro raid=noautodetect linha de configurao do kernel no arquivo de configurao do GRUB para que fique semelhante ao exemplo abaixo. (no prossiga no curso com esta opo inserida como parmetro em seu kernel) kernel /kernel-2.6.30-r6-raid root=/dev/sda3 raid=noautodetect Durante a carga do kernel, voc ver a mensagem dizendo que a autodeteco foi inibida. md: linear personality registered for level -1 md: raid0 personality registered for level 0 md: raid1 personality registered for level 1 md: raid10 personality registered for level 10 md: raid6 personality registered for level 6 md: raid5 personality registered for level 5 md: raid4 personality registered for level 4 md: Skipping autodetection of RAID arrays. (raid=autodetect will force)

Instalando as ferramentas de gerenciamento RAID


Para gerenciar RAID em um computador Linux, preciso instalar as ferramentas contidas no pacote mdadm. Utilize o gerenciador de pacotes de sua distribuio para ver se ele j est instalado ou procure pela existncia do programa mdadm em sua mquina. # mdadm -bash: mdadm: command not found Em Gentoo, # emerge sys-fs/mdadm

Dispositivos de bloco para uso do RAID


Para que Linux possa usar um RAID, preciso ter um arquivo no /dev/ que o represente. Arquivos no diretrio /dev devem ser criados pelo comando mknod e devem ser informados seu tipo de acesso, caractere ou bloco, alm dos nmeros MAJOR e MINOR para que Linux saiba para que finalidade eles sero usados. As especificaes dos nomes, tipos e nmeros podem ser encontradas no arquivo /usr/src/linux/Documentation/devices.txt.

Dominando Linux - Usando RAID e LVM2

11 Ao verificarmos seu contedo, identificamos que o nome mdX deve ser usado para representar arquivos do tipo bloco para uso de RAID e que o MAJOR number 9 e o MINOR um sequencial iniciando de 0. # grep --max-count=1 -A7 '9 block' /usr/src/linux/Documentation/devices.txt 9 block Metadisk (RAID) devices 0 = /dev/md0 First metadisk group 1 = /dev/md1 Second metadisk group ... The metadisk driver is used to span a filesystem across multiple physical disks. Verifique se sua distribuio j criou algum arquivo destes em seu computador. # ls -l /dev/md? brw-r--r-- 1 root root 9, 0 2009-09-26 17:58 /dev/md0 Ao criarmos um RAID com a ferramenta mdadm, estes arquivos so criados automaticamente. Mas caso queira cri-los antecipadamente, basta usar o comando mknod. # mknod /dev/md1 b 9 1 # mknod /dev/md1 b 9 2 # ls -l /dev/md? brw-r--r-- 1 root root 9, 0 2009-09-26 17:58 /dev/md0 brw-r--r-- 1 root root 9, 1 2009-09-26 17:58 /dev/md1 brw-r--r-- 1 root root 9, 2 2009-09-26 17:58 /dev/md2

Dominando Linux - Usando RAID e LVM2

12

Criando uma partio em RAID-1 (mirror)


RAID-1 permite que os dados de gravados em uma partio sejam duplicados em uma outra partio e que os acessos de leitura sejam realizados em qualquer um dos discos.

Vamos criar um RAID-1 com duas parties de 50MB. Use o comando fdisk para criar as parties sdb1 e sdc1. Modifique o tipo para fd, Linux raid auto, para permitir autodeteco. # fdisk /dev/sdb n p 1 ENTER 6 L (exibe os tipos de partio) t fd p (exibe a tabela de partio) w # fdisk /dev/sdc n p 1 ENTER 6 t fd w Uma vez criada as parties, vamos combin-las em um RAID-1 chamado md0 usando o comando mdadm no modo Create com os parmetros level igual a 1, para indicar a personalidade registrada como RAID-1, e com duas parties, raid-devices=2, em sua composio, sdb1 e sdc1. # mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sdb1 /dev/sdc1 Dominando Linux - Usando RAID e LVM2

13 mdadm: array /dev/md0 started. mdadm suporta uma sintaxe que permite agrupar as parties. A comando abaixo equivalente ao anterior, # mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd{b,c}1 Uma vez iniciado o processo de criao do array, podemos ver o progresso de sua construo atravs do arquivo /proc/mdstat. # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid1 sdc1[1] sdb1[0] 48064 blocks [2/2] [UU] [============>........] resync = 60.6% (29184/48064) finish=0.0min speed=5836K/sec unused devices: <none> # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid1 sdc1[1] sdb1[0] 48064 blocks [2/2] [UU] [=================>...] resync = 87.2% (42112/48064) finish=0.0min speed=5264K/sec unused devices: <none> # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid1 sdc1[1] sdb1[0] 48064 blocks [2/2] [UU] unused devices: <none> O RAID-1 est pronto e ativado pelo kernel. Note que as duas parties esto ativas, Up, [UU].

Dominando Linux - Usando RAID e LVM2

14

Testando a autodeteco
Vamos reiniciar a mquina para testarmos o recurso de autodeteco. # shutdown -r 0 Note a inicializao do driver MD durante a carga do kernel. md: Waiting for all devices to be available before autodetect md: If you don't use raid, use raid=noautodetect md: Autodetecting RAID arrays. md: Scanned 2 and added 2 devices. md: autorun ... md: considering sdc1 ... md: adding sdc1 ... md: adding sdb1 ... md: created md0 md: bind<sdb1> md: bind<sdc1> md: running: <sdc1><sdb1> md: ... autorun DONE. Voc pode ver isto mais calmamente com o comando dmesg aps o login. # dmesg # dmesg | grep md: # dmesg | less Note que o RAID-1 md0 foi criado e ativado. O que pode ser constatado no arquivo /proc/mdstat. # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid1 sdc1[1] sdb1[0] 48064 blocks [2/2] [UU] unused devices: <none>

Dominando Linux - Usando RAID e LVM2

15

Ativando RAID manualmente


Em um cenrio onde a autodeteco no est habilitada no kernel ou desabilitada pelo parmetro raid=noautodetect ou em parties com tipo diferente de fd, necessrio ativar os RAID manualmente. Vamos inibir a inicializao automtica do RAID mudando o tipo das parties para 83. # fdisk /dev/sdb t 83 w # fdisk /dev/sdc t 83 w Reinicie o computador. # shutdown -r 0 Veja que o kernel no mais ativa o RAID-1 md0. md: Waiting for all devices to be available before autodetect md: If you don't use raid, use raid=noautodetect md: Autodetecting RAID arrays. md: Scanned 0 and added 0 devices. md: autorun ... md: ... autorun DONE. # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] unused devices: <none> Para podermos usar o RAID-1, preciso ativ-lo manualmente com o comando mdadm no modo Assemble. # mdadm --assemble /dev/md0 /dev/sdb1 /dev/sdc1 mdadm: /dev/md0 has been started with 2 drives.

Dominando Linux - Usando RAID e LVM2

16 O RAID-1 foi iniciado, veja o log. # dmesg | tail md: md0 stopped. md: bind<sdc1> md: bind<sdb1> raid1: raid set md0 active with 2 out of 2 mirrors md0: unknown partition table # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid1 sdc1[1] sdb1[0] 48064 blocks [2/2] [UU] unused devices: <none> O ruim desta abordagem que precisamos saber quais RAID existem e que parties os compe para podermos ativ-los. Para simplificar este processo, possvel armazenar as informaes sobre eles no arquivo /etc/mdadm.conf. A sintaxe mnima deste arquivo bem simples. Adicione uma linha comeando com DEVICE contendo todas as parties que compe algum RAID existente. # echo DEVICE /dev/sbd1 /dev/sdc1 >> /etc/mdadm.conf Depois uma linha comeando com ARRAY contendo os detalhes do RAID. Estas informaes podem ser obtidas atravs do comando mdadm os parmetros detail e scan. # mdadm --detail --scan ARRAY /dev/md0 level=raid1 num-devices=2 metadata=0.90 UUID=3d981197:4cba768c:9e68b2c8:17b61269 Desvie a sada do comando para o arquivo /etc/mdadm.conf para registr-las. # mdadm --detail --scan >> /etc/mdadm.conf Reinicie o computador para testarmos o uso do arquivo de configurao. # shutdown -r 0 Se sua distribuio executa algum script de inicializao de array disparado durante a carga da mquina, o RAID ser ativado por ele usando o arquivo de configurao. Caso no, voc poder ativ-lo usando uma sintaxe mais simples agora. # mdadm --assemble --scan /dev/md0

Dominando Linux - Usando RAID e LVM2

17 A desvantagem deste modelo manual a manuteno do arquivo de configurao para refletir as futuras alteraes. Vamos evitar isto no curso voltando nossas parties para o tipo fd. # fdisk /dev/sdb t fd w # fdisk /dev/sdc t fd w Remova as duas linhas inseridas em /etc/mdadm.conf para manter o arquivo com seu contedo original, evitando comportamentos no esperados no curso. # vi /etc/mdadm.conf G dd dd :wq

Examinando detalhes sobre os RAID configurados


Podemos verificar informaes sobre o RAID configurado usando o comando mdadm e o parmetro detail. # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Sun Sep 27 22:41:35 2009 Raid Level : raid1 Array Size : 48064 (46.95 MiB 49.22 MB) Used Dev Size : 48064 (46.95 MiB 49.22 MB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Mon Sep 28 00:23:22 2009 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0

Dominando Linux - Usando RAID e LVM2

18 UUID : 3d981197:4cba768c:9e68b2c8:17b61269 Events : 0.34 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 As informaes revelam o tipo do RAID, o tamanho da rea para uso, se est ntegro (clean), quantas e que parties o compe e se h alguma falha. As mesmas informaes podem ser obtidas se examinarmos as parties que compe o RAID. # mdadm --examine /dev/sdb1 # mdadm --examine /dev/sdc1

Utilizando o RAID
Uma vez criado o RAID e ativado, podemos utiliz-lo para armazenar dados da mesma forma que usamos uma partio comum. Inicialmente, formate-o com um sistema de arquivos desejado e depois monte-o em algum lugar. # mkfs -t ext4 /dev/md0 # mkdir /mnt/docs # mount /dev/md0 /mnt/docs Caso queira que o RAID seja montado durante a inicializao da mquina, adicione as informaes de montagem ao arquivo /etc/fstab. # vi /etc/fstab (posicione o cursor na linha /dev/cdrom) O (digite a linha abaixo) /dev/md0 /mnt/docs ext4 ESC :wq

auto

00

Teste a montagem e crie um arquivo para teste. # umount /mnt/docs # mount /mnt/docs # ls -l /mnt/docs total 12 drwx------ 2 root root 12288 2009-09-28 00:14 lost+found # echo ola > /mnt/docs/ola

Dominando Linux - Usando RAID e LVM2

19

Substituindo um disco ou uma partio em um RAID-1 ntegro


Podemos substituir parties que compe um RAID-1 existente e ntegro. Inicialmente preciso criar na mquina a partio substituta, seja no mesmo disco ou em um novo. No curso usaremos o disco sdd. # fdisk /dev/sdd n p 1 ENTER 6 t fd w Adicione a partio ao RAID. # mdadm /dev/md0 --add /dev/sdd1 mdadm: hot added /dev/sdd1 Veja os detalhes do RAID e perceba que o disco foi includo como sobressalente (spare). # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Sun Sep 27 22:41:35 2009 Raid Level : raid1 Array Size : 48064 (46.95 MiB 49.22 MB) Used Dev Size : 48064 (46.95 MiB 49.22 MB) Raid Devices : 2 Total Devices : 3 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Mon Sep 28 00:54:39 2009 State : clean Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 UUID : 3d981197:4cba768c:9e68b2c8:17b61269 Events : 0.50 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 Dominando Linux - Usando RAID e LVM2

20 2 8 49 spare /dev/sdd1

Tal informao tambm pode ser vista em /proc/mdstat. Note a partio sdd1 marcada como sobressalente (S) e que as duas primeiras esto ativos (U). # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid1 sdd1[2](S) sdb1[0] sdc1[1] 48064 blocks [2/2] [UU] unused devices: <none> Para retirar uma das parties originais, preciso marc-la como falha antes de remov-la. Vamos retirar a sdb1. Ao faz-lo, o disco sobressalente ser automaticamente sincronizado e posto em uso. Podemos verificar o progresso desta troca no arquivo /proc/mdstat. # mdadm /dev/md0 --fail /dev/sdb1 mdadm: set /dev/sdb1 faulty in /dev/md0 # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid1 sdd1[2] sdb1[3](F) sdc1[1] 48064 blocks [2/1] [_U] [===========>.........] recovery = 56.3% (27136/48064) finish=0.0min speed=13568K/sec unused devices: <none> Ao final do processo, verificamos a troca concluda e que a partio sdb1 est marcada como falha (F). # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid1 sdd1[0] sdb1[2](F) sdc1[1] 48064 blocks [2/2] [UU] unused devices: <none> # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Sun Sep 27 22:41:35 2009 Raid Level : raid1 Array Size : 48064 (46.95 MiB 49.22 MB) Used Dev Size : 48064 (46.95 MiB 49.22 MB) Raid Devices : 2 Total Devices : 3 Preferred Minor : 0 Dominando Linux - Usando RAID e LVM2

21 Persistence : Superblock is persistent Update Time : Mon Sep 28 00:58:46 2009 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 1 Spare Devices : 0 UUID : 3d981197:4cba768c:9e68b2c8:17b61269 Events : 0.86 Number Major Minor RaidDevice State 0 8 49 0 active sync /dev/sdd1 1 8 33 1 active sync /dev/sdc1 2 8 17 faulty spare /dev/sdb1

Agora podemos remover a partio do RAID. # mdadm /dev/md0 --remove /dev/sdb1 mdadm: hot remove /dev/sdb1 # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid1 sdd1[0] sdc1[1] 48064 blocks [2/2] [UU] unused devices: <none> # mdadm --detail /dev/sdb1 /dev/md0: Version : 0.90 Creation Time : Sun Sep 27 22:41:35 2009 Raid Level : raid1 Array Size : 48064 (46.95 MiB 49.22 MB) Used Dev Size : 48064 (46.95 MiB 49.22 MB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Mon Sep 28 01:03:00 2009 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Dominando Linux - Usando RAID e LVM2

22 UUID : 3d981197:4cba768c:9e68b2c8:17b61269 Events : 0.88 Number Major Minor RaidDevice State 0 8 49 0 active sync /dev/sdd1 1 8 33 1 active sync /dev/sdc1 Caso queira manter esta partio como sobressalente, basta adicion-la novamente. # mdadm /dev/md0 -add /dev/sdb1 mdadm: added /dev/sdb1 # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid1 sdb1[2](S) sdd1[0] sdc1[1] 48064 blocks [2/2] [UU] unused devices: <none> # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Sun Sep 27 22:41:35 2009 Raid Level : raid1 Array Size : 48064 (46.95 MiB 49.22 MB) Used Dev Size : 48064 (46.95 MiB 49.22 MB) Raid Devices : 2 Total Devices : 3 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Mon Sep 28 01:21:43 2009 State : clean Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 UUID : 3d981197:4cba768c:9e68b2c8:17b61269 Events : 0.194 Number Major Minor RaidDevice State 0 8 49 0 active sync /dev/sdd1 1 8 33 1 active sync /dev/sdc1 2 8 17 spare /dev/sdb1

Dominando Linux - Usando RAID e LVM2

23

Removendo permanentemente uma partio do RAID


Ao remover uma partio do RAID preciso limpar seus dados e as informaes sobre a configurao do RAID contida nela. Se a partio a ser removida for uma sobressalente, no preciso marc-la como falha. Caso contrrio, este passo mandatrio. Vamos remover permanentemente a partio sdb1 de nosso RAID. Como ela est como sobressalente, no preciso marc-la como falha primeiro. # mdadm /dev/md0 --remove /dev/sdb1 mdadm: hot removed /dev/md0 Os dados do RAID so armazenados no superblock da partio e remov-la do RAID no apaga estes dados, o que permite adicion-la novamente ao mesmo original RAID sem maiores esforos para o kernel. Isto pode ser comprovado quando examinamos a partio removida e vemos que as configuraes do RAID ainda esto l. # mdadm --examine /dev/sdb1 /dev/md0: Version : 0.90.00 UUID : 3d981197:4cba768c:9e68b2c8:17b61269 Creation Time : Sun Sep 27 22:41:35 2009 Raid Level : raid1 Used Dev Size : 48064 (46.95 MiB 49.22 MB) Array Size : 48064 (46.95 MiB 49.22 MB) Raid Devices : 2 Total Devices : 3 Preferred Minor : 0 Update Time : Mon Sep 28 01:20:07 2009 State : clean Active Devices : 2 Working Devices : 3 Failed Devices : 0 Spare Devices : 1 Checksum : 7f1da86d - correct Events : 194 Number Major Minor RaidDevice State this 2 8 17 2 spare /dev/sdb1 0 1 2 0 1 2 8 8 8 49 33 17 0 1 2 active sync /dev/sdd1 active sync /dev/sdc1 spare /dev/sdb1 Dominando Linux - Usando RAID e LVM2

24 Para remover as informaes, preciso limpar o superblock da partio. # mdadm --zero-superblock /dev/sdb1 # mdadm --examine /dev/sdb1 mdadm: No md superblock detected on /dev/sdb1. Para finalizar, remova a partio do disco. Caso queira limpar os dados da partio e no somente apagar a tabela de partio do disco, escreva zeros ou valores aleatrios nela antes de remov-la. # dd if=/dev/zero of=/dev/sdb1 # dd if=/dev/urandom of=/dev/sdb1 # fdisk /dev/sdb d w

Substituindo um disco ou uma partio em um RAID-1 danificado


Uma das formas de danificar um RAID-1 atravs de uma falha em um dos discos que o compe. No curso, agiremos como se o disco sdc falhou e substitudo por outro. # shutdown -h 0 Acesse as configuraes de sua mquina virtual. Na opo Discos Rgidos (Hard Disks), substitua o disco rd2.vdi no Slot SATA Port 2 pelo disco rd4.vdi. Isto far com que o disco sdc seja iniciado pleo kernel epor ser novo, sem nenhuma informao sobre o RAID-1

Dominando Linux - Usando RAID e LVM2

25 Salve a configurao, clique em Ok e inicie a mquina virtual. Note que o RAID-1 est disponvel. # cat /mnt/docs/ola ola Contudo, ele est danificado pela falta de um dos discos que o compe. Note que apenas um dos dois discos est sinalizado como up [U_]. , # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid1 sdd1[0] 48064 blocks [2/1] [U_] unused devices: <none> # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Sun Sep 27 22:41:35 2009 Raid Level : raid1 Array Size : 48064 (46.95 MiB 49.22 MB) Used Dev Size : 48064 (46.95 MiB 49.22 MB) Raid Devices : 2 Total Devices : 1 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Tue Oct 13 22:27:06 2009 State : clean, degraded Active Devices : 1 Working Devices : 1 Failed Devices : 0 Spare Devices : 0 UUID : 3d981197:4cba768c:9e68b2c8:17b61269 Events : 0.278 Number Major Minor RaidDevice State 0 8 49 0 active sync /dev/sdd1 1 0 0 1 removed Durante a inicializao automtica do raid, o kernel registrou a falha. # dmesg | grep md: (listagem parcial) md: Autodetecting RAID arrays. md: invalid raid superblock magic on sdb1 md: sdb1 does not have a valid v0.90 superblock, not importing! Dominando Linux - Usando RAID e LVM2

26 md: Scanned 2 and added 1 devices. md: autorun ... md: considering sdd1 ... md: adding sdd1 ... md: created md0 md: bind<sdd1> md: running: <sdd1> Vamos restaurar o RAID-1 adicionando uma partio ao RAID. Comece criando a partio. # fdisk /dev/sdc n p 1 ENTER 6 t fd w # mdadm /dev/md0 --add /dev/sdc1 mdadm: added /dev/sdc1 Verifique que o RAID-1 est ntegro. # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid1 sdc1[1] sdd1[0] 48064 blocks [2/2] [UU] unused devices: <none> # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Sun Sep 27 22:41:35 2009 Raid Level : raid1 Array Size : 48064 (46.95 MiB 49.22 MB) Used Dev Size : 48064 (46.95 MiB 49.22 MB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Tue Oct 13 22:41:10 2009 State : clean Active Devices : 2 Working Devices : 2 Dominando Linux - Usando RAID e LVM2

27 Failed Devices : 0 Spare Devices : 0 UUID : 3d981197:4cba768c:9e68b2c8:17b61269 Events : 0.326 Number Major Minor RaidDevice State 0 8 49 0 active sync /dev/sdd1 1 8 33 1 active sync /dev/sdc1

Aumentando o nmero de discos ativos em um RAID


Com Linux possvel adicionar discos aos RAID 1, 4, 5 e 6 usando o modo Grow para modificar o atributo raid-devices. Vamos fazer um RAID-1 com trs discos para obter maior desempenho de leitura em nosso sistema. # mdadm --grow /dev/md0 --raid-devices=3 Note que agora o kernel espera trs discos no RAID md0, mas apenas dois deles esto UP, o que o torna degradado. # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid1 sdc1[1] sdd1[0] 48064 blocks [3/2] [UU_] unused devices: <none> # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Sun Sep 27 22:41:35 2009 Raid Level : raid1 Array Size : 48064 (46.95 MiB 49.22 MB) Used Dev Size : 48064 (46.95 MiB 49.22 MB) Raid Devices : 3 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Tue Oct 13 22:58:57 2009 State : clean, degraded Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 UUID : 3d981197:4cba768c:9e68b2c8:17b61269 Dominando Linux - Usando RAID e LVM2

28 Events : 0.380 Number Major Minor RaidDevice State 0 8 49 0 active sync /dev/sdd1 1 8 33 1 active sync /dev/sdc1 2 0 0 2 removed Vamos establizar o RAID inserindo uma nova partio. Crie uma nova partio no disco sdb e a adicione ao RAID. # fdisk /dev/sdb n p 1 ENTER 6 t fd w # mdadm /dev/md0 --add /dev/sdb1 mdadm: added /dev/sdb1 Veja que a nova partio no entrou como spare (sobressalente) e sim como um disco ativo [UUU]. # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid1 sdb1[2] sdc1[1] sdd1[0] 48064 blocks [3/3] [UUU] unused devices: <none> # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Sun Sep 27 22:41:35 2009 Raid Level : raid1 Array Size : 48064 (46.95 MiB 49.22 MB) Used Dev Size : 48064 (46.95 MiB 49.22 MB) Raid Devices : 3 Total Devices : 3 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Tue Oct 13 23:03:58 2009 State : clean Active Devices : 3 Working Devices : 3 Dominando Linux - Usando RAID e LVM2

29 Failed Devices : 0 Spare Devices : 0 UUID : 3d981197:4cba768c:9e68b2c8:17b61269 Events : 0.420 Number Major Minor RaidDevice State 0 8 49 0 active sync /dev/sdd1 1 8 33 1 active sync /dev/sdc1 2 8 17 2 active sync /dev/sdb1

Diminuindo o nmero de discos do RAID


Tambm podemos reduzir o nmero de discos do RAID estabelecendo um novo valor para o atributo raid-devices atravs do modo Grow. Inicialmente, preciso remover as parties a serem retiradas deixando apenas a quantidade condizente ao novo tamanho do RAID. Vamos remover a partio sdb1 para deixar nosso RAID com tamanho dois. # mdadm /dev/md0 --fail /dev/sdb1 mdadm: set /dev/sdb1 faulty in /dev/md0 # mdadm /dev/md0 --remove /dev/sdb1 mdadm: hot removed /dev/sdb1 Agora diminua o nmero de parties do RAID para dois. # mdadm --grow /dev/md0 --raid-devices=2 Note que o RAID est ntegro. # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Sun Sep 27 22:41:35 2009 Raid Level : raid1 Array Size : 48064 (46.95 MiB 49.22 MB) Used Dev Size : 48064 (46.95 MiB 49.22 MB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Tue Oct 13 23:12:06 2009 State : clean Active Devices : 2 Dominando Linux - Usando RAID e LVM2

30 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 UUID : 3d981197:4cba768c:9e68b2c8:17b61269 Events : 0.428 Number Major Minor RaidDevice State 0 8 49 0 active sync /dev/sdd1 1 8 33 1 active sync /dev/sdc1

Monitorando um RAID
mdadm oferece recursos para monitorar eventos que ocorrem com os RAID. Atravs do modo monitor possvel enviar e-mails, executar programas ou enviar os eventos para o syslog. Em seu modo mais simples, o monitoramento pe o programa executando como um processo em foreground (primeiro plano) e envia mensagens para a tela. # mdadm --monitor /dev/md0 Em outro terminal, logue como root e execute as atividades abaixo no RAID para vermos os eventos capturados pelo monitoramento. <ALT><F2> # mdadm /dev/md0 --fail /dev/sdc1 <ALT> <F1> (mensagem exibida por mdadm em monitoramento) Oct 18 19:31:20: Fail on /dev/md0 /dev/sdc1 <ALT><F2> # mdadm /dev/md0 --remove /dev/sdc1 <ALT> <F1> (mensagem exibida por mdadm em monitoramento) Oct 18 19:31:20: Fail on /dev/md0 /dev/sdc1 <ALT><F2> # mdadm /dev/md0 --add /dev/sdc1 <ALT> <F1> (mensagem exibida por mdadm em monitoramento) Oct 18 19:31:20: Fail on /dev/md0 /dev/sdc1 Oct 18 19:33:15: RebuildStarted on /dev/md0 unknown device Oct 18 19:33:16: RebuildFinished on /dev/md0 unknown device Dominando Linux - Usando RAID e LVM2

31 Oct 18 19:33:16: SpareActive on /dev/md0 /dev/sdc1 <CTRL><C> Caso queira enviar os eventos para o syslog, use o parmetro syslog. # mdadm --monitor --syslog /dev/md0 <ALT><F2> # mdadm /dev/md0 --fail /dev/sdc1 # mdadm /dev/md0 --remove /dev/sdc1 # mdadm /dev/md0 --add /dev/sdc1 # tail /var/log/messages (listagem parcial) Oct 18 19:39:44 virtualtoto mdadm[5115]: RebuildFinished event detected on md device /dev/md0 Oct 18 19:39:44 virtualtoto mdadm[5115]: SpareActive event detected on md device /dev/md0, component device /dev/sdc1 Oct 18 19:39:44 virtualtoto mdadm[5172]: RebuildFinished event detected on md device /dev/md0 Oct 18 19:39:44 virtualtoto mdadm[5172]: SpareActive event detected on md device /dev/md0, component device /dev/sdc1 Oct 18 19:40:01 virtualtoto cron[5180]: (root) CMD (test -x /usr/sbin/run-crons && /usr/sbin/runcrons ) Caso queira que os eventos sejam enviados por e-mail, use o parmetro mail seguido do e-mail de destino. Um servidor local SMTP ser necessrio para enviar a mensagem # mdadm --monitor --mail admin@toto.com.br /dev/md0 # mdadm --monitor --syslog --mail admin@toto.com.br /dev/md0 Quando temos vrios RAID a serem monitorados, possvel usar o parmetro scan para localizlos automaticamente. # mdadm --monitor --syslog --mail admin@toto.com.br --scan Caso queira executar o mdadm em backgroud (segundo plano), use o parmetro daemonise. A nmero exibido o PID do processo. # mdadm --monitor --daemonise --syslog --mail admin@toto.com.br --scan 5515 Uma boa prtica adicionar este comando em um script de inicializao de seu computador. Em Gentoo. # echo mdadm --monitor --daemonise --syslog --mail admin@toto.com.br --scan > /etc/conf.d/local.start

Dominando Linux - Usando RAID e LVM2

32 Caso queira encerrar o monitoramento, basta enviar uma mensagem TERM ao processo. # kill -TERM 5515

Removendo um RAID
Para remover um RAID de nosso computador, preciso garantir que ele no esteja em uso. # umount /dev/md0 Depois, remova o RAID. # mdadm --stop /dev/md0 mdadm: stopped /dev/md0 Note que o RAID no existe mais. # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] unused devices: <none> Ateno, as parties que compunham o RAID ainda mantm os dados armazenados nelas. Se voc recriar o mesmo RAID com estas mesmas parties, os dados estaro l disponveis para uso. Para retirar todas as informaes, escreva zeros ou dados aleatrios na partio e apague os superblock. # dd if=/dev/zero of=/dev/sdb1 # dd if=/dev/urandom of=/dev/sdc1 # dd if=/dev/zero of=/dev/sdd1 # mdadm --zero-superblock /dev/sdb1 # mdadm --zero-superblock /dev/sdc1 # mdadm --zero-superblock /dev/sdd1 E depois remova as parties. No faa isto neste curso pois as usaremos no RAID-5 a seguir. # fdisk /dev/sdb d w # fdisk /dev/sdc d w # fdisk /dev/sdd d w

Dominando Linux - Usando RAID e LVM2

33

Criando um RAID-5
RAID-5 um esquema onde uma paridade calculada a cada faixa de dados e distribuda em todos os discos. Tal mecanismo permite que o RAID esteja operacional, mesmo em caso de quebra de um dos discos.

As operaes realizadas com o mdadm para o RAID-1 so iguais para RAID-5, apenas variando a os valores do parmetros em sua criao. Vamos criar um RAID-5 com trs parties usando a sintaxe abaixo. # mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sd{b,c,d}1 mdadm: /dev/md0 stared Veja que o RAID-5 est ativo. # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid5 sdd1[2] sdc1[1] sdb1[0] 96128 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU] unused devices: <none> # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Wed Oct 14 00:28:32 2009 Raid Level : raid5 Array Size : 96128 (93.89 MiB 98.44 MB) Used Dev Size : 48064 (46.95 MiB 49.22 MB) Raid Devices : 3 Total Devices : 3 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Wed Oct 14 00:28:46 2009 State : clean Dominando Linux - Usando RAID e LVM2

34 Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 64K UUID : 692198a5:c4e81632:262558d0:d955e43e Events : 0.36 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 2 8 49 2 active sync /dev/sdd1 Note que uma rea equivalente a uma partio foi consumida pela paridade no RAID. Durante a criao do RAID-5 podemos definir o tamanho o bloco de dados em cada faixa do RAID atravs do parmetro chunk, o padro 64KB. Outro parmetro interessante o layout que determina o algoritmo usado para calcular a paridade. Por padro, mdadm usa left-symmetric, identificado pelo nmero 2 em /proc/mdstat, e considerado o melhor dos algoritmos disponveis em Linux para RAID-5. Vamos recriar o RAID-5 para vermos o uso destes parmetros. # mdadm --stop /dev/md0 # mdadm --create /dev/md0 --level=5 --chunk=128 --layout=right-symmetric --raiddevices=3 /dev/sd{b,c,d}1 # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid5 sdd1[2] sdc1[1] sdb1[0] 9600 blocks level 5, 128k chunk, algorithm 3 [3/3] [UUU] Para aumentar o nmero de discos em um RAID-5, acrescente o disco como spare (sobressalente) e depois mude o atributo raid-devices para ativar o disco. Remova o RAID para usarmos os discos em outros tipos de RAID. # mdadm --stop /dev/md0

Dominando Linux - Usando RAID e LVM2

35

Criando um RAID-0
Um RAID-0 permite que os dados sejam gravados e lidos de forma distribuda nos discos que o compe. Nenhum mecanismo de proteo oferecido em caso de quebra de um dos discos.

Para criar um RAID-0, use a seguinte sintaxe. # mdadm --create /dev/md0 --level=0 --raid-devices=3 /dev/sd{b,c,d}1 mdadm: /dev/md0 stared # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid0 sdd1[2] sdc1[1] sdb1[0] 144192 blocks 64k chunks unused devices: <none> # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Wed Oct 14 00:26:57 2009 Raid Level : raid0 Array Size : 144192 (140.84 MiB 147.65 MB) Raid Devices : 3 Total Devices : 3 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Wed Oct 14 00:26:57 2009 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 Dominando Linux - Usando RAID e LVM2

36 Chunk Size : 64K UUID : b125725b:434e8b2f:f9619050:6fb58867 Events : 0.1 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 2 8 49 2 active sync /dev/sdd1 Note que o RAID-0 disponibiliza toda rea das parties para uso. mdadm no oferece mecanismos de aumentar ou diminuir parties ao RAID-0. Remova o RAID para usarmos os discos em outros tipos de RAID. # mdadm --stop /dev/md0

Dominando Linux - Usando RAID e LVM2

37

Criando um RAID Linear


Um RAID Linear permite que uma partio possa ser usada como extenso de outra quando esta estiver com toda sua capacidade ocupada. disco seja adicionado os dados sejam gravados e lidos de forma distribuda nos discos que o compe. Nenhum mecanismo de proteo oferecido em caso de quebra de um dos discos.

Linear md0 A B C sdb1


Para criar um RAID Linear, use a seguinte sintaxe. # mdadm --create /dev/md0 --level=linear --raid-devices=2 /dev/sd{b,c}1 mdadm: /dev/md0 stared # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active linear sdc1[1] sdb1[0] 96128 blocks 64k rounding unused devices: <none> # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Sat Oct 17 19:11:26 2009 Raid Level : linear Array Size : 96128 (93.89 MiB 98.44 MB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Sat Oct 17 19:14:56 2009 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Dominando Linux - Usando RAID e LVM2

D E sdc1

38 Spare Devices : 0 Rounding : 64K UUID : ba495196:daf2d405:5ab75c03:da11bb99 Events : 0.3 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 Note que o RAID Linear disponibiliza toda rea das parties para uso. mdadm no oferece mecanismos de aumentar ou diminuir parties ao RAID Linear. Remova o RAID para usarmos os discos em outros tipos de RAID. # mdadm --stop /dev/md0

Dominando Linux - Usando RAID e LVM2

39

Criando um RAID-6
RAID-6 um esquema onde duas paridades so calculadas a cada faixa de dados e distribudas em todos os discos. Tal mecanismo permite que o RAID esteja operacional, mesmo em caso de quebra de dois dos discos.

Para usarmos um RAID-6, preciso quatro discos. Configure sua mquina para ter os quatro discos conforme a configurao abaixo.

Como este disco rd2.vdi era membro de um RAID-1 anteriormente criado, o Kernel o reconheceu e montou o RAID. Vamos remover o RAID-1 antes de criarmos o RAID-6. # umount /dev/md0 # mdadm --stop /dev/md0

Dominando Linux - Usando RAID e LVM2

40 Depois crie o RAID-6 usando a sintaxe abaixo. # mdadm --create /dev/md0 --level=6 --raid-devices=4 /dev/sd{b,c,d,e}1 mdadm: /dev/md0 stared # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid6 sde1[3] sdd1[2] sdc1[1] sdb1[0] 96128 blocks level 6, 64k chunk, algorithm 2 [4/4] [UUUU] unused devices: <none> # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Wed Oct 14 00:43:24 2009 Raid Level : raid6 Array Size : 96128 (93.89 MiB 98.44 MB) Used Dev Size : 48064 (46.95 MiB 49.22 MB) Raid Devices : 4 Total Devices : 4 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Wed Oct 14 00:50:53 2009 State : clean Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Chunk Size : 64K UUID : f125bd55:5d228c48:32cfd09c:6533f995 Events : 0.34 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 2 8 49 2 active sync /dev/sdd1 3 8 65 3 active sync /dev/sde1 Note que uma rea equivalente a duas parties foram consumidas pelas paridades. Remova o RAID para usarmos os discos em outros tipos de RAID. # mdadm --stop /dev/md0

Dominando Linux - Usando RAID e LVM2

41

Criando um RAID-10
RAID-10 possuem o mesmos nveis de tolerncia que um RAID-1, porm com mais tolerncia a falhas de disco e melhor desempenho.

Crie o RAID-10 usando a sintaxe abaixo. # mdadm --create /dev/md0 --level=10 --raid-devices=4 /dev/sd{b,c,d,e}1 mdadm: /dev/md0 stared # cat/proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid10 sde1[3] sdd1[2] sdc1[1] sdb1[0] 96128 blocks 64K chunks 2 near-copies [4/4] [UUUU] unused devices: <none> # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Sat Oct 17 19:38:43 2009 Raid Level : raid10 Array Size : 96128 (93.89 MiB 98.44 MB) Used Dev Size : 48064 (46.95 MiB 49.22 MB) Raid Devices : 4 Total Devices : 4 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Sat Oct 17 19:45:52 2009 Dominando Linux - Usando RAID e LVM2

42 State : clean Active Devices : 4 Working Devices : 4 Failed Devices : 0 Spare Devices : 0 Layout : near=2 Chunk Size : 64K UUID : 8d7e2fd8:f5868747:95df6126:a3d857e3 Events : 0.34 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 2 8 49 2 active sync /dev/sdd1 3 8 65 3 active sync /dev/sde1 Note que apenas metade da rea total est disponvel para uso. Outra forma de criar um RAID-10, combinando dois RAID-1, md0 e md1, em um RAID-0 md2. Isto pode ser feito usando a sintaxe abaixo e pode ser a nica sada em kernels sem o suporte personalidade RAID-10. # mdadm --create /dev/md0 --level=1 --raid-devices=2 /dev/sd{b,c}1 # mdadm --create /dev/md1 --level=1 --raid-devices=2 /dev/sd{d,e}1 # mdadm --create /dev/md2 --level=0 --raid-devices=2 --chuck=64 /dev/md{0,1} # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md2 : active raid0 md1[1] md0[0] 96000 blocks 64k chunks md1 : active raid1 sde1[1] sdd1[0] 48064 blocks [2/2] [UU] md0 : active raid1 sdc1[1] sdb1[0] 48064 blocks [2/2] [UU] unused devices: <none> # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Wed Oct 14 00:54:00 2009 Raid Level : raid1 Array Size : 48064 (46.95 MiB 49.22 MB) Used Dev Size : 48064 (46.95 MiB 49.22 MB) Dominando Linux - Usando RAID e LVM2

43 Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Wed Oct 14 00:58:14 2009 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 UUID : ad16b267:96f65b67:c352fde5:1f60f65b Events : 0.34 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 # mdadm --detail /dev/md1 /dev/md1: Version : 0.90 Creation Time : Wed Oct 14 00:54:12 2009 Raid Level : raid1 Array Size : 48064 (46.95 MiB 49.22 MB) Used Dev Size : 48064 (46.95 MiB 49.22 MB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 1 Persistence : Superblock is persistent Update Time : Wed Oct 14 00:56:21 2009 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 UUID : a07463e1:ad57a6b2:349dd039:80505610 Events : 0.34 Number Major Minor RaidDevice State 0 8 49 0 active sync /dev/sdd1 1 8 65 1 active sync /dev/sde1 # mdadm --detail /dev/md2 /dev/md2: Version : 0.90 Dominando Linux - Usando RAID e LVM2

44 Creation Time : Wed Oct 14 00:55:59 2009 Raid Level : raid0 Array Size : 96000 (93.77 MiB 98.30 MB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 2 Persistence : Superblock is persistent Update Time : Wed Oct 14 00:55:59 2009 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Chunk Size : 64K UUID : 63c732af:ad34a350:050578fa:beb23aea Events : 0.1 Number Major Minor RaidDevice State 0 9 0 0 active sync /dev/block/9:0 1 9 1 1 active sync /dev/block/9:1 Note que apenas metade da rea total est disponvel para uso e que os dispositivos que compe o RAID md2 so identificados pelo MAJOR e MINOR number. Para us-lo, formate o RAID-10 /dev/md2 e o monte. Remova o RAID para usarmos os discos em outros tipos de RAID. # mdadm --stop /dev/md2 # mdadm --stop /dev/md1 # mdadm --stop /dev/md0

Dominando Linux - Usando RAID e LVM2

45

Criando um RAID-0+1
RAID-0+1 permite a mesma tolerncia que um RAID-5, porm com maior desempenho para escrita e gravao. Como no possuem uma personalidade nativa no kernel, para cri-los preciso combinar dois RAID-0, md0 e md1, em um RAID-1 md2.

Isto pode ser feito usando a seguinte sintaxe. # mdadm --create /dev/md0 --level=0 --chunk=64 --raid-devices=2 /dev/sd{b,c}1 # mdadm --create /dev/md1 --level=0 --chuck=64 --raid-devices=2 /dev/sd{d,e}1 # mdadm --create /dev/md2 --level=1 --raid-devices=2 --chuck=64 /dev/md{0,1} # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md2 : active raid1 md1[1] md0[0] 96064 blocks [2/2] [UU] md1 : active raid0 sde1[1] sdd1[0] 96128 blocks 64k chunks md0 : active raid0 sdc1[1] sdb1[0] 96128 blocks 64k chunks unused devices: <none> # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Wed Oct 14 01:12:32 2009 Raid Level : raid0 Dominando Linux - Usando RAID e LVM2

46 Array Size : 96128 (93.89 MiB 98.44 MB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Wed Oct 14 01:12:32 2009 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Chunk Size : 64K UUID : 95af0260:ae4f8603:6efc85b2:4e2b3d82 Events : 0.1 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 # mdadm --detail /dev/md1 /dev/md1: Version : 0.90 Creation Time : Wed Oct 14 01:12:45 2009 Raid Level : raid0 Array Size : 96128 (93.89 MiB 98.44 MB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 1 Persistence : Superblock is persistent Update Time : Wed Oct 14 01:12:45 2009 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Chunk Size : 64K UUID : 6b0bf77b:bacdf592:49435fba:01164f30 Events : 0.1 Number Major Minor RaidDevice State 0 8 49 0 active sync /dev/sdd1 1 8 65 1 active sync /dev/sde1 Dominando Linux - Usando RAID e LVM2

47 # mdadm --detail /dev/md2 /dev/md2: Version : 0.90 Creation Time : Wed Oct 14 01:13:03 2009 Raid Level : raid1 Array Size : 96064 (93.83 MiB 98.37 MB) Used Dev Size : 96064 (93.83 MiB 98.37 MB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 2 Persistence : Superblock is persistent Update Time : Wed Oct 14 01:13:21 2009 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 UUID : 2968b9cf:3d91a33c:c3221658:f736a513 Events : 0.34 Number Major Minor RaidDevice State 0 9 0 0 active sync /dev/block/9:0 1 9 1 1 active sync /dev/block/9:1 Note que toda a rea disponibilizada e que os dispositivos que compe o RAID md2 so identificados pelo MAJOR e MINOR number. Remova o RAID para usarmos os discos em outros tipos de RAID. # mdadm --stop /dev/md2 # mdadm --stop /dev/md1 # mdadm --stop /dev/md0

Dominando Linux - Usando RAID e LVM2

48

Criando um RAID-50
RAID-50 permitem uma tolerncia maior que RAID-5 e permitem maiores taxas de leitura. Para criar um RAID-50, preciso combinar dois RAID-5, md0 e md1, em um RAID-0 md2.

Utilizaremos sies parties para construir o RAID-50. Crie trs parties nos discos sdb, sdc e sdd. # fdisk/dev/sdb n p 2 ENTER ENTER t 2 fd w # fdisk/dev/sdc n p 2 ENTER ENTER t 2 fd w # fdisk/dev/sdd n Dominando Linux - Usando RAID e LVM2

49 p 2 ENTER ENTER t 2 fd w Depois crie o RAID-50 usando a seguinte sintaxe. # mdadm --create /dev/md0 --level=5 --raid-devices=3 /dev/sd{b,c,d}1 # mdadm --create /dev/md1 --level=5 --raid-devices=3 /dev/sd{b,c,d}2 # mdadm --create /dev/md2 --level=0 --raid-devices=2 --chuck=64 /dev/md{0,1} # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md2 : active raid0 md1[1] md0[0] 192256 blocks 64k chunks md1 : active raid5 sdd2[2] sdc2[1] sdb2[0] 96256 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU] md0 : active raid5 sdd1[2] sdc1[1] sdb1[0] 96128 blocks level 5, 64k chunk, algorithm 2 [3/3] [UUU] unused devices: <none> # mdadm --detail /dev/md0 /dev/md0: Version : 0.90 Creation Time : Sat Oct 17 20:00:12 2009 Raid Level : raid5 Array Size : 96128 (93.89 MiB 98.44 MB) Used Dev Size : 48064 (46.95 MiB 49.22 MB) Raid Devices : 3 Total Devices : 3 Preferred Minor : 0 Persistence : Superblock is persistent Update Time : Sat Oct 17 20:01:22 2009 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Dominando Linux - Usando RAID e LVM2

50 Chunk Size : 64K UUID : fd67ccb0:31a2fe08:7624063d:25f9d40e Events : 0.34 Number Major Minor RaidDevice State 0 8 17 0 active sync /dev/sdb1 1 8 33 1 active sync /dev/sdc1 2 8 49 2 active sync /dev/sdd1 # mdadm --detail /dev/md1 /dev/md1: Version : 0.90 Creation Time : Sat Oct 17 20:00:47 2009 Raid Level : raid5 Array Size : 96256 (94.02 MiB 98.57 MB) Used Dev Size : 48128 (47.01 MiB 49.28 MB) Raid Devices : 3 Total Devices : 3 Preferred Minor : 1 Persistence : Superblock is persistent Update Time : Sat Oct 17 20:01:22 2009 State : clean Active Devices : 3 Working Devices : 3 Failed Devices : 0 Spare Devices : 0 Layout : left-symmetric Chunk Size : 64K UUID : 37ffe562:332222ef:16c128d0:8a0b97ca Events : 0.34 Number Major Minor RaidDevice State 0 8 18 0 active sync /dev/sdb2 1 8 34 1 active sync /dev/sdc2 2 8 50 2 active sync /dev/sdd2 # mdadm --detail /dev/md2 /dev/md2: Version : 0.90 Creation Time : Sat Oct 17 20:01:21 2009 Raid Level : raid0 Array Size : 192256 (187.78 MiB 196.87 MB) Raid Devices : 2 Total Devices : 2 Dominando Linux - Usando RAID e LVM2

51 Preferred Minor : 2 Persistence : Superblock is persistent Update Time : Sat Oct 17 20:01:21 2009 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Chunk Size : 64K UUID : ff481116:238a0534:3f85d5c0:a5fb097e Events : 0.1 Number Major Minor RaidDevice State 0 9 0 0 active sync /dev/block/9:0 1 9 1 1 active sync /dev/block/9:1 Note que uma rea equivalente a duas parties foi gasta com a paridade. Para us-lo, formate o RAID-50 /dev/md2 e o monte. Remova o RAID para usarmos os discos em outros tipos de RAID. # mdadm --stop /dev/md2 # mdadm --stop /dev/md1 # mdadm --stop /dev/md0

Removendo as parties para reutilizarmos os discos nos mdulos seguintes


Vamos remover as parties existentes nos discos usados no curso de RAID para no nos confundirmos com as mensagens gerados pelo driver MD nos mdulos seguintes do curso. # mdadm --zero-superblock /dev/sdb1 # mdadm --zero-superblock /dev/sdb2 # mdadm --zero-superblock /dev/sdc1 # mdadm --zero-superblock /dev/sdc2 # mdadm --zero-superblock /dev/sdd1 # mdadm --zero-superblock /dev/sdd2 # mdadm --zero-superblock /dev/sde1 # mdadm --zero-superblock /dev/sde2 Apague todas as parties dos discos usando fdisk.

Dominando Linux - Usando RAID e LVM2

52

Device Mapper
Device Mapper uma parte do kernel Linux 2.6 que permite administrador criar volumes virtuais que referenciam dispositivos de blocos reais da mquina. Esta virtualizao permite aos administradores, por exemplo, isolar discos fsicos da mquina dos sistemas de arquivos, dandolhes uma srie de flexibilidades. Uma destas flexibilidades permite inserir ou remover novos discos, redimensionar os volumes virtuais e consequentemente alterar a rea disponvel para os sistemas de arquivos. Dependendo do sistema de arquivos utilizado, o redimensionamento pode ser feito on-line e sem interrupo dos servios nele instalados ou nos arquivos usados pelos programas em execuo. Device Mapper composto pela biblioteca /usr/lib/libdevmapper.so que expe o recurso para as aplicaes em modo usurio e por algumas ferramentas. Contudo, o uso destas ferramentas to pouco amigvel para explorar toda sua capacidade que uma camada de abstrao das prprias ferramentas foi criada em modo usurio para facilitar estas operaes. Exemplos disto so LVM2 e DM_CRYPT. Esta complexidade tanta que neste curso s veremos o recurso de snapshot, que um recurso de tirar um cpia de uma volume sem degradar o sistema, com LVM2.

Dominando Linux - Usando RAID e LVM2

53

Identificando o suporte ao Device Mapper no kernel Linux


Para ter suporte ao Device Mapper, preciso que o kernel esteja compilado com este suporte. Isto pode ser verificado avaliando o arquivo /proc/config.gz, que contm a configurao do kernel em execuo. Procure por CONFIG_BLK_DEV_DM. Se o recurso foi compilado como mdulo, haver um valor m no lugar de y. # zcat /proc/config.gz | grep CONFIG_BLK_DEV_DM CONFIG_BLK_DEV_DM=y Se seu kernel no expe o arquivo /proc/config.gz, voc pode identificar o suporte atravs das informaes exibidas durante sua carga. # dmesg | grep ^device-mapper device-mapper: ioctl: 4.14.0-ioctl (2008-04-23) initialised: dm-devel@redhat.com

Habilitando Device Mapper no kernel Linux


Caso seu kernel no esteja com o device mapper habilitado, preciso compil-lo. Carregue o menu de configurao. # cd /usr/src/linux # make menuconfig Selecione a opo de menu Device Drivers e configure seu kernel usando a configurao abaixo como modelo. Device Drivers ---> [*] Multiple devices driver support (RAID and LVM) --> <*> Device mapper support <*> Crypt target support <*> Snapshot support <*> Mirror target Saia do menu, salve a configurao e compile o novo kernel # make bzImage # make modules Faa a instalao do kernel e seus mdulos para que possamos us-lo e depois configure o GRUB para t-lo como padro. Neste curso o menu do GRUB j est configurado para carregar um kernel de nome kernel-2.6.30-raid-lvm2, cujo title Gentoo Kernel 2.6.30-r6 (with RAID and LVM2). Dominando Linux - Usando RAID e LVM2

54 # make modules_install # cp arch/x86/boot/bzImage /boot/kernel-2.6.30-r6-raid-lvm2 # vi /boot/grub/menu.lst gg I (mude a linha default 1 para default 2) ESC :wq # cat /boot/grub/menu.lst default 2 timeout 30 color black/white splashimage=(hd0,0)/grub/robin.xpm.gz title Gentoo Kernel 2.6.30-r6 root (hd0,0) kernel /kernel-2.6.30-r6 root=/dev/sda3 video=vesafb:ywrap,mtrr:3 vga=0x303 title Gentoo Kernel 2.6.30-r6 (with RAID) root (hd0,0) kernel /kernel-2.6.30-r6-raid root=/dev/sda3 video=vesafb:ywrap,mtrr:3 vga=0x303 title Gentoo Kernel 2.6.30-r6 (with RAID and LVM2) root (hd0,0) kernel /kernel-2.6.30-r6-raid-lvm2 root=/dev/sda3 video=vesafb:ywrap,mtrr:3 vga=0x303 Reinicialize a mquina e de carga no sistema atravs da opo Gentoo Kernel 2.6.30-r6 (with RAID and LVM2).

Dominando Linux - Usando RAID e LVM2

55

Instalando a biblioteca e ferramentas Device Mapper


Use seu gerenciador de pacotes de sua distribuio para obter a biblioteca e ferramentas usa pelo device mapper em modo usurio. Em Gentoo : # emerge sys-fs/device-mapper

Criando um volume lgico de bloco usando Device Mapper


Com device mapper podemos criar um dispositivo de bloco que abstraem o disco ou partio fsica na viso do administrador, dando a ele mais flexibilidade de gerenciar suas reas de armazenamento. Suponhamos que temos uma partio ou disco em nossa mquina e no queremos aloc-lo inteiramente para um nico sistema de arquivos. Usando a ferramenta dmsetup create, podemos criar um volume lgico que ocuparia parte desta partio, deixando uma rea livre no disco para futuro crescimento ou alocao de novos volumes. Vamos criar um volume lgico chamado public ocupando 50 MB do disco /dev/sdb. Para saber quanto metade do disco, precisamos saber quantos setores de 512 bytes tem este disco. Isto pode ser obtido com o comando blockdev. # blockdev --getsz /dev/sdb 204800 Nosso disco tem ento 512 bytes * 204800 setores = 104857600 bytes = 100 MB. Logo, 50 MB so 102400 setores. De posse deste tamanho, vamos escrever no disco em uma notao device mapper que queremos alocar apenas metade para nosso volume lgico. # echo 0 102400 linear /dev/sdb 0 | dmsetup create publico Onde o primeiro nmero indica onde comea o volume lgico, o segundo onde termina e o ltimo o primeiro setor deste disco. Linear uma das formas como os blocos sero escritos no volume, neste caso, sequencialmente. Isto criar um volume chamado publico no diretrio /dev/mapper/publico. Para usar o volume lgico, formate-o com o sistema de arquivos que desejar. # mkfs -t ext4 /dev/mapper/publico

Dominando Linux - Usando RAID e LVM2

56 Depois monte-o em algum diretrio e use-o normalmente. # mkdir /mnt/publico # mount /dev/mapper/publico /mnt/publico # df -h /mnt/publico Filesystem Size Used Avail Use% Mounted on /dev/mapper/publico 49M 4.8M 42M 11% /mnt/publico # cp /var/log/messages /mnt/publico

Criando um segundo volume em um mesmo disco


Para criar um segundo volume no mesmo disco j usado pelo device mapper, usamos o mesmo procedimento, apenas precisamos tomar o cuidado de no sobrepormos os setores. Nosso volume publico ocupa os primeiros 102400 setores de um disco de 204800 setores. Para criarmos um outro volume de 50 MB, usaremos o seguinte endereamento na sintaxe. # echo 0 102400 linear /dev/sdb 102400 | dmsetup create restrito Para us-lo, faa os mesmos procedimentos. # mkfs -t ext3 /dev/mapper/restrito Depois monte-o em algum diretrio e use-o normalmente. # mkdir /mnt/restrito # mount /dev/mapper/restrito /mnt/restrito # df -h /mnt/restrito Filesystem Size Used Avail Use% Mounted on /dev/mapper/restrito 49M 4.9M 42M 11% /mnt/restrito

Dominando Linux - Usando RAID e LVM2

57

Obtendo informaes sobre os volumes


Podemos obter informaes sobre a configurao de cada volume dmsetup status. # dmsetup status publico: 0 102400 linear restrito: 0 102400 linear Ou obter informaes um pouco mais detalhadas com dmsetup info. # dmsetup info Name: publico State: ACTIVE Read Ahead: 256 Tables present: LIVE Open count: 1 Event number: 0 Major, minor: 254, 0 Number of targets: 1 Name: restrito State: ACTIVE Read Ahead: 256 Tables present: LIVE Open count: 1 Event number: 0 Major, minor: 254, 1 Number of targets: 1

Ativando o volume aps a inicializao da mquina


Aps a inicializao da mquina, os volumes no esto disponveis por padro. preciso carreg-los ou recri-los. Para evitar de repetir todo o processo e correndo o grave risco de perder dados no processo, podemos guardar as informaes com o comando dmsetup table no arquivo /etc/dmtab, que ser usado por algum script na inicializao de sua mquina para disponibiliz-los. # dmsetup table restrito: 0 102400 linear 7:0 102400 publico: 0 102400 linear 7:0 0 # dmsetup table >> /etc/dmtab Reinicie a mquina para testarmos o uso do recurso e logue novamente como root. # reboot Dominando Linux - Usando RAID e LVM2

58 Veja que os volumes esto disponveis. Isto ocorreu porque um script foi executado para ativar os volumes durante a inicializao da mquina. Em Gentoo /sbin/rc /etc/init.d/device-mapper (baselayout-2) /lib/rcscripts/addons/dm-start.sh http://www.gentoo.org/doc/en/handbook/handbook-x86.xml?part=2&chap=4

Removendo um volume
Para remover um volume, usamos o comando dmsetup remove. Os volumes no podem estar em uso. # umount /mnt/publico # umount /mnt/restrito # dmsetup remove /dev/mapper/publico Podemos remover todos de uma vez com dmsetup remove_all. # dmsetup remove_all

Dominando Linux - Usando RAID e LVM2

59

LVM2
LVM2 um conjunto de ferramentas em modo usurios que simplificam o uso de Device Mapper. Mesmo em estaes de trabalho com grandes discos, administradores podem utilizar LVM2. Por exemplo, h um tempo adquiri um disco de 500GB para usar vrios sistema operacionais instalados no virtualizados para estudo e meu Linux no dia a dia. Dividi o disco em 10 parties de 50 GB e usei uma delas para instalar Gentoo. Com o uso do LVM2, pude controlar o crescimento de menu Gentoo. Quando os 50 GB iniciais foram consumidos, acrescentei outros 50 GB com o LVM2 e ampliei a partio /. Isto permitiu que eu no precisasse mover dados de um grande diretrio para a nova partio e tivesse que lidar com pontos de montagem, correndo o risco de no futuro, faltar espao em uma partio enquanto sobrava na outra. Na nomenclatura LVM2, discos fsicos ou parties so agrupados em Physical Volumes (PV). Nos PV so alocados os Volume Groups (VG). VG podem ser divididos em Logical Volumes (LV) onde so instalados os sistemas de arquivos. Discos ou parties podem ser inseridos ou retirados dos PV, permitindo redimensionar os VG e, em seguida, os LV e os sistemas de arquivos. O uso de discos deve ser evitado, pois, se o administrador utilizar outros sistema operacionais, eles podero erroneamente indicar para ele que o disco no contm dados e causar a falsa impresso de que esto disponveis para uso. Quando discos ou parties so usados pelo LVM2, eles so divididos unidades mnimas de alocao que so chamados Physical Extents (PE) e Logical Extents (LE). Por padro, o tamanho de 4 MB e a relao PE/LE de um para um. Ao aumentar ou diminuir o tamanho de LV em X LE, implica em alocar o liberar X PE nos discos que os contm. LVM2 no aloca PE continuamente nos discos, ou seja, LE podem estar mapeados para discos diferentes mesmo que um deles tenha rea suficiente para acomodar todos os LE.

Dominando Linux - Usando RAID e LVM2

60

Preparando os discos para usarmos com LVM2 neste curso


Vamos criar duas parties no disco sdc. # fdisk /dev/sdc n p 1 ENTER 6 n p 2 ENTER ENTER w

Instalando as ferramentas LVM2


Utilize o gerenciador de pacotes de sua distribuio para instalar o pacote de ferramentas LVM2. Em Gentoo : # emerge sys-fs/lvm2

Criando Physical Volumes (PV)


Antes de usarmos discos ou parties em LVM2 preciso inicializ-las como PV atravs do comando pvcreate. Vamos habilitar o disco sdb e a partio /dev/sdc1 # pvcreate /dev/sdb /dev/sdc1 Physical volume "/dev/sdb" successfully created Physical volume "/dev/sdc1" successfully created Uma prtica comum e muito mais robusta usar dispositivos RAID como Physical Volumes.

Dominando Linux - Usando RAID e LVM2

61

Visualizando informaes sobre os PV


Podemos visualizar informaes mais detalhadas sobre os PV existentes com o comando pvdisplay. # pvdisplay "/dev/sdb" is a new physical volume of "100.00 MB" --- NEW Physical volume --PV Name /dev/sdb VG Name PV Size 100.00 MB Allocatable NO PE Size (KByte) 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID 7MXvkN-JTgf-1ARF-xWHP-96XS-fdbT-E9hGbW "/dev/sdc1" is a new physical volume of "47.03 MB" --- NEW Physical volume --PV Name /dev/sdc1 VG Name PV Size 47.03 MB Allocatable NO PE Size (KByte) 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID JL3qmK-KOcO-u2H9-0eST-9F1g-QhuH-480X0X Note que no h nenhum Physical Extent (PE) criado, pois nenhum Volume Group (VG) os esto utilizando. Voc pode ver as informaes de cada PV individualmente se fornecer o PV como parmetro. # pvdisplay /dev/sdb # pvdisplay /dev/sdc1

Dominando Linux - Usando RAID e LVM2

62

Removendo um PV no alocado
Para retirar um PV que no possui nenhum PE alocado, usamos o comando pvremove. # pvcreate /dev/sdd Physical volume "/dev/sdb" successfully created # pvremove /dev/sdd Labels on physical volume "/dev/sdd" successfully wiped

Criando Volume Group (VG)


Em LVM2, PV no podem ser usados diretamente por file systems (sistemas de arquivos). Eles precisam ser associados a Volume Groups (VG) e depois a Logical Volumes (LV). VG no existem fisicamente como dispositivos de bloco na mquina, apenas existe com uma entidade abstrata para o LVM2 e que so registradas como diretrios em /dev. Um VG pode ser criado utilizando qualquer combinao de PV disponveis. Vamos criar um VG0 que utilizar o disco /dev/sdb apenas. Em um ambiente real, procure usar nomes mais significativos para seus volumes, como disco-RH e storage-financeiro. # vgcreate VG0 /dev/sdb Volume group "VG0" successfully created Podemos ver que o PV /dev/sdb agora est sustentando o VG VG0. # pvdisplay /dev/sdb --- Physical volume --PV Name /dev/sdb VG Name VG0 PV Size 100.00 MB / not usable 4.00 MB Allocatable yes PE Size (KByte) 4096 Total PE 24 Free PE 24 Allocated PE 0 PV UUID 7MXvkN-JTgf-1ARF-xWHP-96XS-fdbT-E9hGbW Note que foram criados nos 100.00 MB disponveis, 24 Physical Extents de 4096 KB, valor padro. Como no temos nenhum LV neste VG, nenhum PE ainda foi alocado. O tamanho o PE pode ser determinado ao criar o VG pelo parmetro -s ou --physycalextentsize, o menor valor 1KB e deve ser sempre igual a uma potncia de 2.

Dominando Linux - Usando RAID e LVM2

63 Se observarmos o PV /dev/sdc1, ele se mantm disponvel. # pvdisplay /dev/sdc1 "/dev/sdc1" is a new physical volume of "47.03 MB" --- NEW Physical volume --PV Name /dev/sdc1 VG Name PV Size 47.03 MB Allocatable NO PE Size (KByte) 0 Total PE 0 Free PE 0 Allocated PE 0 PV UUID JL3qmK-KOcO-u2H9-0eST-9F1g-QhuH-480X0X

Visualizando informaes sobre os VG


Podemos visualizar informaes sobre os VG com o comando vgdisplay. Se nenhum for passado como parmetro, todos existentes sero exibidos. # vgdisplay --- Volume group --VG Name VG0 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 96.00 MB PE Size 4.00 MB Total PE 24 Alloc PE / Size 0/0 Free PE / Size 24 / 96.00 MB VG UUID eF3FAp-kIKn-V4IS-WQT3-yUO3-L6eQ-1yJjWL Note que ele permite escrita e leitura, redimensionamento e no possui nenhum LV associado, tendo todos seu tamanho para uso.

Dominando Linux - Usando RAID e LVM2

64

Removendo um VG que no contm Logical Volumes (LV)


Para remover um VG que no contm nenhum LV nele, ou seja, nenhum PE alocado, basta usar o comando vgremove. # vgremove VG0 Volume group "VG0" successfully removed Vamos retomar o VG0 para us-lo no resto do curso. # vgcreate VG0 /dev/sdb

Criando um segundo VG
O processo de criar outros VG idntico ao da criao do primeiro VG na mquina. Basta termos PV disponveis para cri-los. Vamos criar um VG1 com PE de 8 MB usando a partio /dev/sdc1. # vgcreate VG1 -s 8MB /dev/sdc1 Volume group "VG1" successfully created Note o PE de 8MB refletindo na alocao do VG VG1 e do PV /dev/sdc1. # vgdisplay VG1 --- Volume group --VG Name VG1 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 40.00 MB PE Size 8.00 MB Total PE 5 Alloc PE / Size 0/0 Free PE / Size 5 / 40.00 MB VG UUID l3O21K-QUiZ-2nCw-Zu1Y-O9oS-yDbr-hd1WHu # pvdisplay /dev/sdc1 Dominando Linux - Usando RAID e LVM2

65 --- Physical volume --PV Name /dev/sdc1 VG Name VG1 PV Size 47.03 MB / not usable 7.03 MB Allocatable yes PE Size (KByte) 8192 Total PE 5 Free PE 5 Allocated PE 0 PV UUID JL3qmK-KOcO-u2H9-0eST-9F1g-QhuH-480X0X

Criando um Logical Volume (LV)


Logical Volumes (LV) so abstraes dos PV e que podem ser usados pelos administradores para armazenar os sistemas de arquivos. LV so criados em um VG e podem ter qualquer tamanho mltiplo do PE deste VG at o tamanho mximo do prprio VG. Podemos alocar o tamanho do LV desejado informando seu tamanho de KB a Exabytes, MB o padro, ou pela a quantidade de Logical Extents (LE) desejados, que so equivalentes em tamanho ao PE do VG que o contm. Para usarmos LE, devemos descobrir o tamanho do PE no VG desejado e dividir o tamanho desejado por ele para sabermos quantos LE precisaremos. Vamos criar um LV LV0 80 MB que usaremos para receber os documentos da empresa atravs do comando lvcreate. Como temos dois VG, mas apenas o VG0 comporta este tamanho, o LV0 ser criado nele. O parmetro -n ou --name indica o nome do LV, -L ou --size o tamanho e -l (ele) ou -extents o tamanho em LE. # lvcreate -L 80 -n LV0 VG0 Logical group "LV0" created Podemos ver a alocao do LV no VG0 e perceber que foram necessrios 20 PE de 4MB para comportar o LV0 e que ainda temos 4 PE, 16 MB, disponveis neste VG. # vgdisplay VG0 --- Volume group --VG Name VG0 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 0 Max PV 0 Dominando Linux - Usando RAID e LVM2

66 Cur PV Act PV VG Size PE Size Total PE Alloc PE / Size Free PE / Size VG UUID 1 1 96.00 MB 4.00 MB 24 20 / 80.00 MB 4 / 16.00 MB eF3FAp-kIKn-V4IS-WQT3-yUO3-L6eQ-1yJjWL

O mesmo pode ser notado no PV /dev/sdb que sustenta o VG0. # pvdisplay /dev/sdb --- Physical volume --PV Name /dev/sdb VG Name VG0 PV Size 100.00 MB / not usable 4.00 MB Allocatable yes PE Size (KByte) 4096 Total PE 24 Free PE 4 Allocated PE 20 PV UUID 7MXvkN-JTgf-1ARF-xWHP-96XS-fdbT-E9hGbW LV so arquivos de blocos do tipo device mapper, MAJOR number 253, criados pelo LVM2 e esto armazenados no /dev/mapper. # ls -l /dev/mapper total 0 lrwxrwxrwx 1 root root brw-rw---- 1 root disk

16 2009-10-25 18:15 control -> ../device-mapper 253, 0 2009-10-25 23:23 VG0-LV0

H tambm um link simblico para cada LV criado em um diretrio com o nome do VG em /dev. # ls -ld /dev/VG? drwx------ 2 root root 19 2009-10-25 23:36 VG0 # ls -l /dev/VG0 total 0 lrwxrwxrwx 1 root root 19 2009-10-25 23:36 LV0 -> /dev/mapper/VG0-LV0

Dominando Linux - Usando RAID e LVM2

67

Visualizando informaes sobre um LV


Para visualizarmos as informaes sobre um LV, usamos o comando lvdisplay. Se nenhum parmetro for passado, todos os LV sero exibidos. # lvdisplay --- Logical volume --LV Name /dev/VG0/LV0 VG Name VG0 LV UUID kgtsld-nGVq-whCH-H26y-TbCt-V8jq-jxo1R1 LV Write Access read/write LV Status available # open 1 LV Size 80.00 MB Current LE 20 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 Para vermos informaes de um LV especfico, passe o arquivo de bloco que o representa como parmetro. # lvdisplay /dev/VG0/LV0

Utilizando um LV
Aps a criao do LV, podemos us-lo, bastando format-lo com um sistema de arquivos. Vamos formatar o LV0 com ext4 e mont-lo no em /mnt/docs. # mkfs -t ext4 /dev/VG0/LV0 Crie o diretrio /mnt/docs em sua mquina se no houver um e monte o LV nele. Ele foi criado nos exerccios de RAID # mkdir /mnt/docs # mount /dev/VG0/LV0 /mnt/docs Temos agora um LV LV0 montado em /mnt/docs com quase 80 MB disponvel para uso, parte foi usada para o controle do sistema de arquivos. # df -h Dominando Linux - Usando RAID e LVM2

68 Filesystem /dev/sda3 udev /dev/sda1 shm /dev/mapper/VG0-LV0 Size 4.3G 10M 98M 125M 78M Used 2.0G 96K 11M 0 5.6M Avail Use% Mounted on 2.1G 49% / 10M 1% /dev 83M 11% /boot 125M 0% /dev/shm 68M 8% /mnt/docs

Aumentando o LV usando rea disponvel no VG


Se observarmos o VG que contm LV0, podemos perceber que ainda existem 4 PE disponveis para alocao, perfazendo um total de 16 MB. # vgdisplay VG0 --- Volume group --VG Name VG0 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 0 Max PV 0 Cur PV 1 Act PV 1 VG Size 96.00 MB PE Size 4.00 MB Total PE 24 Alloc PE / Size 20 / 80.00 MB Free PE / Size 4 / 16.00 MB VG UUID eF3FAp-kIKn-V4IS-WQT3-yUO3-L6eQ-1yJjWL Podemos ampliar um LV de duas formas com o comando lvextend, dizendo seu novo tamanho ou o acrscimo desejado. Em ambos os casos, podemos dizer a rea em KB a Exabytes ou em extents. As duas sintaxes abaixo so equivalentes. Vamos ampliar o LV0 em 16 MB, preciso passar o arquivo LV para referncia-lo. # lvextend -L+16 /dev/VG0/LV0 Extending logical volume LV0 to 96.00 MB Logical volume LV0 successfully resized # lvextend -L96 /dev/VG0/LV0 Extending logical volume LV0 to 96.00 MB Logical volume LV0 successfully resized Dominando Linux - Usando RAID e LVM2

69 Note que o LV0 teve seu tamanho ampliado, mas o sistema de arquivos ainda enxerga o tamanho antigo. # lvdisplay /dev/VG0/LV0 --- Logical volume --LV Name /dev/VG0/LV0 VG Name VG0 LV UUID kgtsld-nGVq-whCH-H26y-TbCt-V8jq-jxo1R1 LV Write Access read/write LV Status available # open 1 LV Size 96.00 MB Current LE 24 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 # df -h Filesystem (listagem parcial) /dev/mapper/VG0-LV0 Size Used Avail Use% Mounted on 78M 5.6M 68M 8% /mnt/docs

Redimensionar o sistema de arquivo um processo que vria de acordo com o ipo utilizado. Alguns possuem o suporte on-line, outros precisam que o volume esteja desmontado. Outros ainda, no oferecem o suporte, sendo necessrio uma operao de backup e restore com uma nova formatao. Para ampliar um sistema de arquivos ext4 usamos o comando volume resize2fs. Se nenhum tamanho for informado, a ampliao ocupar toda a rea disponvel no LV. # resize2fs /dev/VG0/LV0 resize2fs 1.41.3 (12-Oct-2008) Filesystem at /dev/VG0/LV0 is mounted on /mnt/docs; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/VG0/LV0 to 98304 (1k) blocks. The filesystem on /dev/VG0/LV0 is now 98304 blocks long. O que pode ser notado ao rever novamente a rea disponvel. # df -h Filesystem (listagem parcial) /dev/mapper/VG0-LV0 Size Used Avail Use% Mounted on 93M 5.6M 83M 7% /mnt/docs

Dominando Linux - Usando RAID e LVM2

70

Ampliando um VG e um LV usando um novo PV


Quando a quantidade de PE livres em um VG no for suficiente para atender a necessidade de crescimento, preciso adicionar um novo PV ao VG. Vamos adicionar a partio /dev/sdc2 ao VG0. Primeiro preciso habilitar a partio para uso do LVM2. # pvcreate /dev/sdc2 Physical volume "/dev/sdc2" successfully created Depois a adicionamos ao VG0 estendendo o VG com o comando vgextend. # vgextend VG0 /dev/sdc2 Volume group "VG0" successfully extended Temos agora mais PE para alocar nos LV neste VG. O que pode ser observado em VG0 e /dev/sdc2. # vgdisplay VG0 --- Volume group --VG Name VG0 System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 13 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 140.00 MB PE Size 4.00 MB Total PE 35 Alloc PE / Size 24 / 96.00 MB Free PE / Size 11 / 44.00 MB VG UUID eF3FAp-kIKn-V4IS-WQT3-yUO3-L6eQ-1yJjWL # pvdisplay /dev/sdc2 --- Physical volume --PV Name /dev/sdc2 VG Name VG0 PV Size 47.07 MB / not usable 3.07 MB Allocatable yes PE Size (KByte) 4096 Total PE 11 Free PE 11 Dominando Linux - Usando RAID e LVM2

71 Allocated PE PV UUID 0 SGTwFu-s3dW-H9XG-aJgY-pVqQ-6hsr-PAW0mQ

Finalmente podemos estender o LV para usar os PE disponveis. Vamos ampliar LV1 em 12 MB, que equivale a 3 LE. As sintaxes abaixo so equivalentes. # lvextend -l+3 /dev/VG0/LV0 Extending logical volume LV0 to 108.00 MB Logical volume LV0 successfully resized # lvextend -l27 /dev/VG0/LV0 Extending logical volume LV0 to 108.00 MB Logical volume LV0 successfully resized Nosso LV1 agora possui 108MB e 27 LE alocados no VG0 e nos PV que os compe. # lvdisplay /dev/VG0/LV0 --- Logical volume --LV Name /dev/VG0/LV0 VG Name VG0 LV UUID kgtsld-nGVq-whCH-H26y-TbCt-V8jq-jxo1R1 LV Write Access read/write LV Status available # open 1 LV Size 108.00 MB Current LE 27 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0 # vgdisplay VG0 --- Volume group --VG Name VG0 System ID Format lvm2 Metadata Areas 4 Metadata Sequence No 16 VG Access read/write VG Status resizable MAX LV 0 Cur LV 1 Open LV 1 Max PV 0 Cur PV 2 Act PV 2 VG Size 140.00 MB Dominando Linux - Usando RAID e LVM2

72 PE Size 4.00 MB Total PE 35 Alloc PE / Size 27 / 108.00 MB Free PE / Size 8 / 32.00 MB VG UUID eF3FAp-kIKn-V4IS-WQT3-yUO3-L6eQ-1yJjWL # pvdisplay /dev/sdb --- Physical volume --PV Name /dev/sdb VG Name VG0 PV Size 100.00 MB / not usable 4.00 MB Allocatable yes (but full) PE Size (KByte) 4096 Total PE 24 Free PE 0 Allocated PE 24 PV UUID TF9FRe-V0Aq-N9B5-5wN6-2NNl-zRvm-3zOSZn # pvdisplay /dev/sdc2 --- Physical volume --PV Name /dev/sdc2 VG Name VG0 PV Size 47.07 MB / not usable 3.07 MB Allocatable yes PE Size (KByte) 4096 Total PE 11 Free PE 8 Allocated PE 3 PV UUID wH0nuu-Qfvd-ARYm-uT1q-PEw0-TXEq-8KRGFw Novamente necessrio redimensionar o sistema de arquivos para refletir a expanso. # resize2fs /dev/VG0/LV0 resize2fs 1.41.3 (12-Oct-2008) Filesystem at /dev/VG0/LV0 is mounted on /mnt/docs; on-line resizing required old desc_blocks = 1, new_desc_blocks = 1 Performing an on-line resize of /dev/VG0/LV0 to 110592 (1k) blocks. The filesystem on /dev/VG0/LV0 is now 110592 blocks long. # df -h Filesystem (listagem parcial) /dev/mapper/VG0-LV0 Size Used Avail Use% Mounted on 105M 5.6M 94M 6% /mnt/docs

Dominando Linux - Usando RAID e LVM2

73

Criando um novo LV em um mesmo VG


Um VG pode comportar vrios LV. Em nosso Volume Group VG0, temos 8 PE livres para receber outro LV. Vamos criar um LV2 com os PE livres existentes, totalizando uma rea de 32 MB. # lvcreate -l8 -n LV1 VG0 Logical volume "LV1" created

Reduzindo o tamanho de um LV
Podemos reduzir o tamanho de um LV em um processo semelhante ao ao realizado para expandi-lo, porm, preciso antes reduzir o tamanho do sistema de arquivos para no perdermos dados. Em ext4, reduo do tamanho no uma operao que possa ser feita on-line. Para reduzir seu tamanho, desmonte-o, cheque sua integridade, faa um backup e depois reduza-o. # umount /dev/VG0/LV0 # e2fsck -f /dev/VG0/LV0 (faa um backup) # resize2fs /dev/VG0/LV0 96M resize2fs 1.41.3 (12-Oct-2008) Resizing filesystem Performing an on-line resize of /dev/VG0/LV0 to 98304 (1k) blocks. The filesystem on /dev/VG0/LV0 is now 98304 blocks long. Uma vez ajustado o sistema de arquivos, reduza o LV usando o comando lvreduce. A sintaxe a mesma para o lvextend. # lvreduce -L 96 /dev/VG0/LV0 WARNING: Reducing active logical volume to 96.00 MB THIS MAY DESTROY YOUR DATA (filesystem etc.) Do you really want to reduce LV0 [y/n] ? y Reducing logical volume LV0 to 96.00 MB Logical volume LV0 successfully resized Depois repita a checagem de integridade para garantir que o sistema de arquivos est ntegro. Cruze os dedos e j v se lembrando onde ps a fita de backup. # e2fsck -f /dev/VG0/LV0 Ao final monte novamente o volume e o ponha em uso. # mount /dev/VG0/LV0 /mnt/docs Dominando Linux - Usando RAID e LVM2

74

Removendo um PV sem alocao


Para remover um PV membro de VG, mas que no tem nenhum PE alocado, ou seja, nenhum LV o esta utilizando, usamos o comando vgreduce. Vamos simular a entrada de um novo PV no VG0 para depois retir-lo. # pvcreate /dev/sdd # vgextend VG0 /dev/sdd # vgreduce VG0 /dev/sdb Removed '/dev/sdd' form volume group VG0 Ao final, podemos remover o PV liberado. # pvremove /dev/sdd Labels on physical volume "/dev/sdd" successfully wiped

Retirando um PV com dados alocados


Podemos retirar um PV com PE alocados se houver outro PV no mesmo volume group com PE livres suficientes para substitu-los. Para fazermos a movimentao, usamos o comando pvmove. Vamos retirar do VG0 o PV /dev/sdc2. Note que ele possui 8 PE alocados. # pvdisplay /dev/sdc2 --- Physical volume --PV Name /dev/sdc2 VG Name VG0 PV Size 47.07 MB / not usable 3.07 MB Allocatable yes PE Size (KByte) 4096 Total PE 11 Free PE 3 Allocated PE 8 PV UUID wH0nuu-Qfvd-ARYm-uT1q-PEw0-TXEq-8KRGFw Incluiremos o PV /dev/sdd no VG0 para termos PE disponveis para receber este 8 extents. # pvcreate /dev/sdd # vgextend VG0 /dev/sdd

Dominando Linux - Usando RAID e LVM2

75 # vgdisplay VG0 --- Volume group --VG Name VG0 System ID Format lvm2 Metadata Areas 6 Metadata Sequence No 14 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size 236.00 MB PE Size 4.00 MB Total PE 59 Alloc PE / Size 32 / 128.00 MB Free PE / Size 27 / 108.00 MB VG UUID i30A6I-FAHd-ItVO-hQQQ-GHud-QXRW-xfFK9n Execute o pvmove para movimentar os PE alocados em /dev/sdc2. Como apenas /dev/sdd tem PE livres, eles sero movidos para ele. # pvmove /dev/sdc2 /dev/sdc2: Moved : 100.0% # pvdisplay /dev/sdc2 --- Physical volume --PV Name /dev/sdc2 VG Name VG0 PV Size 47.07 MB / not usable 3.07 MB Allocatable yes PE Size (KByte) 4096 Total PE 11 Free PE 11 Allocated PE 0 PV UUID wH0nuu-Qfvd-ARYm-uT1q-PEw0-TXEq-8KRGFw

Dominando Linux - Usando RAID e LVM2

76 # pvdisplay /dev/sdd --- Physical volume --PV Name /dev/sdd VG Name VG0 PV Size 100.00 MB / not usable 4.00 MB Allocatable yes PE Size (KByte) 4096 Total PE 24 Free PE 16 Allocated PE 8 PV UUID R1cxFD-vXXM-pC8J-RPHd-aMiB-9XfE-2uWe0v Note que /dev/sdc2 ainda parte do volume group VG0. Para retir-lo, precisamos reduzir VG0, para depois remover o PV. # vgreduce VG0 /dev/sdc2 Removed "/dev/sdc2" from volume group "VG0" # pvremove /dev/sdc2 Labels on physical volume "/dev/sdd" successfully wiped Se voc possui mais de um PV no volume group com capacidade de receber os PE alocados em PV e quer determinar qual deles o pvmove ir usar para deslocar, informe os dois PV como parmetros. # pvmove PVorigem PVdestino

Realizando Snapshots
Snapshot um recurso existente em que permite que uma cpia de um LV seja feita sem que uma alocao fsica de dados seja feita, isto , voc possui dois LV que compartilham o mesmo bloco de dados. Administradores podem se valer deste recurso para gerar uma imagem no tempo do volume para que backups ou outras rotinas possam ser executadas sem ter que congelar a escrita no volume de origem. Outro caracterstica interessante dos snapshots em LVM2 que eles suportam escrita tanto na origem quanto na cpia. Se uma alterao ocorre na origem, o bloco copiado antes da alterao para o snapshot. Se o bloco alterado no snapshot, ele copiado da origem primeiro para registrar a alterao no snapshot, mantendo o bloco de origem intacto. Este processo conhecido como Copy On Write (COW) e mantido pelo programa /sbin/dmeventd deve estar em sempre em execuo deste a criao do snapshot. Em Gentoo, existe um script para iniciar o /sbin/dmeventd e deix-lo em execuo. # /etc/init.d/dmeventd start Para carreg-lo automaticamente a cada inicializao da mquina, inclua-o no runlevel boot. # rc-update add dmeventd boot Dominando Linux - Usando RAID e LVM2

77 Vamos alocar algum dado no logical volume LV0 para percebermos a alocao dos blocos no snapshot. (garanta que o /dev/VG0/LV0 est montado em /mnt/docs) # cp /var/log/messages /mnt/docs Vamos alocar PV no volume group VG0 para termos espao suficiente para alocar as alteraes realizadas no snapshot. # pvcreate /dev/sdc2 /dev/sde # vgextend /dev/sdc2 /dev/sde Vamos criar o snapshot para o logical volume LV0LV0 chamado LV0snap. O tamanho do snapshot no precisa ser equivalente ao do LV de origem, mas se for menor, nem todas as alteraes realizadas podero ser registradas. A sintaxe de criao usa o programa lvcreate, com o parmetro -s para indicar que estamos criando um snapshot e o nome do LV de origem ao final. # lvcreate -s -L 96M -n LV0snap /dev/VG0/LV0 Logical volume LV0snap created Monte o snapshot em um diretrio para podermos us-lo. # mkdir /mnt/snap # mount /dev/VG0/LV0snap /mnt/LV0snap # ls /mnt/snap /mnt/docs /mnt/docs: lost+found messages /mnt/snap: lost+found messages

Dominando Linux - Usando RAID e LVM2

78 Note que a alocao LV0snap conhecido com o snapshot de LV0 e que o nmero o tamanho da rea alocada em blocos nele de 0.01% # lvdisplay /dev/VG0/LV0snap --- Logical volume --LV Name /dev/VG0/LV0snap VG Name VG0 LV UUID 4NmEtV-HnVe-M351-psad-dG04-KU2N-HLh2T0 LV Write Access read/write LV snapshot status active destination for /dev/VG0/LV0 LV Status available # open 1 LV Size 96.00 MB Current LE 24 COW-table size 96.00 MB COW-table LE 24 Allocated to snapshot 0.01% Snapshot chunk size 4.00 KB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2 Tambm podemos ver que LV0 reconhece que possui um snapshot. # lvdisplay /dev/VG0/LV0 --- Logical volume --LV Name /dev/VG0/LV0 VG Name VG0 LV UUID MLQeNg-zatW-rvET-6XrM-U8Pd-yo01-kgXPtS LV Write Access read/write LV snapshot status source of /dev/VG0/LV0snap [active] LV Status available # open 1 LV Size 96.00 MB Current LE 24 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:0

Dominando Linux - Usando RAID e LVM2

79 Vamos realizar uma alterao no volume de origem para ver que o nmero de blocos alocados no snapshot aumenta. # cp /mnt/docs/messages /mnt/docs/messages1 (aguarde alguns poucos segundos) # lvdisplay /dev/VG0/LV0snap --- Logical volume --LV Name /dev/VG0/LV0snap VG Name VG0 LV UUID 4NmEtV-HnVe-M351-psad-dG04-KU2N-HLh2T0 LV Write Access read/write LV snapshot status active destination for /dev/VG0/LV0 LV Status available # open 1 LV Size 96.00 MB Current LE 24 COW-table size 96.00 MB COW-table LE 24 Allocated to snapshot 0.03% Snapshot chunk size 4.00 KB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2 Note que a alocao subiu para 0.03%. Faamos uma alterao no snapshot para vermos o resultado. # cp /mnt/snap/messages /mnt/snap/messages2 (aguarde alguns poucos segundos) # lvdisplay /dev/VG0/LV0snap --- Logical volume --LV Name /dev/VG0/LV0snap VG Name VG0 LV UUID 4NmEtV-HnVe-M351-psad-dG04-KU2N-HLh2T0 LV Write Access read/write LV snapshot status active destination for /dev/VG0/LV0 LV Status available # open 1 LV Size 96.00 MB Current LE 24 COW-table size 96.00 MB COW-table LE 24 Allocated to snapshot 0.44% Snapshot chunk size 4.00 KB Dominando Linux - Usando RAID e LVM2

80 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2

Removendo um Snapshot ou um Logical Volume (LV)


Para remover um snapshot ou um logical volume LV, usamos o comando lvremove. Se houver um snapshot para um LV, remova o snapshot primeiro. Tanto o snapshot quando o LV no podem estar montados ao serem removidos. # umount /mnt/docs /mnt/snap # lvremove /dev/VG0/LV0snap Do you really want to remove active logical volume LV0snap ? [y/n] : y Logical volume LV0snap successfully removed # lvremove /dev/VG0/LV0 Do you really want to remove active logical volume LV0 ? [y/n] : y Logical volume LV0 successfully removed

Dominando Linux - Usando RAID e LVM2

81

Loop Devices
Loop devices um recurso do kernel Linux que permite que arquivos possam ser acessados como dispositivos de blocos. Uma vez criados, eles podem ser usados para qualquer operao comum realizada em um dispositivo de bloco, como suportar sistemas de arquivos. Imagine que voc no possua mais parties disponveis em sua mquina, mas possui espao livre gostaria de usar um diferente tipo de sistema de arquivos para suportar uma determinada aplicao que tem melhor funcionamento usando outro sistema de arquivos que o instalado em sua mquina. Neste caso, uma alternativa seria usar um Loop Device, format-lo com o novo sistema de arquivos e mont-lo para uso em seu computador.

Dominando Linux - Usando RAID e LVM2

82

Identificando o suporte a Loop Device no kernel Linux


Para ter suporte a Loop Device preciso que o kernel esteja compilado com o suporte habilitado.. Isto pode ser verificado avaliando o arquivo /proc/config.gz, que contm a configurao do kernel em execuo. Procure por CONFIG_BLK_DEV_LOOP. Se o recurso foi compilado como mdulo, haver um valor m no lugar de y. # zgrep CONFIG_BLK_DEV_LOOP /proc/config.gz CONFIG_BLK_DEV_LOOP=y Se seu kernel no expe o arquivo /proc/config.gz, voc pode identificar o suporte atravs das informaes exibidas durante sua carga. # dmesg | grep loop: loop:module load

Habilitando Loop Device no kernel Linux


Caso seu kernel no esteja com o suporte habilitado, preciso compil-lo. Carregue o menu de configurao do kernel. # cd /usr/src/linux # make menuconfig Selecione a opo de menu Device Drivers e configure seu kernel usando a configurao abaixo como modelo. Device Drivers ---> [*] Block devices --> <*> Loopback device support Saia do menu, salve a configurao, compile e instale o novo kernel. Felizmente em nosso curso, este recurso j est habilitado.

Dominando Linux - Usando RAID e LVM2

83

Localizando e criando Loop Devices


A interao com o suporte a Loop Devices no kernel feita atravs de arquivos no diretrio /dev/loop. # ls -l /dev/loop total 0 lrwxrwxrwx 1 root root 8 2009-11-01 08:23 0 -> ../loop0 lrwxrwxrwx 1 root root 8 2009-11-01 08:23 1 -> ../loop1 lrwxrwxrwx 1 root root 8 2009-11-01 08:23 2 -> ../loop2 lrwxrwxrwx 1 root root 8 2009-11-01 08:23 3 -> ../loop3 lrwxrwxrwx 1 root root 8 2009-11-01 08:23 4 -> ../loop4 lrwxrwxrwx 1 root root 8 2009-11-01 08:23 5 -> ../loop5 lrwxrwxrwx 1 root root 8 2009-11-01 08:23 6 -> ../loop6 lrwxrwxrwx 1 root root 8 2009-11-01 08:23 7 -> ../loop7 Estes arquivos so link simblicos cujo o nome um nmero equivalente ao MINOR number de um arquivo /dev/loop no dirtrio /dev/, cujo MAJOR number 7. # ls -l /dev/loop? brw-rw---- 1 root disk 7, 0 2009-10-31 21:15 /dev/loop0 brw-rw---- 1 root disk 7, 1 2009-10-31 21:15 /dev/loop1 brw-rw---- 1 root disk 7, 2 2009-10-31 21:15 /dev/loop2 brw-rw---- 1 root disk 7, 3 2009-10-31 21:15 /dev/loop3 brw-rw---- 1 root disk 7, 4 2009-10-31 21:15 /dev/loop4 brw-rw---- 1 root disk 7, 5 2009-10-31 21:15 /dev/loop5 brw-rw---- 1 root disk 7, 6 2009-10-31 21:15 /dev/loop6 brw-rw---- 1 root disk 7, 7 2009-10-31 21:15 /dev/loop7 Caso precise de mais Loop Devices, possvel adicion-los. A forma de faz-lo varia se o recurso estiver embutido no kernel, CONFIG_BLK_DEV_LOOP=y, ou como mdulo, CONFIG_BLK_DEV_LOOP=m. Para ter dez Loop devices, proceda da seguinte forma. Para Loop Device embutido no kernel, adicione o parmetro max_loop=10 na linha de carga do kernel no arquivo /boot/grub/menu.lst. # grep kernel /boot/grub/menu.lst (listagem parcial) kernel /kernel-2.6.30-r6 root=/dev/sda3 video=vesafb:ywrap,mtrr:3 vga=0x303 max_loop=10 Para Loop Device habilitados como mdulos, adicione a linha abaixo ao arquivo /etc/modprobe.conf. options loop max_loop=10 Garanta que o mdulo loop seja carregado na inicializao da mquina.

Dominando Linux - Usando RAID e LVM2

84 Em Gentoo, recomenda-se que no o arquivo /etc/modprobe.conf no seja editado diretamente. O procedimento correto sugerido o apresentado abaixo. Crie o arquivo /etc/modprobe.d/loop com as opes do mdulo. # echo options loop max_loop=10 > /etc/modprobe.d/loop Execute o script update-modules para atualizar o /etc/modprobe.conf # update-modules Para carregar o mdulo loop na inicializao da mquina echo loop >> /etc/modules.autoload.d/kernel-2.6

Preparando um Loop Device para uso


Para se utilizar um Loop Device precisamos criar um arquivo para servir de repositrio para o sistema de arquivos e depois apontar o Loop Device para ele. O tamanho da rea disponvel no Loop Device equivalente ao tamanho deste arquivo. Podemos criar estes arquivos usando um editor de texto ou outro aplicativo qualquer. Mas muito mais simples criar arquivos maiores usando o comando dd, que l dados (bs) de uma origem (if) e os copia em outra (of) uma determinada quantidade de vezes (count). Os comandos abaixo criam os arquivos disco0 e disco1 com 50MB, 51200 vezes 1024 bytes, usando um dispositivo virtual /dev/zero que sempre retorna zeros quando lido. # dd if=/dev/zero of=disco0 bs=1024 count-51200 # dd if=/dev/zero of=disco1 bs=1024 count-51200 # ls -l disco? -rw-r--r-- 1 root root 50M 2009-10-30 01:38 disco0 -rw-r--r-- 1 root root 50M 2009-10-30 01:38 disco1 Uma vez criados os repositrios, devemos apontar Loop Devices para eles. Isto feito pelo comando losetup. # losetup /dev/loop0 disco0 # losetup /dev/loop1 disco1 Use o gerenciado de pacotes de sua distribuio para instalar o comando losetup, normalmente membro do pacote util-linux. Em gentoo : # emerge sys-apps/util-linux

Dominando Linux - Usando RAID e LVM2

85

Identificando que Loop Device esto associados


Para identificarmos que Loop Devices esto em uso, podemos usar o comando mesmo comando losetup. # losetup -a /dev/loop/0: [0803]:56 (/root/disco0) /dev/loop/1: [0803]:78 (/root/disco1) # losetup /dev/loop0 /dev/loop/0: [0803]:56 (/root/disco0)

Utilizando um Loop Device


Uma vez criada a associao, formate o Loop Device e monte-o para utilizar. # mkfs -t ext3 /dev/loop0 # mount /dev/loop0 /mnt/publico # df -h /mnt/publico Filesystem Size Used Avail Use% Mounted on /dev/loop0 49M 4.9M 42M 11% /mnt/publico

Associando os Loop Devices na inicializao da mquina


A cada inicializao da mquina, as associaes dos Loop Devices so perdidas. preciso recri-las para que possamos manter seu uso constante. Isto pode ser facilmente feito atravs do arquivo /etc/fstab. Insira a linha abaixo no arquivo para que a montagem seja feita a cada carga da mquina. # echo '/root/disco0 /mnt/publico ext3 loop=/dev/loop0 0 0' >> /etc/fstab

Reinicie a mquina e veja que o volume est montado. # mount | grep loop0 /dev/loop0 on /mnt/publico type ext3 (rw) # losetup /dev/loop0 /dev/loop/0: [0803]:56 (/root/disco0)

Dominando Linux - Usando RAID e LVM2

86 Para executar a montagem manualmente, use a sintaxe equivalente abaixo. # mount -t ext3 -o loop=/dev/loop0 /root/disco0 /mnt/puplico

Desfazendo a associao com um Loop Device


Para desfazer a associao de um Loop Device com um arquivo, usamos o comando losetup -d. # losetup -d /dev/loop0 Se ele estiver montado, use o comando umount primeiro. # umount /dev/loop0 Se a associao foi feita pelo comando losetup e no pelo mount, ao desmontar o volume, ela permanecer. Caso queira umount remova tambm a associao estabelecida por losetup, use o parmetro -d, note que uma mensagem ser gerada indicando que o Loop Device no existe mais. # losetup /dev/loop disco0 # losetup -a /dev/loop/0: [0803]:56 (/root/disco0) # mount /dev/loop0 /mnt/publico # umount /dev/loop0 # losetup -a /dev/loop/0: [0803]:56 (/root/disco0) # losetup -d /dev/loop0 # mount -t ext3 -o loop=/dev/loop0 /root/disco0 /mnt/puplico # losetup -a /dev/loop/0: [0803]:56 (/root/disco0) # umount /dev/loop0 ioctl: LOOP_CLR_FD: No such device or address # losetup -a # losetup /dev/loop disco0 # losetup -a /dev/loop/0: [0803]:56 (/root/disco0) Dominando Linux - Usando RAID e LVM2

87 # mount /dev/loop0 /mnt/publico # umount -d /dev/loop0 # losetup -a

Criando um RAID com Loop Devices


Se tivermos mais de um disco na mquina, podemos considerar o uso de RAID usando Loop Devices. Para fazer um, use a sequencia de comandos abaixo. # losetup /dev/loop0 disco0 # losetup /dev/loop1 disco1 # mdadm --create /dev/md0 --level=0 --raid-devices=2 /dev/loop{0,1} # cat /proc/mdstat Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4] md0 : active raid0 loop1[1] loop0[0] 102272 blocks 64k chunks unused devices: <none> Desfaa o RAID e os Loop Devices para podermos avanar no curso. # mdadm --stop /dev/md0 # losetup -d /dev/loop0 # losetup -d /dev/loop1

Dominando Linux - Usando RAID e LVM2

88

DM_CRYPT
DM_CRYPT a parte do device mapper responsvel por criptografar os volumes criados por ele usando as rotinas rotinas de criptografia do kernel. Na prtica, ele funciona como uma camada de transformao das operaes de entrada e sada nos dispositivos do device mapper, codificando e decodificando os dados que passam por ela. O kernel Linux oferece vrios algoritmos de criptografia e tamanho de chaves. Como no sou um especialista neste assunto, recomendo a leitura sobre estes mtodos para identificar quais as vantagens, desvantagens e cenrios de uso de cada um. Um bom comeo est em disk encryption theory (http://en.wikipedia.org/wiki/Disk_encryption_theory). A ferramenta para fazer uso do DM_CRYPT em modo usurio a cryptsetup. Inicialmente, esta ferramenta s armazenava as informaes sobre a criptografia fora do volume protegido, o que tornava difcil a portabilidade entre distribuies Linux e praticamente impossvel para outros sistemas operacionais. Percebendo esta limitao, os mantenedores desta ferramenta adicionaram a ela um recurso chamado Linux Unified Key Support (LUKS), que salva todas as informaes necessrias para se acessar um volume criptografado na tabela de partio deste volume. Com LUKS, a portabilidade entre distribuies Linux garantida desde que a distribuio fornea uma verso do cryptsetup com suporte a LUKS. E atravs do projeto FreeOTFE (http://freeotfe.org) existe suporte LUKS ao Windows 2000 em diante, Windows 7 incluso, e Windows Mobile 2003/2005 e 6. Contudo, fique atento aos sistemas de arquivos e alrotitmos comuns entre os dois ambientes. Outro benefcio de LUKS a capacidade de gerir at oito senhas diferentes para habilitar os volumes criptografados. Desta forma, vrios grupos de usurios e administradores podem ter acesso sem comprometer suas senhas. Neste curso, usaremos DM_CRYTP com LUKS para proteger parties. Loop Devices podem ser opes muito teis se desejarmos ter o recurso de criptografia sem ter que nos valor de um esquema de particionamento.

Dominando Linux - Usando RAID e LVM2

89

Identificando o suporte ao DM_CRYPT e aos algoritmos de criptografia no kernel Linux


Para ter suporte ao DM_CRYTP, preciso que o kernel esteja compilado com este suporte. Isto pode ser verificado avaliando o arquivo /proc/config.gz, que contm a configurao do kernel em execuo. Procure por CONFIG_DM_CRYPT. Se o recurso foi compilado como mdulo, haver um valor m no lugar de y. # zgrep CONFIG_DM_CRYPT /proc/config.gz CONFIG_BLK_DM_CRYPT=y Os algoritmos de criptografia habilitados podem ser vistos com o comando : # zgrep CONFIG_CRYPTO /proc/config.gz (listagem parcial) CONFIG_CRYPTO=y CONFIG_CRYPTO_ALGAPI=y CONFIG_CRYPTO_ALGAPI2=y CONFIG_CRYPTO_AEAD2=y CONFIG_CRYPTO_BLKCIPHER=y CONFIG_CRYPTO_BLKCIPHER2=y CONFIG_CRYPTO_HASH2=y CONFIG_CRYPTO_RNG2=y CONFIG_CRYPTO_PCOMP=y CONFIG_CRYPTO_MANAGER=y CONFIG_CRYPTO_MANAGER2=y CONFIG_CRYPTO_WORKQUEUE=y CONFIG_CRYPTO_CBC=y CONFIG_CRYPTO_ECB=y CONFIG_CRYPTO_AES=y CONFIG_CRYPTO_ARC4=y CONFIG_CRYPTO_DEFLATE=y CONFIG_CRYPTO_ZLIB=y CONFIG_CRYPTO_LZO=y CONFIG_CRYPTO_HW=y

Habilitando DM_CRYPT no kernel Linux


Caso seu kernel no esteja com o DM_CRYPT habilitado ou com os algoritmos que deseja, preciso compil-lo. Carregue o menu de configurao. # cd /usr/src/linux # make menuconfig Dominando Linux - Usando RAID e LVM2

90 Selecione a opo de menu Device Drivers e configure seu kernel usando a configurao abaixo como modelo. Device Drivers ---> [*] Multiple devices driver support (RAID and LVM) --> <*> Device mapper support <*> Crypt target support Cryptographic API ---> (selecione os algoritmos desejados) (neste curso, marque todas as opes) Saia do menu, salve a configurao, compile e instale o novo kernel.

Verificando os algoritmos de criptografia disponveis em um kernel em execuo


Voc pode verificar que algoritmos de criptografia esto disponveis em um kernel em execuo exibindo o contedo do arquivo /proc/crypto. # cat /proc/crypto (listagem parcial) name : cbc(aes) driver : cbc(aes-asm) module : kernel priority : 200 refcnt :1 selftest : passed type : blkcipher blocksize : 16 min keysize : 16 max keysize : 32 ivsize : 16 geniv : <default> name : sha256 driver : sha256-generic module : kernel priority : 0 refcnt :1 selftest : passed type : shash blocksize : 64 digestsize : 32 descsize : 168 Dominando Linux - Usando RAID e LVM2

91

Criptografando com LUKS


Vamos criptografar a partio /dev/sde1 usando o comando cryptsetup luksFormat usando suporte LUKS . # cryptsetup luksFormat /dev/sde1 WARNING! ========= This will overwrite data on /dev/sde1 irrevocably. Are you sure? (Type uppercase yes): YES Enter LUKS passphrase: totonick Verify passphrase: totonick Command Succesful. O mesmo procedimento pode ser aplicado a um Loop Device. Associe o Loop Device a um arquivo e depois criptografe-o. # losetup /dev/loop0 disco0 # cryptsetup luksFormat /dev/loop0 Caso queria determinar o algoritmo a ser usado, use o parmetro -c. # cryptsetup luksFormat -c blowfish /dev/loop0

Obtendo informaes com LUKS


Para obter informaes sobre como uma partio ou Loop Device foi criptografado, usamos o comando cryptsetup luksDump. # cryptsetup luksDump /dev/sde1 LUKS header information for /dev/sde1 Version: Cipher name: Cipher mode: Hash spec: Payload offset: MK bits: MK digest: MK salt: MK iterations: 1 aes cbc-essiv:sha256 sha1 1032 128 89 4c b7 53 5f a8 9a 27 6e ba 65 03 d3 3c f3 e8 a3 90 4f 37 0a fc e9 cb 4c 80 c1 c4 dc 96 17 34 d5 f7 a3 79 81 62 ba 0f 33 b6 c3 f1 cb 07 6d a2 34 16 60 13 10 Dominando Linux - Usando RAID e LVM2

92 UUID: 573eab94-882d-4b6a-967a-a219f82393c8

Key Slot 0: ENABLED Iterations: Salt:

243672 c6 86 8d c9 d6 26 e4 d7 39 c7 b8 e9 f4 1c e9 ce 7a 75 e5 3b d5 de 35 f0 ae 0a 39 98 9a c1 1f 2e Key material offset: 8 AF stripes: 4000 Key Slot 1: DISABLED Key Slot 2: DISABLED Key Slot 3: DISABLED Key Slot 4: DISABLED Key Slot 5: DISABLED Key Slot 6: DISABLED Key Slot 7: DISABLED Note os algoritmos usados, Cipher e HASH, e que apenas uma senha est ativada, key Slot 0. # cryptsetup luksDump /dev/loop/0

Usando uma partio ou Device Loop criptografado


Uma vez que preparamos a tabela de partio com as informaes criptografadas, devemos associ-la a um volume no Device Manager. isto feito com o comando cryptsetup luksOpen. # cryptsetup luksOpen /dev/sde1 protegido Enter LUKS passphrase: totonick Key slot 0 unlocked. Command successful. Pronto, temos um volume chamado protegido no device manager. # dmsetup protegido Name: protegido State: ACTIVE Read Ahead: 256 Tables present: LIVE Open count: 0 Event number: 0 Major, minor: 254, 0 Number of targets: 1

Dominando Linux - Usando RAID e LVM2

93 Formate o volume com o sistema de arquivos desejado e depois monte-o para uso. #mkfs -t ext3 /dev/mapper/protegido # mkdir /mnt/protegido # df -h /mnt/protegido Filesystem /dev/mapper/protegido Size 91M Used Avail Use% 5.6M 81M 7% Mounted on /mnt/protegido

Encerrando o uso
Para interromper o uso preciso desassociar-se do Device Mapper. Isto feito com o comando cryptsetup luksClose. Desmonte o volume antes. # umount /mnt/protegido # cryptsetup luksClose protegido Ao encerrar o uso, os dados permanecem salvos e criptografados. Para retomar o uso, basta usar luksOpen novamente.

Adicionando senhas
A adio de novas senhas pode ser feita com o comando cryptsetup luksAddKey. Uma das senhas atuais ser solicitada para que uma nova seja includa. O volume pode estar em uso. # cryptsetup luksAddKey /dev/sde1 Enter any LUKS passphrase: totonick key slot 0 unlocked. Enter new passphrase for key slot: pipoca Verify passphrase: pipoca Command successful.

Dominando Linux - Usando RAID e LVM2

94

Removendo senhas
Remover senhas um processo semelhante ao da adio, A nica diferena que devemos informar qual key slot queremos remover e uma senha remanescente. O comando o cryptsetup luksKillSlot. # cryptsetup luksKillSlot 1 Enter any remaining LUKS passphrase: totonick key slot 1 verified. Command successful.

Usando um arquivo arquivo para armazenar as senhas


Ao criptografar um volume, podemos armazenar a senha em um arquivo, que dever ser passado como parmetro a fim de evitar a digitao de senhas. Este arquivo pode estar em uma mdia removvel, garantindo uma segurana maior das informaes armazenadas. Caso o arquivo se perca, todos os dados se perdem. Crie o arquivo de senha. Para maior segurana, vamos faz-lo usando o comando dd e preenchendo-o com valores aleatrios. O tamanho do arquivo varia de acordo com o tamanho da chave usada no algoritmo de criptografia, veja max keysize em /proc/crypto, e afeta o valor do parmetro count. Para criar uma chave de 256 bytes, use a sintaxe abaixo. # dd if=/dev/urandom of=minhasenha bs=1 count 256 A seguir, formate o dispositivo com luksFormat, caso queira forar o tamanho da senha, use o parmetro -s ou --key-size. # cryptsetup luksFormat -s 256 /dev/loop0 minhasenha WARNING! ========= This will overwrite data on /dev/loop0 irrevocably. Are you sure? (Type uppercase yes): YES Command Succesful. Para usar, use luksOpen e informe o arquivo de senha atravs do parmetro -d ou --key-file. # cryptsetup luksOpen /dev/sde1 confidencial --key-file=./minhasenha Key 0 unlocked. Command successful. A partir deste ponto o uso normal. Formate o volume e monte-o. Dominando Linux - Usando RAID e LVM2

95

Usando os volumes aps reiniciar a mquina


Quando reiniciamos a mquina,a associao entre a partio e o Device Mapper perdida. desta forma preciso luksOpen para recri-la. Se usou Loop Devices, lembre-se de usar losetup para associar o arquivo de loop ao arquivo repositrio. # cryptsetup luksOpen /dev/sde1 protegido # losetup /dev/loop0 disco0 # cryptsetup luksOpen /dev/loop0 confidencial --key-file=./minhasenha Em Gentoo, podemos automatizar o processo. Insira as linhas abaixo em /etc/conf.d/dmcrypt para montar os volumes protegido e confidencial. target=protegido source='/dev/sde1' target=confidencial source='/dev/loop0' loop_file='/root/disco0' key='/root/minhasenha' E estas no /etc/fstabb. /dev/mapper/protegido /mnt/protegido /dev/mapper/confidencial /mnt/confidencial ext3 ext3 defaults defaults 00 00

Ateno, como o volume protegido no usa um arquivo de senha, a inicializao da mquina ser interrompida at uma senha ser fornecida pelo teclado.

Dominando Linux - Usando RAID e LVM2