- O LVM permite abstrair o armazenamento físico em PV, VG e LV, oferecendo gerenciamento de espaço flexível e dinâmico em Linux.
- Com comandos Comandos como pvcreate, vgcreate, lvcreate, lvextend ou pvmove podem criar, estender e migrar volumes dinamicamente.
- Instantâneos, espelhamento e migrações entre arrays de armazenamento fazem do LVM uma ferramenta essencial para alta disponibilidade e manutenção sem tempo de inatividade.
- Compreender os erros típicos do LVM e os arquivos de configuração é essencial para a resolução de problemas em ambientes de produção.
Trabalhar com armazenamento no Linux sem a complicação do particionamento tradicional é possível graças ao LVM (Logical Volume Manager) . Este sistema adiciona uma camada de abstração sobre os discos físicos, permitindo redimensionar, mover e proteger dados com uma flexibilidade que, em ambientes profissionais, faz toda a diferença entre ter que desligar um servidor e poder fazer tudo em tempo real.
Se você gerencia sistemas ou está se preparando para certificações como LPIC, RHCSA ou similares, um sólido conhecimento de LVM deixou de ser opcional. Ao longo deste tutorial, exploraremos o que é LVM, sua estrutura, como criar e gerenciar PVs, VGs e LVs , e nos aprofundaremos em operações práticas como escalonamento vertical (scale-ups), escalonamento horizontal (scale-downs), espelhamento (espelhamento), snapshots, migrações de armazenamento, uso de LUNs estendidos e solução de problemas comuns em produção.
O que é LVM e por que ele é usado no Linux?
Quando falamos de LVM, estamos nos referindo a um sistema que permite gerenciar o armazenamento logicamente, em vez de depender diretamente de partições fixas . Em vez de ter um /dev/sdb1 de 50 GB e um /dev/sdc1 de 100 GB usados separadamente, o LVM permite agrupá-los em um único espaço, combinando suas capacidades para formar o que é conhecido como um Grupo de Volumes (VG) de 150 GB.
Além desse VG, podemos definir vários volumes lógicos (LVs), por exemplo, um de 20 GB para /opt, outro de 100 GB para /var e outro de 30 GB para backups. Essa camada de abstração torna possível redistribuir o espaço com muito mais facilidade do que com o particionamento tradicional , onde, uma vez criado o tamanho da partição, alterá-lo é complicado ou simplesmente impossível enquanto a partição está em execução.
Uma das grandes vantagens do LVM é a possibilidade de criar snapshots de um volume lógico para pontos de restauração rápidos, expandir sistemas de arquivos dinamicamente adicionando novos discos ao VG ou mover dados de um disco para outro dentro do mesmo grupo sem interromper os serviços. Em ambientes com arrays de discos, SANs ou armazenamento compartilhado, essa capacidade de migrar dados entre discos ou arrays sem tempo de inatividade é inestimável.
Na prática, isso se traduz na capacidade de mover um banco de dados de um array de armazenamento saturado para um mais rápido sem que os usuários percebam nada além de uma carga extra de E/S, ou na capacidade de expandir o sistema de arquivos de um aplicativo porque ele ficou insuficiente, sem reiniciar o servidor ou mexer manualmente nos serviços.
Estrutura básica do ventrículo esquerdo: veias pulmonares, granulócitos e ventrículo esquerdo.

