Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
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
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.
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
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.
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)
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
12
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].
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>
15
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
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
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
19
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
23
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
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
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
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
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
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
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
37
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
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
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
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
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
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
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.
53
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).
55
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
57
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
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.
60
61
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
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
64
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
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
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
67
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
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
70
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
73
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
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
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
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
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
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.
82
83
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
85
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)
86 Para executar a montagem manualmente, use a sintaxe equivalente abaixo. # mount -t ext3 -o loop=/dev/loop0 /root/disco0 /mnt/puplico
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.
89
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.
91
92 UUID: 573eab94-882d-4b6a-967a-a219f82393c8
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
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.
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.
95
Ateno, como o volume protegido no usa um arquivo de senha, a inicializao da mquina ser interrompida at uma senha ser fornecida pelo teclado.