Trabalhando com LVM no Linux
Hugo Cisneiros, hugo_arroba_devin_ponto_com_ponto_br 1. IntroduçãoLVM significa Logical Volume Manager. Como o nome diz, essa ferramenta é capaz de gerenciar os chamados volumes lógicos, substituindo assim as tradicionais partições nos discos. Ao longo do tempo, várias empresas fizeram suas implementações de LVM e o Linux não ficou para trás: ele também possui uma implementação (e muito boa) de LVM, que na época da escrita deste documento está na versão 2. Utilizar volumes lógicos ao invés do esquema de particionamento comum traz algumas boas vantagens. Mas antes de saber destas vantagens, precisamos saber o que são esses tais volumes lógicos. Um volume lógico é nada mais nada menos que uma representação virtuais de pedaços de um dispositivo fixo. Enquanto as partições definem estes pedaços "cruamente", o volume lógico permite flexibilidade na hora de definir quem são esses pedaços. Por exemplo, um volume lógico pode ter seu espaço dividido em 3 ou mais HDs, mas para o sistema operacional vai parecer como se fosse apenas um dispositivo. Sendo assim começa a ficar clara as vantagens, não? 2. Vantagens e talvez desvantagensVamos supor que eu tenha comprado um HD de 60GB. Quando eu instalei o meu Linux, particionei ele da seguinte forma:
Deixei 49GB para os arquivos de meu usuário (/home). Mas suponha que eu enchi esta partição com filmes pirateados. Em um cenário normal, eu teria que reformatar e refazer as partições para colocar mais espaço no /home, ou comprar um novo HD maior e refazer tudo, depois copiando os dados. Isso não seria legal, né? Com o LVM, é possível você fazer isso de forma totalmente transparente para o sistema operacional: isso quer dizer que você pode redimensionar estas partições, ou pode adicionar um espaço de um novo HD em um volume lógico já criado. Outra vantagem é a criação dos chamados LVM Snapshots, que falarei mais à frente neste artigo. Basicamente um snapshot é uma "parada no tempo" que você faz no volume lógico. Quando você o faz, o LVM faz uma cópia exata do volume lógico, congelado na hora que você pediu. Com isso você pode usar o volume lógico para testes, backups e outros fins, sem modificar o original, que continuará trabalhando normalmente. O LVM acaba por também executar alguns conceitos de RAID. Ao você indicar, por exemplo, 2 HDs para funcionar como apenas um volume lógico, o LVM caso esteja trabalhando de uma certa forma, estará dividindo os dados entre os HDs, aumentando a velocidade. Esse é o conceito do RAID0. Talvez duas das únicas desvantagens que poderíamos levantar sobre o LVM seriam a dificuldade que as pessoas tem em se adaptar à este novo modelo (sempre a resistência a mudanças) e uma forma de pensar em como montar o LVM sem comprometer a segurança dos dados caso um HD falhe. Por exemplo, se um volume lógico conter 3 HDs, e um deles falhar, pode ser que este volume lógico fique corrompido. Para situações mais complexas como esta, geralmente se usa um conjunto de técnicas de RAID e LVM. Tanto para servidores de grande porte, com muito espaço e uso de disco, quanto para as nossas máquinas caseiras do dia-a-dia, o LVM é uma ferramenta bastante útil. É por isso que conhecer a ferramenta é importante e é por isto que estamos aqui ;) DICA: Se você quer brincar com fogo e não se queimar (leia-se: se você quer ficar mexendo com LVM sem precisar estragar todos os seus HDs), há um tutorial na Página do Eitch chamado Partições em Arquivos que pode ser muito útil para você. Recomendo a leitura se você não quiser se arriscar muito. É fácil e rápido e depois é só substituir os HDs aqui pelos arquivos. 3. InstalandoAtualmente todas as versões mais atuais do kernel 2.6 já vêm com o LVM e suas ferramentas inclusas. A maioria das distribuições de Linux também incluem os pacotes necessários para o funcionamento do mesmo. Ou seja, na grande maioria dos casos, seu sistema deverá estar pronto para utilizar o LVM. Por este motivo não vou me extender sobre isso. Neste artigo trabalhamos apenas com o LVM2. Caso seu sistema for muito antigo e não possuir estas funcionalidades, você terá que obter o código-fonte do LVM, compilá-lo junto ao seu kernel e fazer todo o trabalho adicional. Basicamente você precisará compilar e instalar o device-mapper e o lvm2. Acesse os seguintes endereços para fazê-lo: As próprias páginas têm respectivas instruções de construção. 4. Colocando o LVM em açãoPara começar a usar o LVM, você precisará escolher quais dispositivos (partições) deseja usar com o LVM. Então o primeiro passo é preparar os dispositivos físicos através do utilitário fdisk. Neste documento iremos usar 3 HDs: /dev/sdb, /dev/sdc, /dev/sdd, cada um com 2GB de espaço cada. Para criar as partições prontas para trabalhar com o LVM, utilize o fdisk e crie partições do tipo 8e (Linux LVM). Veja o exemplo abaixo da criação da primeira partição em /dev/sdb:
No bloco acima eu executei o fdisk no HD /dev/sdb e criei uma partição utilizando todos os cilindros (tamanho máximo - 2GB), e configurando o tipo de partição para 8e, gerando então uma partição Linux LVM. Eu repeti o mesmo processo no HD /dev/sdc, enquanto que no /dev/sdd eu criei uma partição de aproximadamente 800MB. Agora que preparamos as partições para serem usadas pelo LVM, está na hora de colocá-las em ação! As ferramentas do LVM podem ser usadas de duas maneiras: através de um prompt geral do lvm ou através de comandos na shell do sistema. Aqui neste documento estarei utilizando o prompt geral, que pode ser executado através do comando:
Com este comando você cairá em um prompt "lvm>". Dentro deste prompt você pode utilizar o comando help e todos os outros comandos que o LVM possui. 4.1. LVM e os dispositivos físicosVamos começar adicionando ao LVM as três partições que criamos anteriormente com o fdisk. Para adicionar dispositivos físicos no LVM, utilizamos o comando pvcreate, por exemplo:
Agora as três partições estão disponíveis para alocarmos como quisermos no LVM. Caso você queira listar todos os dispositivos físicos atualmente registrados no LVM, utilize os comandos pvs e/ou pvdisplay. Você também pode remover um dispositivo do LVM com o comando pvremove se quiser. Vamos ver como os nossos dispositivos físicos ficaram:
4.2. Grupos de VolumesUma vez em que os dispositivos físicos já estejam preparados para serem utilizados no LVM, está na hora de começar a criar grupos de volumes. Um grupo de volume nada mais é que a especificação de qual fatia do dispositivo físico será utilizada nos volumes lógicos. No nosso exemplo aqui, temos 3 dispositivos físicos, certo? Supomos que eu queira criar dois grupos de volumes: O primeiro e o segundo dispositivos físicos serão o Grupo 1 e o terceiro dispositivo será o Grupo 2. Quando eu for criar os volumes lógicos no Grupo 1, os dados estarão nos HDs 1 e 2, enquanto que os volumes do Grupo 2 estarão no HD 3. Desta forma você pode escolher e planejar quais partições vão ficar em quais HDs. Indo para a prática, vamos fazer o que eu disse acima. O comando para criar um grupo de volume é o vgcreate:
Agora vamos verificar o que foi feito através do comando vgdisplay:
Veja que acima, podemos ver que os dois grupos foram criados exatamente da forma que a gente queria: O Grupo 01 tem um tamanho de 4GB (ou 1022 Physical Extends), ou seja, os dois HDs de 2GB juntos. O Grupo 02 tem um tamanho de 784MB (ou 196 Physical Extends), o que corresponde ao terceiro HD. Mas antes de prosseguir, que tal se perguntar o que é esse tal de Physical Extend (PE)? Pense no PE como um tijolo da construção de uma casa. Este tijolo tem um tamanho fixo (que no nosso caso é 4MB) e para construir toda a casa, são necessários uma quantidade de tijolos que iguale o tamanho total da casa, que é 4GB. Para chegar nesse espaço, precisa-se de 1022 tijolos, pois 1022 x 4MB = ~2GB. Em um grupo de volume, o tamanho do PE é sempre igual para todos os PEs dentro do grupo, então seu tamanho precisa ser um múltiplo desse tamanho. Um PE é uma parte do HD que quando alocado em um grupo de volume, fica disponível para mapear em um volume lógico. Desta forma, um volume lógico pode conter vários PEs de diversos dispositivos físicos diferentes alocados em LEs (Logical Extends) de um único volume lógico. Essa distribuição é que dá flexibilidade ao LVM e permite ele fazer as técnicas de RAID. Isso poderá ficar mais claro quando começarmos a criar os volumes lógicos. No comando vgdisplay mostrado acima, você pode observar três linhas que contém definições do Physical Extend (PE): Total PE,Alloc PE / Size e Free PE / Size. O Total PE diz quantos PEs foram alocados no total para o grupo de volume: este é o total que poderá ser utilizados nos volumes lógicos que você irá criar. O Alloc PE / Size é a quantidade (e tamanho) de PEs que já estão alocados em volumes lógicos: como não criamos nenhum ainda, nenhum está alocado no exemplo acima. Já o FreePE / Size contém a quantidade (e tamanho) de PEs livres para criar volumes lógicos: como não criamos nenhum ainda, todos os PEs estão livres no exemplo acima. Uma última nota sobre os PEs: o tamanho padrão de um PE ao criar um grupo de volume é de 4MB. Este número, caso você queira, pode ser alterado em uma faixa que vai de 8K a 16GB. Na hora de criar um Grupo de Volume, utilize o parâmetro -s para especificar o tamanho do PE. Por exemplo: vgcreate -s 64M Grupo03 /dev/sde1 - Isso irá criar o Group03 com o tamanho dos PEs sendo 64MB. Quanto maior o tamanho, melhor o desempenho e pior a flexibilidade do LVM (pois os tamanhos dos volumes lógicos têm de ser todos múltiplos do tamanho do PE e isso pode acarretar em desperdício de espaço). Neste exemplo continuaremos utilizando o tamanho de 4MB. 4.3. Volumes LógicosPreparados os Grupos de Volume, vamos agora criar os famosos volumes lógicos de que falamos tanto. Para ficar mais fácil o entendimento, considere o volume lógico como o equivalente a uma partição comum, pois é assim que o sistema irá ver este volume lógico: você poderá montar, desmontar, formatar, entre outros. Como expliquei anteriormente, criar um volume lógico significa mapear os Physical Extends em Logical Extends, distribuindo assim o acesso entre os HDs do Grupo de Volume e criando um volume lógico "virtual". Neste exemplo iremos criar 3 volumes lógicos em 2 grupos de volume. No Grupo01 iremos criar um volume chamado Grupo01-raiz, ao qual montaremos na raiz, e outro volume chamado Grupo01-home, ao qual montaremos no diretório /home. No Grupo02 iremos criar apenas um volume, chamado Grupo02-log, que montará em /var/log. Para criar os volumes lógicos, o comando lvcreate é utilizado (já reparou como os nomes dos comandos são intuitivos? :). Os seguintes parâmetros podem (e devem ser usados) na hora de criar um volume lógico simples:
Há outras opções úteis como a -i (striping) e -m (mirroring), mas por enquanto não falaremos sobre isso se não as coisas complicam mais. Chega de conversa! Vamos criar os volumes lógicos agora mesmo:
Vejamos o que eu fiz:
Agora vamos usar o comando lvdisplay para obter detalhes de nossos recém-criados volumes lógicos:
Prontinho, analizando a saída acima, dá pra ver que criamos com sucesso nossos 3 volumes lógicos e agora eles estão prontos para serem usados transparentemente pelo sistema. A única coisa que você precisa saber agora é que, no sistema, ao invés de você utilizar os dispositivos físicos (/dev/sdb1, /dev/sdc1, etc) você utilizará o que está escrito no campo LV Name, ou seja, /dev/Grupo01/Grupo01-raiz, /dev/Grupo01/Grupo01-home e /dev/Grupo02/Grupo02-log. Que tal uns exemplos? 5. Utilizando os volumes lógicos no sistemaOk, acabei de criar os volumes lógicos, o que eu posso fazer com eles agora? Vamos pegar como exemplo o volume lógico /dev/Grupo02/Grupo02-log. Antes de montá-lo no lugar correto, você precisa formatar esta "partição". Faça isso com o comando mkfs.ext3 (caso o sistema de arquivos que você queira seja o ext3 claro):
Aguarde um pouco e pronto! Agora monte o volume no diretório correto:
Se quiser também pode até adicionar uma linha no /etc/fstab para montar automaticamente na inicialização!
E sim, você pode fazer estes e quaisquer outros comandos que aceitem dispositivos de bloco (p.ex.: partições). Para você isso é transparente, o LVM cuida de todo o resto. 6. Outras operações possíveis e úteis do LVMAlém de simplesmente criar os volumes lógicos com o LVM, você também pode fazer inúmeras outras operações que são bastante úteis (e essenciais). Uma delas já falamos aqui: redimensionar os volumes lógicos; outras incluem mover volumes, criar snapshots, adicionar novos dispositivos, entre outros. Que tal falarmos um pouco de cada? 6.1. Redimensionando volumes lógicosSuponha que realmente o meu espaço do /home encheu de filmes pirateados. Eu, com preguiça de ficar gravando CDs e DVDs, resolvi comprar um novo HD e queria adicionar esse espaço novo no /home sem ter que refazer todo o particionamento. Se o meu /home estiver em um esquema LVM como o criado através deste documento, eu posso fazer isso sem muita dor de cabeça! Instalei o novo HD e sei que ele é atualmente o /dev/sde. Agora começo do começo: crio uma nova partição dentro deste HD com o fdisk, coloco esta partição como tipo 8e (Linux LVM), salvo. Depois executo o LVM, adiciono o /dev/sde1 ao LVM com o comando pvcreate e depois utilizo o comando vgextend para adicionar esta nova partição ao meu grupo de volume. Como quero aumentar o /home, os seguintes passos do LVM fazem o que queremos:
Quando eu extendi o grupo de volume Grupo01, eu adicionei o espaço que tinha no /dev/sde1 e o LVM tornou disponível os PEs para serem utilizados. Neste exemplo, o /dev/sde1 tem 488MB, então como você pode ver depois no comando vgdisplay Grupo01, o grupo foi modificado, agora há 122 novos PEs, o que corresponde a 488MB. Agora você pode utilizar esses PEs como quiser nos volumes lógicos. Como queremos aumentar o /home, utilizamos o comando lvresize para redimensionar o volume lógico. Vamos lá:
Simples não? No lvresize, podemos utilizar tanto o -L (por tamanho) quanto o -l (por PE). O sinal de + (ou -) antes do número indica se você quer aumentar ou diminuir a quantidade de PE (ou tamanho). Vamos ver como ficou o nosso volume lógico com o lvdisplay:
Sim... Agora ele ao invés de ter 3GB, tem 3.47GB e está utilizando um outro HD :) ATENÇÃO: O processo não acabou por aí. Lembre-se que todo este processo feito no LVM é físico. Dentro deste dispositivo fixo há um sistema de arquivos que também tem que ser tratado. Neste exemplo acima, você terá que fazer o comando "ext2online /dev/Grupo01/grupo01-home" antes de poder utilizar este sistema de arquivos. Lembre-se também que este procedimento deve ser feito enquanto o sistema de arquivos estiver desmontado. Evite corromper seu sistema de arquivos e perder todos os seus dados! Lembrando também que o comando do sistema de arquivos varia, no nosso caso estamos sempre utilizando o ext3. Para ajudar, lembre-se sempre destes dois passo-a-passos: Aumentando o tamanho de uma partição LVM:
Diminuindo o tamanho de uma partição LVM:
Lembre-se sempre de alterar a ordem! Já vi muita gente corrompendo sistemas de arquivos ao diminuir os seus tamanhos de forma errada. 6.2. Migrando dispositivos fixosSe por acaso se você acha que um de seus HDs está falhando, você pode mover os PEs de um dispositivo fixo para outro através do comando pvmove. Você pode utilizar essa "movimentação" para criar novos grupos de volume caso você não tenha PEs livres ou nenhum HD novo. Seu funcionamento é bem simples:
No nosso exemplo, vamos supor que o HD /dev/sdc esteja falhando e precisamos trocá-lo. Podemos colocar um novo HD (/dev/sdf), adicioná-lo ao LVM com o pvcreate, adicioná-lo a grupo do /dev/sdc (Grupo01) e migrar todos os PEs com o comando:
Depois basta apenas remover o /dev/sdc1 do Volume e LVM. Outra maneira de fazer isso é não espeficicando o destino:
Neste caso o LVM vai mover todos os PEs que estavam no /dev/sdc1 para qualquer PE livre dentro do volume Grupo01 (lembre-se de que os PEs tem de estar livres). Depois é só remover o /dev/hdc1 do LVM, substituir por um HD novo e integrá-lo ao Grupo novamente. 6.3. Exportando e importando volumes entre sistemasCaso alguma vez você precise mover todo um grupo de volume LVM para outra máquina (por exemplo, se você quer trocar o home de uma máquina para outra), você pode utilizar os comandos vgexport e vgimport para exportar e importar esses grupos de volumes. Vamos, neste exemplo, mover o Grupo02 de uma máquina para outra. Primeiro tenha certeza de que o sistema não esteja utilizando os volumes. Você pode fazer isso desmontando os diretórios que pertencem ao volume. No nosso caso, o diretório /var/log é utilizado pelo Grupo02, então faço:
(Ou umount em todos os dispositivos do grupo - /dev/Grupo02/Grupo02-log) Agora que o disco não está sendo mais usado pelo sistema, basta entrar no LVM, marcar o volume como inativo e exportá-lo:
Em seguinda você pode desligar a máquina, tirar o HD e colocar na sua outra máquina. Agora na outra máquina, com o HD já colocado e logo depois da inicialização do sistema, basta entrar no LVM, pedir para fazer um "scan" nos dispositivos LVM, importar e ativar:
Depois basta apenas montar e/ou configurar no /etc/fstab para utilizar este novo volume no sistema. 7. LVM Snapshots - Uma solução de backupCriar snapshots é uma funcionalidade bastante útil e utilizada do LVM. Um "snapshot" é uma imagem do volume lógico, virtual, onde o LVM pára o tempo do volume, deixando-o intacto para trabalhar enquanto o volume lógico "real" continua trabalhando e sendo modificado. Em outras palavras, quando se faz um LVM Snapshot, o LVM duplica o volume lógico e "congela" a duplicata. Isto é útil para vários motivos:
Neste documento vou ilustrar os snapshots com o seu uso mais comum: backups. Aqui irei criar um snapshot da partição dos logs (Grupo02), que são atualizados constantemente, para então fazer um backup em fita, em outro HD, ou em CD/DVD. Antes de começar, vamos entender como um snapshot funciona. Quando você pede para o LVM criar um snapshot, você vai especificar um certo tamanho para este snapshot e neste caso, você precisa se certificar de que existam PEs livres para este tamanho. Então supondo que criamos um snapshot de 24MB do volume lógico Grupo02-log, o que significa? O LVM irá criar uma duplicata do Grupo02-log, com o conteúdo exato do Grupo02-log na hora da criação e sem mudanças posteriores. O espaço de 24MB necessários para o snapshot será utilizado para as posteriores gravações. Então enquanto você analiza e faz backup da duplicata, o LVM vai continuando a escrever as mudanças dos arquivos neste espaço de 24MB, que serve como um buffer. Se as mudanças acumularem e se tornarem maiores que 24MB, o snapshot se torna inválido. Sabendo disso, antes de você planejar uma estratégia de backup com LVM Snapshots, você precisa estudar a quantidade de dados e mudanças de dados que a sua máquina tem. Se você acha que em um banco de dados, o processo de backup demora menos que o tempo das mudanças encherem, vamos dizer, 500MB, então reserve 500MB de PEs livres no Grupo de Volume para criar os snapshots. Caso ache que o backup demora mais que isso, aumente o tamanho do snapshot. Então com isso já sabemos que no nosso cenário atual de exemplos, é impossível criar LVM snapshots. Por que? Se você der uma olhada em nossos exemplos, verá que nenhum Grupo de Volume terá PEs livres, pois utilizamos todas as PEs em todos os grupos. Pare remediar isso, eu redimensionei (ah, como eu gosto do LVM) o volume lógico Grupo02-log para 684MB ao invés de 784MB, deixando assim 100MB livres para criar um snapshot. O resultado ficará assim:
Como deu parar reparar, agora o Grupo02 tem 25 PEs livres, ou seja, 100MB. Utilizando agora esta situação, vamos criar um snapshot do Grupo02-log utilizando estes PEs livres. O próprio comando lvcreate faz isso, mas agora com a opção -s:
Pronto, um snapshot foi criado, agora basta apenas montá-lo como qualquer outro volume e utilizar a sua rotina de backup:
Depois de feito a rotina de backup com o conteúdo do /mnt/Grupo02-log-backup, desmonte o volume:
E logo em seguida entre no LVM e remove o snapshot:
Pronto, backup concluído! O snapshot foi removido e os 100MB de PEs livres estão disponíveis novamente. 8. ConclusõesApesar do LVM não ser reconhecido por 100% das ferramentas em todos os sistemas operacionais, se você utiliza apenas o Linux na máquina, é extremamente recomendável utilizar o LVM por ser tão útil e flexível. Uma grande gama de instaladores das distribuições atuais já vem com ferramentas que preparam o sistema já com o LVM, o que é bastante útil e salva um bom tempo para nós administradores: mas nunca é ruim saber mais detalhes sobre os assuntos né? Bom proveito! |