Encontrado.
Versão resumida: use pvmove
. Versão longa:
Se a situação como pode ser retornada por lvdisplay --maps
é a seguinte:
--- Logical volume ---
LV Path /dev/main/data
Current LE 300
Segments 3
(redacted)
--- Segments ---
Logical extent 0 to 99:
Physical volume /dev/sda1
Physical extents 0 to 99
Logical extent 100 to 199:
Physical volume /dev/sdb1
Physical extents 0 to 99
Logical extent 200 to 299:
Physical volume /dev/sdc1
Physical extents 0 to 99
Então, como você pode ver, um volume lógico está espalhado por três discos e ocupa 100 extensões em cada. 'Extensões' são a versão dos setores da LVM; eles são a menor unidade com a qual geralmente se preocupa.
Mas se olharmos para os volumes físicos abaixo:
pvdisplay
--- Physical volume ---
PV Name /dev/sda1
Total PE 100
Free PE 0
Allocated PE 100
--- Physical volume ---
PV Name /dev/sdb1
Total PE 300
Free PE 200
Allocated PE 100
--- Physical volume ---
PV Name /dev/sdc1
Total PE 100
Free PE 0
Allocated PE 100
... podemos ver que a partição do segundo disco ( /dev/sdb1
) tem muito espaço extra.
Agora, poderíamos adicionar isso diretamente ao volume lógico e, embora isso provavelmente fosse suficiente para a maioria das situações, ele deixaria o volume em um estado desnecessariamente fragmentado. O final do volume lógico estaria no meio do disco. É aqui que entra o comando pvmove
.
pvmove
nos permite rearranjar arbitrariamente a configuração de um volume lógico, sem que o sistema de arquivos contido esteja ciente disso.
Aviso: pvmove
pode causar perda de dados. Idealmente, faça backup do sistema de arquivos antes de continuar.
Certifique-se de que o volume lógico seja desmontado antes de prosseguir.
sintaxe básica: pvmove SourcePhysicalVolume:PE-PE DestinationPhysicalVolume:PE-PE
Primeiro comando: Recoloque as extensões de sdc1
em sdb1
, tornando tudo contíguo:
pvmove /dev/sdc1:0-99 /dev/sdb1:100-199
Depois, lvdisplay --maps
dá:
--- Logical volume ---
LV Path /dev/main/data
Current LE 300
Segments 2
(redacted)
--- Segments ---
Logical extent 0 to 99:
Physical volume /dev/sda1
Physical extents 0 to 99
Logical extent 100 to 299:
Physical volume /dev/sdb1
Physical extents 0 to 199
Agora, é simplesmente uma questão de estender o volume lógico pelo espaço restante em /dev/sdb1
e o agora totalmente vazio /dev/sdc1
. Isso é muito mais simples. O próximo comando diz ao lvm para expandir nosso volume lógico através de todas as extensões livres remanescentes nessas partições.
lvextend -l +100%free /dev/main/data /dev/sdb1 /dev/sdc1
Depois, o volume lógico seria assim:
--- Logical volume ---
LV Path /dev/main/data
Current LE 500
Segments 2
(redacted)
--- Segments ---
Logical extent 0 to 99:
Physical volume /dev/sda1
Physical extents 0 to 99
Logical extent 100 to 399:
Physical volume /dev/sdb1
Physical extents 0 to 299
Logical extent 400 to 499:
Physical volume /dev/sdc1
Physical extents 0 to 99
O que é bonito e o mais simples possível.
Agora podemos estender o sistema de arquivos para o novo espaço.
resize2fs /dev/main/data
Conclusão: O comando pvmove
é extremamente poderoso e permite aproveitar todas as ofertas de abstração lvm. Ele permite que você rearranje arbitrariamente o espaço físico no qual um volume lógico fica.