LVM (Português)
Da Wikipedia:Logical Volume Manager (Linux):
- LVM é um gerenciador de volume lógico para o Linux kernel; ele gerencia unidades de disco e dispositivos de armazenamento em massa ou similares.
Conceitos básicos
Construção em blocos do LVM
O gerenciador de volumes lógicos (LVM) utiliza um recurso do kernel chamado device-mapper (mapeador de dispositivo) para fornecer um sistema de partições independente do leiaute subjacente do disco. Com o LVM, você abstrai seu dispositivo de armazenamento e passa a ter "partições virtuais", tornando a tarefa de estender/diminuir volumes mais fácil (embora isto esteja sujeito a potenciais limitações do sistema de arquivos).
Partições virtuais permitem adição e remoção sem a preocupação de haver ou não espaço contíguo em um disco em particular, como por exemplo sendo impedido por fdisk fazendo uma varredura no disco (e imaginando se o kernel está usando a tabela de partições nova ou velha), ou ainda, tendo que mover eventuais partições próximas para outra região ao longo do disco.
Construção básico dos blocos do LVM:
- Volume físico (PV, do inglês Phisical Volume)
- um node de dispositivo em bloco Unix, usado para armazenamento pelo LVM. Exemplos: um disco rígido, uma partição MBR ou GPT, um arquivo de loopback, um mapeador de dispositivo (por exemplo, dm-crypt). Ele grava um cabeçalho do LVM.
- Grupo de volume (VG, do inglês Volume Group)
- Grupo de PVs que servem como contêineres para LVs (volumes lógicos, de Logical Volumes). PEs (Phisical Extents, ou extensões físicas são alocadas de um VG para um LV).
- Volume lógico ou Logical Volume (LV)
- Uma partição virtual/lógica que reside em um VG e é composta de PEs. LVs são dispositivos de bloco Unix análogos a partições físicas, ou seja, podem ser diretamente formatadas com um sistema de arquivos.
- Extensão física ou Physical Extent (PE)
- A menor extensão física contígua (4 MiB, por padrão) em um PV que pode ser atribuída para um LV. Pense em PEs como sendo partes de PVs que possam ser alocadas para qualquer LV.
Exemplo:
Discos físicos Disco1 (/dev/sda): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |Partição1 50 GiB (Volume físico) |Partição2 80 GiB (Volume físico) | |/dev/sda1 |/dev/sda2 | |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ | Disco2 (/dev/sdb): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |Partição1 120 GiB (Volume físico) | |/dev/sdb1 | |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|
Volumes lógicos do LVM Grupo de volumes1 (/dev/MeuGrupoDeVolumes/ = /dev/sda1 + /dev/sda2 + /dev/sdb1): _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |Volume lógico1 15 GiB |Volume lógico2 35 GiB |Volume lógico3 200 GiB | |/dev/MeuGrupoDeVolumes/rootvol |/dev/MeuGrupoDeVolumes/homevol |/dev/MeuGrupoDeVolumes/mediavol | |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _| _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|
Vantagens
O LVM proporciona mais flexibilidade do que usar partições normais no disco rígido, pois permite:
- Usar qualquer quantidade de discos como se fosse um único grande disco;
- Ter volumes lógicos estendidos sobre vários discos;
- Criar pequenos volumes lógicos e estendê-los "dinamicamente" à medida em que eles forem ficando cheios;
- Redimensionar volumes lógicos independentemente da ordem que estão dispostos fisicamente no disco. Isto não depende da posição do LV dentro do VG, não havendo nem mesmo necessidade de liberar espaço disponível ao redor destes;
- Redimensionar/criar/excluir volumes lógicos e físicos online. Os sistemas de arquivos neles ainda precisam ser redimensionados, mas alguns (como ext4) suportam redimensionamento online;
- Migração de um LV em uso online/em tempo real por serviços de diferentes discos sem necessidade de reinicializar os serviços;
- Criar snapshots que permitem backup completo do sistema de arquivos, minimizando o tempo de indisponibilidade dos serviços;
- Usar vários alvos do mapeador de dispositivos incluindo criptografia transparente do sistema de arquivos e cache dados acessados frequentemente. Isto permite criar um sistema com (um ou mais) discos físicos (criptografados com LUKS) e LVM por cima para permitir o fácil redimensionamento e gerenciamento de volumes separados (por exemplo, para
/
, , , etc.) sem o incômodo de digitar uma senha várias vezes numa inicialização.
Desvantagens
- Etapas adicionais tornam o processo de configuração inicial do sistema mais complicado. Precisa executar constantemente (múltiplos) daemons.
- Em dual boot, note que o Windows não suporta LVM; o que impossibilita o acesso de quaisquer partições LVM à partir do Windows.
- Se seus volumes físicos não estão em uma RAID-1, RAID-5 ou RAID-6 perder um disco pode levar a perda de um ou mais volumes lógicos se você espalhar (ou expandir) seus volumes lógicos em múltiplos discos não redundantes.
Introdução
Certifique-se de ter instalado o pacote .
Configuração por interface gráfica
Não existe uma ferramenta "oficial" por interface gráfica para gerenciar volumes LVM, mas [link quebrado: package not found] cobre a maioria das operações comuns e fornece visualizações simples do estado do volume. Pode automaticamente redimensionar muitos tipos de sistemas de arquivos ao redimensionar volumes lógicos.
Operações com volumes
Volumes físicos
Após estender ou antes de reduzir o tamanho de um dispositivo que possui um volume físico nele, você precisa aumentar ou diminuir o PV usando pvresize
.
Aumentando
Para expandir o PV em após aumentar a partição, execute:
# pvresize /dev/sda1
Isto irá automaticamente detectar o novo tamanho do dispositivo e estender o PV ao seu tamanho máximo.
Diminuindo
Para diminuir um volume físico antes de reduzir seu dispositivo subjacente, adicione os parâmetros ao comando, exemplo:
# pvresize --setphysicalvolumesize 40G /dev/sda1
O comando acima pode terminar com o seguinte erro:
/dev/sda1: cannot resize to 25599 extents as later ones are allocated. 0 physical volume(s) resized / 1 physical volume(s) not resized
De fato, pvresize
irá se recusar a diminuir um PV se sua extensão física estiver após onde o seu novo final deveria estar. É preciso executar pvmove antecipadamente para realocá-las em outro ponto do grupo de volumes onde houver espaço livre suficiente.
Mover extensões físicas
Antes de mover extensões físicas para o final do volume, é preciso executar para ver os segmentos de volume físico. No exemplo a seguir, existe um volume físico em , um grupo de volumes e um volume lógico .
Pode-se observar que o espaço livre está dividido pelo volume. Para diminuir o volume físico, precisamos primeiro mover todos os segmentos usados para o início.
Aqui, o primeiro segmento livre começa em 0 e vai até 153600 e nos deixa com 153601 de extensão livre. Podemos agora mover este número de segmento da última extensão física para a primeira extensão. O comando será assim:
- este comando move 399668 - 307201 + 1 = 92468 PEs do último segmento para o primeiro segmento. Isto é possível porque o primeiro segmento encerra 153600 PEs livres, cada qual contendo 92467 - 0 + 1 = 92468 PEs movidas.
- a opção
--alloc anywhere
é usada pois queremos mover as PEs dentro da mesma partição. No caso de partições diferentes, o comando deveria ser algo como:# pvmove /dev/sdb1:1000-1999 /dev/sdc1:0-999
- este comando pode levar muito tempo (uma ou duas horas) no caso de volumes grandes. Pode ser uma boa idéia executar este comando em um Tmux ou uma sessão GNU Screen. Qualquer parada indesejada no processo poderá ser fatal.
- uma vez que a operação tenha terminado, execute fsck para ter certeza de que seu sistema de arquivos é válido.
Redimensionar volumes físicos
Uma vez que todos os seus segmentos físicos estejam na última extensão física, execute vgdisplay
e veja sua PE livre.
Você pode agora executar novamente o comando:
# pvresize --setphysicalvolumesize tamanho PhysicalVolume
Veja o resultado:
Redimensionar partição
Finalmente, você deve diminuir a partição com sua ferramenta de particionamento desejada.
Ativando um grupo de volume
# vgchange -a y vg0
Isto irá reativar o grupo de volume. Se por exemplo você tiver uma falha em um dispositivo de espelhamento e tiver substituído a unidade, execute , e .
Reparando um grupo de volumes
Para iniciar o procedimento de reconstrução de um espelhamento de uma matriz degrada nesse exemplo, você deveria executar:
# lvconvert --repair /dev/vg0/mirror
Você pode monitorar o processo de reconstrução (Cpy%Sync Column output) com:
# lvs -a -o +devices
Desativando um grupo de volumes
Apenas invoque
# vgchange -a n my_volume_group
Isto irá desativar o grupo de volumes e irá permitir que você desmonte o contêiner onde ele está armazenado.
Renomeando um grupo de volumes
Use o comando para renomear um grupo de volumes existente.
Qualquer um dos comandos a seguir é capaz de renomear um grupo de volumes existente para
# vgrename /dev/vg02 /dev/my_volume_group
# vgrename vg02 my_volume_group
Adicionar um volume físico a um grupo de volumes
Você primeiro cria um novo volume físico no dispositivo que deseja usar, depois estende seu grupo de volumes:
# pvcreate /dev/sdb1 # vgextend VolGroup00 /dev/sdb1
Isto, é claro, irá aumentar o total de extensões físicas em seu grupo de volumes, podendo cada uma ser alocada por volumes lógicos como você achar melhor.
8e
para partições MBR, e 8e00
para partições GPT.Remover partições de um grupo de volumes
Se você criou um volume lógico na partição, remova-o primeiro.
Todos os dados na partição precisarão ser movidos para outra partição. Felizmente, o LVM torna isso fácil:
# pvmove /dev/sdb1
Se desejar ter os dados em um volume físico em particular, especifique-o como o segundo argumento para pvmove
:
# pvmove /dev/sdb1 /dev/sdf1
Então o volume físico precisará ser removido do grupo de volumes:
# vgreduce myVg /dev/sdb1
Ou remover todos os volumes físicos vazios:
# vgreduce --all vg0
Por exemplo, se você tiver um disco ruim em um grupo que não pode ser encontrado por ter sido removido ou falhado:
# vgreduce --removemissing --force vg0
E finalmente, se desejar usar a partição para algo mais, e quiser prevenir que LVM considere que a partição é um volume físico:
# pvremove /dev/sdb1
Criando um volume lógico
Para criar um volume lógico em um grupo de volumes com 300 GiB de capacidade, execute:
# lvcreate -L 300G MyVolGroup -n homevol
ou, para criar um volume lógico em um grupo de volumes com o restante de sua capacidade, execute:
# lvcreate -l +100%FREE MyVolGroup -n homevol
O novo volume lógico irá aparecer como . É possível formatar o volume lógico com um sistema de arquivos apropriado.
É possível verificar o volume lógico criado usando o seguinte comando:
# lvs
Renomeando um volume lógico
Para renomear um volume lógico existente, use o comando .
Qualquer um dos comandos a seguir irão renomear o volume lógico no grupo de volumes de para .
# lvrename /dev/vg02/lvold /dev/vg02/lvnew
# lvrename vg02 lvold lvnew
Redimensionando volumes lógicos e sistemas de arquivos de uma só vez
Estender o volume lógico em por 10 GiB e redimensionar seu sistema de arquivos tudo de uma vez:
# lvresize -L +10G --resizefs MyVolGroup/mediavol
Definir o tamanho do volume lógico em para 15 GiB e redimensionar seu sistema de arquivos tudo de uma vez:
# lvresize -L 15G --resizefs MyVolGroup/mediavol
Se desejar preencher todo o espaço livre em um grupo de volumes, use o seguinte comando:
# lvresize -l +100%FREE --resizefs MyVolGroup/mediavol
Veja lvresize(8) para opções mais detalhadas.
Redimensionar volume lógico e sistema de arquivos separadamente
Para sistemas de arquivos não suportados por será necessário usar um utilitário apropriado para redimensionar o sistema de arquivos e diminuir o volume lógico, ou depois de expandí-lo.
Para estender o volume lógico contido no grupo de volumes em 2 GiB sem tocar em seu sistema de arquivos:
# lvresize -L +2G MyVolGroup/mediavol
Agora, para expandir o sistema de arquivos (ext4 neste exemplo) para o tamanho máximo do volume lógico subjacente:
# resize2fs /dev/MyVolGroup/mediavol
Para reduzir o tamanho do volume lógico contido em em 500 MiB, primeiro calcule o tamanho do sistema de arquivos resultante, depois diminuir o sistema de arquivos (ext4 neste exemplo) para o novo tamanho:
# resize2fs /dev/MyVolGroup/mediavol NovoTamanho
Quando o sistema de arquivos for diminuído, reduza o tamanho do volume lógico:
# lvresize -L -500M MyVolGroup/mediavol
Para calcular o tamanho exato do volume lógico para sistemas de arquivos ext2, ext3 e ext4, use uma simples fórmula: .
102400000 blocos × 4096 bytes/bloco ÷ 4 MiB/extensão = 100000 extensão total
Passando irá confirmar que que está correto.
Veja lvresize(8) para opções mais detalhadas.
Removendo um volume lógico
Primeiro, encontre o nome do volume lógico que desejar remover. Pode-se obter a lista de volumes lógicos com:
# lvs
Depois, verifique o ponto de montagem do volume lógico escolhido:
$ lsblk
Então desmonte o sistema de arquivos do volume lógico:
# umount /<ponto-de-montagem>
Finalmente, remova o volume lógico:
# lvremove <grupo_de_volumes>/<volume_logico>
Por exemplo:
# lvremove VolGroup00/lvolhome
Confirme digitando .
Atualize conformece necessário.
Você poderá verificar a remoção do volume lógico digitando como root novamente (veja o primeiro passo deste seção).
Tipos de volume lógico
Além de volumes lógicos simples, LVM suporta snapshots, volumes lógicos de cache, volumes lógicos de provisionamento fino e RAID.
Snapshots
O LVM permite tirar um snapshot de seu sistema de uma maneira muito mais eficiente do que um backup tradicional. Ele usa a técnica chamada COW (cópia em gravação, do inglês copy-on-write). O snapshot inicial tirado contém apontamentos aos inodes de seus dados atuais. Desde que seus dados permaneçam inalterados, o snapshot apenas irá conter ponteiros para seus inodes e não os dados propriamente ditos. Sempre que modificar um arquivo ou diretório para o qual o snapshot aponta, o LVM irá clonar os dados automaticamente, a cópia anterior será referenciada pelo snapshot, e a nova cópia referenciada pelo seu sistema ativo. Assim, você pode tirar snapshot de um sistema com 35 GiB de dados usando apenas 2 GiB de espaço livre desde que você modifique menos de 2 GiB (em ambos original e snapshot). Para que seja possível criar snapshots, será necessário ter espaço não alocado em seu grupo de volumes. Criar snapshots em qualquer outro irá ocupar espaço no respectivo grupo de volumes. Então, se planeja usar snapshots para backup de sua partição raiz, não aloque 100% de seu grupo de volumes para o volume lógico raiz.
Configuração
Você cria snapshot de volumes lógicos normalmente como se faz com quaisquer outros volumes normais.
# lvcreate --size 100M --snapshot --name snap01 /dev/vg0/lv
Com este volume, você pode modificar menos de 100 MiB de dados, antes de preencher todo o volume de snapshots.
Para reverter o volume lógico 'lv' modificado para o estado onde o snapshot 'snap01' foi criado pode ser feito com
# lvconvert --merge /dev/vg0/snap01
No caso do volume de origem estar ativo, a fusão ocorrerá na próxima reinicialização (esta fusão pode ser feita a partir de um LiveCD).
Múltiplos snapshots também podem ser criados e cada um fundido com seu respectivo volume lógico de origem.
O snapshot pode ser montado e salvo ter seu backup realizado com dd ou tar. O tamanho do arquivo de backup feito com dd terá o tamanho dos arquivos dentro do volume de snapshot. Para restaurá-lo, apenas crie um snapshot, monte-o, e grave ou extraia o backup para dentro dele. Então, mescle-o com a origem.
Snapshots são primariamente usados para fornecer uma cópia congelada do sistema de arquivos para se fazer backups; um backup levando duas horas fornece uma imagem do sistema de arquivos mais consistente do que realizar backup diretamente da partição.
Veja Criar snapshots do sistema de arquivos raiz com LVM para automatizar a criação de um sistema de arquivos raiz limpo durante a inicialização dos sistema para backup e restauração.
Veja LVM dentro de LUKS e LUKS dentro do LVM.
Se tiver volumes LVM não ativados via initramfs, ative , fornecido pelo pacote .
Cache LVM
De :
- O cache de volumes lógicos usa um LV pequeno e rápido para melhorar a performance de um LV grande e lento. Isto é feito armazenando os blocos usados frequentemente em um LV mais rápido. O LVM então refere-se ao LV pequeno e rápido como um LV de cache. O LV grande e lento é chamado de LV de origem. Devido às requisições do dm-cache (o driver do kernel), o LVM divide adicionalmente o LV de cache em dois dispositivos - um LV de cache de dados e um LV de cache de metadados. O LV de cache de dados é o local onde cópias dos blocos de dados são mantidos à partir do LV de origem para aumentar a velocidade. O LV de cache de metadados mantém informações que especificam onde os blocos de dados estão armazenados (por exemplo, no LV de origem ou no LV de cache de dados). Usuários devem familiarizar-se com esses LVs se desejarem criar volumes de cache melhores e mais robustos. Todos estes LVs associados devem residir no mesmo VG.
Criar cache
A maneira mais rápida é criar um PV (se necessário) no disco mais rápido (troque X com a letra do seu dispositivo) e adicioná-lo ao grupo de volumes existente:
# vgextend dataVG /dev/sdX
Criar um cache automático com metadados em sdX, e converter o volume lógico existente (dataLV) para o volume que já contenha o cache, tudo em um único passo:
# lvcreate --type cache --cachemode writethrough -L 20G -n dataLV_cachepool dataVG/dataLV /dev/sdX
Obviamente, se desejar que seu cache seja maior, você pode aumentar o parâmetro para um tamanho diferente.
Remover cache
Se você precisar desfazer a operação de criação em uma etapa acima:
# lvconvert --uncache dataVG/dataLV
Isto confirmará qualquer gravação pendente em cache de volta ao LV de origem, e então excluirá o cache. Outras opções estão disponíveis e descritas em .
RAID
Da :
- lvm(8) RAID é uma maneira de criar um volume lógico (LV) que usa múltiplos dispositivos físicos para aumentar performance ou tolerar falhas em dispositivos. Em LVM, os dispositivos físicos são, na verdade, volumes físicos (PVs) em um único grupo de volumes (VG).
LVM RAID suporta RAID 0, RAID 1, RAID 4, RAID 5, RAID 6 e RAID 10. Veja Wikipedia:Standard RAID levels para detalhes sobre cada nível.
Configurando RAID
Crie volumes físicos:
# pvcreate /dev/sda2 /dev/sdb2
Crie um grupo de volumes nos volumes físicos:
# vgcreate VolGroup00 /dev/sda2 /dev/sdb2
Crie volumes lógicos usando , veja e para mais opções.
# lvcreate --type RaidLevel [OPTIONS] -n Name -L Size VG [PVs]
Por exemplo:
# lvcreate --type raid1 --mirrors 1 -L 20G -n myraid1vol VolGroup00 /dev/sda2 /dev/sdb2
irá criar um volume lógico espelhado de 20 GiB chamado "myraid1vol" no grupo VolGroup00 em e .
Solução de problemas
Problemas de inicialização/desligamento causam a desativação de lvmetad
use_lvmetad = 1
deve ser definido em . Este é o padrão agora - se você tiver um arquivo , você deve mesclar todas as alterações.
Comandos LVM não funcionam
- Carregue o módulo apropriado:
# modprobe dm_mod
O módulo deve ser automaticamente carregado. Caso não seja, você poderá tentar:
Será necessário recriar a initramfs para confirmar as alterações feitas.
- tente comandos precedendo lvm, como este:
# lvm pvdisplay
Volumes lógicos não são exibidos
Se estiver tentando montar volumes lógicos existentes, mas eles não são exibidos em , você poderá usar os seguintes comandos para ativá-los:
# vgscan # vgchange -ay
LVM em mídia removível
Sintomas:
Causa: remover uma unidade externa LVM sem antes desativar o(s) grupo(s) de volume(s). Antes de desconectá-lo, certifique-se:
# vgchange -an nome do grupo de volumes
Solução: assumindo que você já tentou ativar o grupo de volumes com , e ainda está recebendo erros de Input/output:
# vgchange -an nome do grupo de volumes
Desconecte a unidade externa e aguarde alguns minutos:
# vgscan # vgchange -ay nome do grupo de volumes
Suspensão/retorno com LVM e mídia removível
Para que o LVM funcione corretamente em mídia removível – como um dispositivo USB externo – o grupo de volumes do da unidade externa deverá ser desativada antes do sistema entrar em suspensão. Se isto não for feito, você poderá obter erros de "buffer I/O errors" no dispositivo (após retornar do modo de suspensão). Por esta razão, não é recomendável misturar dispositivos externos com dispositivos internos no mesmo grupo de volumes.
Para desativar automaticamente grupos de volumes com unidades USB externas, marque cada grupo de volumes com assim:
# vgchange --addtag sleep_umount vg_external
Uma vez que a tag for definida, use a seguinte unit para o systemd desativar corretamente volumes antes de entrar em modo de suspensão. Ao retornar do modo de suspensão, eles serão automaticamente ativados pelo LVM:
/etc/systemd/system/ext_usb_vg_deactivate.service
[Unit] Description=Desativar grupos de volumes USB externos ao entrar em modo de suspensão Before=sleep.target [Service] Type=oneshot ExecStart=-/etc/systemd/system/deactivate_sleep_vgs.sh [Install] WantedBy=sleep.target
e este script:
Finalmente, ative a unit.
O redimensionamento de um volume lógico falha
Se estiver tentando extender um volume lógico e obtendo o erro:
" Insufficient suitable contiguous allocatable extents for logical volume "
A causa é que o volume lógico foi criado com uma alocação explicitamente (opções ou ) e não há outra extensão contígua disponível (veja também a referência).
Para resolver isto, primeiro estenda o volume lógico, altere seu método de alocação com lvchange --alloc inherit <volume_logico>
. Se for necessário manter o método de alocação contíguo, uma alternativa seria mover o volume para uma área do disco com espaço livre extensão suficiente (veja ).
Comando "grub-mkconfig" reporta o erro "unknown filesystem"
Certifique-se de remover primeiro os volumes de snapshot antes de gerar o grub.cfg.
Tempo esgotado em volumes de dispositivos da raiz
Com uma grande quantidade de snapshots, executará por muito tempo, o que fará com que do dispositivos da raiz do sistema tenham seu tempo-limite esgotado. Para compensar isso, adicione o parâmetro na inicialização do kernel na configuração do gerenciador de boot. Ou, faça pular a verificação de mapeamento de blocos (veja ) e recriar a initramfs:
Demora no desligamento
Se estiver usando RAID, snapshots ou provisionamento poderão causar uma demora no desligamento, certifique-se de que o serviço está iniciado. Veja .
Hibernar em um volume swap de provisionamento fino
Veja Power management/Suspend and hibernate#Hibernation into a thinly-provisioned LVM volume.
Veja também
- LVM2 Resource Page on SourceWare.org
- LVM article at Gentoo wiki
- Ubuntu LVM Guide Part 1Part 2 detals snapshots
- Red Hat: Logical Volume Manager Administration