LVM é um recurso interessante que permite a alocação dinâmica de suas partições e sendo assim você pode movê-las, redimensioná-las etc sem muito esforço. Não vou encher a Internet com mais um texto explicando o conceito por trás do LVM pois isso já existe aos milhões por ai. Se você precisa saber o que é LVM, como e porque usar, então está lendo o texto errado, pergunte ao oráculo que ele poderá te indicar bons textos sobre o assunto.
Mas voltando a questão, você já precisou realmente redimensionar um volume no LVM? Eu, sim!
Tá bom, confesso que não foi num ambiente de produção – usei uma máquina de testes – mas a frustração ao fazer o trabalho pelo caminho mais óbvio e ver que não funcionou, foi tão grande que ao conseguir fazê-lo, eu rapidamente criei um pequeno script que permite fazer isso de forma simplificada.
Como redimensionar o volume
O redimensionamento (redução) de um volume LVM consiste em:
- Desmontar o volume
- Redimensionar o sistema de arquivos
- Desativar o volume lógico
- Redimensionar o volume lógico
- Reativar o volume lógico
- Montar o volume
O redimensionamento (extensão) de um volume LVM consiste em:
- Desmontar o volume
- Desativar o volume lógico
- Redimensionar o volume lógico
- Reativar o volume lógico
- Redimensionar o sistema de arquivos
- Montar o volume
O que muda entre diminuir ou aumentar um volume lógico é o momento em que você vai redimensionar o sistema de arquivos. É aqui que ocorre o problema, se você esquecer de redimensiona-lo você terá perda de dados.
Como o script funciona
O shell script que eu fiz foi bem simples e além dos comandos para fazer o citado acima possui alguns “if”, “echo” e nada mais.
Os comandos usados e que realmente fazem a “mágica” acontecer são:
- mount/umont – Monta/desmonta o sistema de arquivos
- resize_reiserfs – Redimensiona o sistema de arquivos ReiserFS
- lvchange – Ativa/desativa o volume
- lvextend – Estende o volume
- lvreduce – Reduz o volume
Não vou entrar em detalhes sobre cada comando pois as páginas de manual existem para isso e quanto ao script posso dizer que ele apenas chama estes comandos na hora oportuna e nada mais.
Como usar o script
- Baixe o arquivo “.tgz”
- Descompacte o pacote .tgz dentro do seu diretório /usr/bin
- Use os novos comandos a partir do terminal, como root:
# lvm_easy_reduce GRUPO VOLUME TAMANHO PONTO_MONTAGEM
ou
# lvm_easy_extend GRUPO VOLUME TAMANHO PONTO_MONTAGEMOnde:
GRUPO é o nome do grupo de volumes onde está o volume a ser redimensionado
VOLUME é o volume lógico a ser redimensionado
TAMANHO é o novo tomanho do volume (seguido da unidade. ex: 10G, 512M)
PONTO_MONTAGEM é o diretório usado como ponto de montagem para este volume (Se não for informado o volume não será remontado ao final do processo).
Ex:
# lvm_easy_reduce VG_MAILSYSTEM LVUSERS_A 30G /home/a
Isso vai reduzir o tamanho do volume lógico LVUSERS_A, dentro do grupo de volumes VG_MAILSYSTEM para 30G e remontá-lo em /home/a
Nem tudo são flores
Antes de baixar o script e começar a alterar seus volumes é bom saber de algumas considerações.
- Alterar partições são sempre um caso crítico, então verifique se o seu backup está feito e funcionando, pois se der problemas você poderá precisar dele – Apesar de eu ter redimensionado o sistema inúmeras vezes para testar, a gente nunca sabe quando o pior vai acontecer.
- Passe os parâmetros corretamente. O script apenas critica os parâmetros nos seguintes casos:
- a quantidade de parâmetros (O único parâmetro opcional é o ponto de montagem, que não sendo informado apenas não montará o volume no final do redimensionamento – ação que poderá ser feita manualmente)
- a impossibilidade de desmontar o volume antes do redimensionamento
- a inexistência do grupo e/ou volume lógico.
- Caso você passe o tamanho errado poderá ter problemas então esteja atento a esta informação.
- Ainda quanto ao tamanho lembre-se de indicar a unidade. Ex: 20G, 512M etc.
- Cuidado com o nome do script. O script chama-se lvm_easy_resize.sh, mas se ele for executado diretamente, mesmo com os parâmetros corretos ele não fará nada. Use sempre os ‘symlinks’ chamados lvm_easy_reduce e lvm_easy_extend.
O arquivo para download
Faça o download do script lvm_easy_resize e leia acima como instalar depois é só usar 😉
E se tudo mais falhar, o que eu faço?
Como eu já disse, o script funcionou na boa no meu sistema de testes com um grupo de volumes de 500GB contendo 3 volumes lógicos (formatados com ReiserFS) em dois volumes físicos.
Se você os seus volumes são formatados como ext2/ext3 você deverá editar o script e alterar o o comando resize_reiserfs pelo resize2fs que possui a sintaxe um pouco diferente, mas não é difícil de ser feito.
Se você já fez bobagem e perdeu tudo você deve tentar usar reiserfsck. Enquanto estava fazendo os testes para criar o script eu perdi os dados que estavam no volume e o reiserfsck conseguiu resolver o problema recuperando completamente o sistema de arquivos.
Mt bom o artigo, parabéns!