Para entender completamente o LVM, é essencial compreender seus principais componentes, que formam uma hierarquia desde o nível físico até o lógico. A chave é que cada nível depende do anterior para fornecer flexibilidade sem exigir que o sistema de arquivos conheça todos os detalhes do hardware.
Na base de tudo estão os Volumes Físicos (PV) , que são simplesmente discos físicos, partições (por exemplo, /dev/sdb1, /dev/sdc1), LUNs de arrays de armazenamento ou até mesmo dispositivos RAID de software como /dev/md0. Cada PV é dividido internamente em unidades fixas chamadas Extensões Físicas (PE) , que serão os blocos de construção dos volumes lógicos.
Acima dos volumes físicos (PVs), temos os Grupos de Volumes (VGs) , que agrupam um ou mais volumes físicos para formar um pool de armazenamento. O tamanho de um VG será a soma da capacidade de todos os PVs que o compõem, menos o espaço já alocado aos volumes lógicos. Na prática, o VG é o "contêiner" do qual extrairemos espaço para criar volumes lógicos personalizados.
Na base da hierarquia estão os Volumes Lógicos (LVs) , que são os volumes que o sistema trata quase como partições comuns. É em um LV que criamos o sistema de arquivos (ext4, xfs, etc.) e o montamos em /, /var, /home ou onde for necessário. Internamente, cada LV é composto por Extensões Lógicas (LEs) , que são mapeadas 1:1 para os PEs do VG, mas podem estar distribuídas por vários discos físicos não contíguos.
O kernel usa o mapeador de dispositivos para traduzir esses dispositivos lógicos (por exemplo, /dev/mapper/vg00-rootvol) para seus blocos físicos correspondentes. Os nomes amigáveis do LVM são frequentemente links simbólicos para dispositivos como /dev/dm-0, /dev/dm-1, etc., permitindo enorme flexibilidade na combinação de discos, RAID, criptografia e LVM sem que as camadas superiores percebam isso.
Em um sistema real, a execução de comandos como `vgs`, `pvs` e `lvs` exibirá uma lista dos grupos de volumes existentes, volumes físicos e volumes lógicos, seu tamanho total e espaço livre, bem como atributos de ativação, status, UUID e muito mais. O uso de `vgdisplay -v` fornece ainda mais detalhes: número de LVs, tamanho dos PEs, número de PEs livres, lista de PVs no grupo e assim por diante.
Visualize a estrutura LVM existente no sistema.

Antes de fazer qualquer alteração, é essencial saber qual estrutura LVM temos atualmente no sistema . Isso é feito principalmente usando três comandos de resumo: pvs, vgs e lvs. Cada um deles mostra uma visão diferente e complementar da mesma realidade.
Para ver quais discos ou partições pertencem a cada grupo, usamos o comando `pvs` . Este comando exibirá os caminhos dos dispositivos (por exemplo, `/dev/sda2`, `/dev/sdb1`, `/dev/sdc1`), o VG ao qual pertencem, o tamanho do PV e quanto espaço não alocado ainda está disponível em cada um. Isso é muito útil para verificar se um novo disco foi adicionado corretamente a um VG.
O comando `vgs` fornece uma lista de todos os grupos de volumes, indicando quantos PVs, LVs e snapshots (SNs) cada grupo contém, bem como o tamanho total do grupo e o espaço livre disponível. Isso nos permite identificar rapidamente quais grupos estão cheios e onde temos espaço para expansão.
Por fim, o comando `lvs` exibe uma lista de volumes lógicos, incluindo informações como tamanho, o grupo de volumes (VG) ao qual pertencem, atributos (por exemplo, espelhamento, snapshots, thin, etc.), porcentagem de uso de snapshots e outros dados importantes. Em servidores com muitos volumes lógicos, esse comando torna-se quase essencial para o gerenciamento dos diversos sistemas de arquivos.
Se quisermos um relatório ainda mais detalhado de um grupo específico, podemos executar `vgdisplay -v VGName` . Este comando exibirá a configuração do VG, todos os seus LVs com informações adicionais e, finalmente, os detalhes de cada PV que o compõe. É especialmente útil para tarefas de diagnóstico ou auditoria de armazenamento.
Por outro lado, se inspecionarmos os sistemas de arquivos montados com `mount` ou `df -h` , veremos que os pontos de montagem apontam para caminhos em `/dev/mapper/VG-LV` . Por exemplo, `/dev/mapper/vg00-rootvol` está montado em `/`, `/dev/mapper/vg00-varvol` em `/var`, e assim por diante. Isso confirma que os sistemas de arquivos são de fato suportados em volumes lógicos LVM.
Criando uma estrutura LVM do zero
Para configurar uma nova estrutura LVM, começamos com um ou mais discos (ou partições) livres. O fluxo de trabalho típico envolve a criação de um PV, depois um VG e, finalmente, um ou mais LVs nos quais formataremos os sistemas de arquivos.
Inicializar um Volume Físico (PV)
O primeiro passo é marcar um disco ou partição como um volume físico para o LVM usando o comando `pvcreate` . Isso inicializa os metadados necessários para o LVM gerenciá-lo. Por exemplo, se quisermos usar `/dev/sdb` como um volume físico, executaríamos o seguinte comando:
pvcreate /dev/sdb
Após esta etapa, o dispositivo pode ser integrado a um grupo de volumes . Em algumas distribuições, como o Red Hat, quando um grupo de volumes é criado do zero, o instalador executa o comando `pvcreate` automaticamente, mas conhecer esse comando é essencial para expansões e configurações manuais.
Criar um Grupo de Volumes (VG)
Com os PVs prontos, definimos o grupo de volumes usando o comando `vgcreate` . Este comando recebe o nome do VG e a lista de dispositivos físicos que o comporão. Por exemplo, para criar um VG chamado `vgMySQL` com dois discos:
vgcreate vgMySQL /dev/sdb /dev/sdc
A partir desse ponto, o vgMySQL será um pool de armazenamento no qual podemos criar um ou mais volumes lógicos para diferentes usos (dados, logs , backups, etc.). Podemos verificar o resultado com o comando `vgdisplay vgMySQL` ou com o comando de resumo `vgs`.
Defina Volumes Lógicos (LV)
Após a criação do grupo de volumes, o próximo passo é reservar espaço dentro desse grupo para cada LV . Fazemos isso com o comando `lvcreate`, especificando o nome, o tamanho e o VG. Um exemplo simples seria:
lvcreate -n lvMySQL -L 10G vgMySQL
Esse comando criará um volume lógico de 10 GB dentro do vgMySQL, que aparecerá como /dev/vgMySQL/lvMySQL (e também como /dev/mapper/vgMySQL-lvMySQL). A partir daqui, vamos tratá-lo quase como uma partição tradicional na qual criaremos um sistema de arquivos.
Crie o sistema de arquivos no LV
Com o LV criado, tudo o que resta é formatá-lo com o tipo de sistema de arquivos que melhor atenda às nossas necessidades . Por exemplo, se quisermos usar XFS no volume lógico do banco de dados:
mkfs.xfs /dev/vgMySQL/lvMySQL
Em seguida, criaremos o ponto de montagem (por exemplo, /Backup_MySQL, /data_mysql, etc.) e adicionaremos a entrada correspondente ao /etc/fstab para que ele seja montado automaticamente na inicialização. A partir daí, os aplicativos verão apenas um sistema de arquivos normal, mesmo que o LVM esteja sendo usado internamente.
Mesclar dois grupos de volumes (vgmerge)
Às vezes, podemos querer mesclar dois VGs em um só para simplificar o gerenciamento ou para realocar facilmente o espaço entre volumes lógicos que antes estavam em grupos separados. O comando `vgmerge` pode ser usado para essa finalidade, combinando o segundo grupo com o primeiro.
Antes de realizar a mesclagem, é importante garantir que não haja nomes de LV duplicados entre os dois grupos e que o tamanho das extensões (PE) seja o mesmo em ambos os VGs; caso contrário, o comando falhará ou exigirá etapas de ajuste prévias.
O procedimento típico inclui desmontar os sistemas de arquivos afetados , desativar o VG a ser integrado e executar o comando `vgmerge`. Por exemplo, para mesclar o `vgPostreSQL` no `vgMySQL`:
vgchange -an vgPostreSQL
vgmerge vgMySQL vgPostreSQL
Após a fusão, todos os LVs que pertenciam ao vgPostreSQL passarão a fazer parte do vgMySQL , e poderemos reativá-los e montá-los normalmente. Esse tipo de operação é útil ao reorganizar o armazenamento do servidor a médio ou longo prazo.
Comandos essenciais para gerenciar o LVM
Além de criar ordens PV, VG e LV, saber como aumentar, diminuir, excluir e mover volumes de ordens sem comprometer os dados é essencial para a administração diária . O LVM oferece uma ampla gama de tipos de ordens que devem ser dominados, tanto em sua forma básica quanto em cenários avançados.
Estendendo um sistema de arquivos no LVM
Uma das tarefas mais frequentes ocorre quando um sistema de arquivos fica sem espaço e precisamos aumentar o tamanho do volume lógico (LV) e do próprio sistema de arquivos . O fluxo de trabalho geral em sistemas de arquivos ext3/ext4 geralmente consiste em usar o lvextend para o volume lógico e, em seguida, uma ferramenta de expansão do sistema de arquivos, como o resize2fs.
Por exemplo, para reduzir um volume para um tamanho total de 512 MB, poderíamos executar o seguinte comando:
lvextend -L 512M /dev/VolGroup00/LogVol02
resize2fs /dev/VolGroup00/LogVol02
Se, por outro lado, quisermos adicionar espaço adicional ao tamanho atual (por exemplo, aumentar em 512 MB o que o LV já possui), usamos a sintaxe com o sinal de mais:
lvextend -L+512M /dev/VolGroup00/LogVol02
Em sistemas XFS, o crescimento do sistema de arquivos é gerenciado usando `xfs_growfs`, que aponta para o ponto de montagem ou dispositivo. É importante conhecer a ferramenta correta para cada tipo de sistema de arquivos, pois eles não se comportam da mesma maneira durante a expansão.
Reduzir o tamanho de um sistema de arquivos e de um LV (level).
A operação inversa, a redução (ou compactação), é mais delicada porque envolve a redução do sistema de arquivos e, em seguida, do volume lógico (LV) . Nem todos os sistemas de arquivos permitem isso: o EXT4 suporta a redução, enquanto o XFS, por exemplo, suporta apenas o aumento (ou expansão), não a redução.
Um fluxo de trabalho típico com ext4 envolve primeiro reduzir o tamanho do sistema de arquivos (geralmente após desmontá-lo e executar o fsck, se necessário) e depois usar o lvreduce para ajustar o tamanho do volume lógico. Muitas distribuições facilitam isso com a opção -r do lvreduce, que coordena ambas as etapas de forma mais segura.
lvreduce -r -L95G /dev/mapper/vgdml-lvdml
O próprio processo realizará verificações de integridade, ajustará o tamanho do sistema de arquivos e, por fim, reduzirá o volume lógico (LV) para o valor especificado. Mesmo assim, é sempre prudente ter um backup ao realizar reduções, pois um erro neste ponto pode ser crítico.
Excluir um volume lógico
Para excluir um volume lógico (LV) que não precisamos mais, devemos garantir que ele não esteja montado nem em uso . Depois que o sistema de arquivos for desmontado, podemos excluir o volume lógico com `lvremove`.
lvremove /dev/VolGroup00/LogVol02
Este comando remove a definição do LV e libera suas extensões dentro do VG , de forma que esse espaço fique disponível para criar outros volumes ou expandir volumes existentes dentro do mesmo grupo.
Criando e gerenciando espelhos com LVM
Se não tivermos um RAID por controlador em nosso hardware, podemos configurar espelhamento no nível do LVM , desde que o VG tenha espaço suficiente e os discos físicos estejam distribuídos corretamente. Versões mais antigas usavam `lvextend` com a opção `-m`, mas versões mais recentes usam `lvconvert`.
Para criar um espelho de um LV existente, especificamos o número de cópias ( m1 significa uma cópia espelhada além do original):
lvconvert -m1 /dev/VolGroup00/LogVol02 /dev/sdae
Durante o processo, o LVM sincroniza ambas as cópias, e podemos observar o progresso com o comando `lvs`, vendo a porcentagem de sincronização ir de 0 a 100. Se em algum momento quisermos retornar ao modo linear (sem espelhamento), podemos usar o comando `lvconvert` com a opção ` -m0` para remover o espelhamento.
Em um exemplo prático típico, um novo VG é criado com dois discos, um LV é definido em modo espelho e formatado. Após copiar dados para o sistema de arquivos (por exemplo, um DVD de instalação ISO grande para testar a integridade), você pode verificar se a sincronização foi concluída e se ambos os discos contêm o mesmo conteúdo.
Outra situação interessante ocorre quando queremos quebrar o espelhamento para remover um disco (por exemplo, para substituí-lo por outro). Primeiro, convertemos o volume virtual (LV) para o modo linear com `lvconvert -m0`, o que libera um dos discos no grupo virtual (VG) . Em seguida, executamos `vgreduce` para ejetar esse volume virtual (PV) do grupo e, finalmente, podemos reciclar ou remover fisicamente o disco. Posteriormente, podemos adicionar uma nova unidade com `vgextend` e recriar o espelhamento com `lvconvert -m1`.
Mover dados entre discos dentro do mesmo VG (pvmove)
Em grandes ambientes corporativos, é comum que alguns arrays de discos fiquem lentos ou saturados com o tempo . O LVM fornece o comando `pvmove` para mover dados de um PV antigo para um novo dentro do mesmo VG sem interromper os serviços, copiando extensões de um disco para outro de forma transparente.
O fluxo de trabalho típico seria primeiro adicionar os novos discos rápidos ao VG usando `vgextend` , para que vejamos os discos antigos e novos em `pvs`. Em seguida, executamos `pvmove` especificando a origem e o destino, por exemplo:
pvmove /dev/sdg1 /dev/sdk1
Durante a execução, o comando `pvmove` exibe a porcentagem concluída. Trata-se de um processo que exige muita E/S e que deve ser agendado fora dos horários de pico, pois ele lê do disco antigo, grava no novo e limpa os dados antigos . Após a conclusão e a verificação de que não restam dados no PV antigo, podemos removê-lo do grupo com o comando `vgreduce` para evitar o uso desse array de armazenamento lento novamente.
Ativar e desativar grupos de volumes (vgchange)
Em configurações de alta disponibilidade, especialmente em clusters, é comum que os VGs (Grupos de Volume) sejam ativados e desativados em diferentes nós, dependendo de onde o serviço está sendo executado. Embora isso geralmente seja gerenciado pelo software do cluster, às vezes precisa ser feito manualmente.
Para marcar um VG como ativo (disponível para montar seus LVs), usamos:
vgchange -a y NombreVG
E para desativá-lo, por exemplo, antes de migrar um volume para outro servidor, utilizam-se os seguintes comandos:
vgchange -a n NombreVG
Em conjunto com o vgscan , que força o sistema a verificar os dispositivos em busca de estruturas LVM, podemos fazer com que outro nó no cluster reconheça e ative os mesmos grupos que foram criados ou modificados no primeiro.
Instantâneos no LVM: criação, restauração e exclusão
Uma das funcionalidades mais poderosas do LVM é a capacidade de criar snapshots de volumes lógicos . Um snapshot captura o estado de um volume lógico em um determinado momento e é armazenado em uma área de armazenamento adicional, onde as alterações subsequentes são registradas. Isso permite reverter as alterações caso uma atualização ou configuração apresente problemas.
O fluxo básico seria: criar um arquivo ou conjunto de dados no sistema de arquivos de origem, gerar o snapshot com o comando `lvcreate` usando a opção `-s` , fazer alterações adicionais e, se algo der errado, desmontar o sistema de arquivos e mesclar o snapshot com o comando `lvconvert --merge` para restaurar o estado anterior.
Por exemplo, para criar um snapshot de 100 MB de /dev/vgtest/lvtest, poderíamos executar o seguinte comando:
lvcreate -s -n lvtest_snapshot -L 100M /dev/vgtest/lvtest
Enquanto o snapshot existir, o LVM continuará salvando os blocos modificados do original dentro dele . Se quisermos "desfazer" as alterações feitas no sistema de arquivos após a criação do snapshot, desmontamos o volume, executamos `lvconvert --merge` no snapshot e, em seguida, remontamos o sistema de arquivos. Os arquivos retornarão ao estado em que estavam no momento da criação do snapshot.
Se, por outro lado, verificarmos que tudo está funcionando corretamente e quisermos tornar as alterações permanentes, basta excluir o snapshot com `lvremove` . Isso libera o espaço que ele havia reservado no VG e evita que ele se esgote devido a alterações excessivas.
Principais ferramentas e comandos do LVM
O LVM2, versão utilizada nos kernels modernos, oferece um conjunto abrangente de comandos especializados. Embora já tenhamos mencionado alguns, é útil ter uma visão geral das ferramentas mais importantes para gerenciar todo o ciclo de vida dos volumes.
- pvcreate, vgcreate, lvcreateEles criam volumes físicos, de grupo e lógicos.
- pvdisplay, vgdisplay, lvdisplayEles exibem informações detalhadas sobre cada tipo de objeto LVM.
- pvs, vgs, lvsElas fornecem uma visão geral muito útil para obter uma visão rápida do estado do armazenamento.
- lvextend, vgextendEles expandem volumes ou grupos lógicos adicionando tamanho ou novos PVs.
- lvreduce, vgreduce: reduzir o tamanho dos VEs ou remover a PV de um VG.
- pvscan, vgscan, lvscanEles examinam o sistema em busca de estruturas LVM.
- pvchange, vgchange, lvchangeModificar atributos (por exemplo, ativação, permissões) dos diferentes elementos.
- pvmovimentoMigra dados de um volume físico para outro dentro do mesmo VG.
- tamanho pvresize, tamanho lvresizeEles ajustam a estrutura de dados para permitir o aumento ou a redução de volumes.
- vgcfgbackup, vgcfgrestoreEles armazenam e restauram metadados de VG.
- vgconvert: Altera o formato dos metadados, útil para migrar entre versões do LVM.
- lvconvertConverte volumes entre os modos linear, espelhado, instantâneo, etc.
- vgexport, vgimport, vgimportcloneEles exportam/importam VGs para movê-los para outros sistemas, evitando conflitos de nomes.
- vgmerge, vgsplit: permitir a fusão ou divisão de grupos de volumes.
- vgrename, lvrenameAlterar o nome dos VGs e LVs sem afetar os dados.
- pvreremover, lvreremoverEles removem PVs do LVM e excluem LVs que não estão mais em uso.
Dominar esse conjunto de ferramentas torna o trabalho com armazenamento no Linux muito mais flexível e menos traumático , permitindo mudanças profundas sem interromper os serviços e facilitando a manutenção a longo prazo.
Dominar o LVM envolve uma compreensão completa de sua estrutura PV-VG-LV, saber como ele interage com os sistemas de arquivos e lidar fluentemente com comandos como pvcreate, vgcreate, lvcreate, pvmove, lvextend ou snapshots; com essa base, qualquer administrador pode gerenciar o armazenamento de servidores Linux com muito mais segurança e flexibilidade do que com o particionamento tradicional.
Escritor apaixonado pelo mundo dos bytes e da tecnologia em geral. Adoro compartilhar meu conhecimento por meio da escrita, e é isso que farei neste blog, mostrar a vocês tudo o que há de mais interessante sobre gadgets, software, hardware, tendências tecnológicas e muito mais. Meu objetivo é ajudá-lo a navegar no mundo digital de uma forma simples e divertida.