Mover um volume lógico de um grupo de volumes para outro

Mover um volume lógico de um grupo de volumes para outro

É possível mover um volume lógico de um grupo de volumes para outro como um todo?

É possível criar um lv (mais ou menos) correspondente e copiar os dados, mas existe alguma maneira de fazer isso apenas com ferramentas LVM?

Caso contrário, existe uma razão teórica ou uma limitação técnica (tamanhos de extensão)?

Responder1

Um grupo de volumes consiste em volumes físicos inteiros. Um volume físico consiste em muitas extensões (uma extensão normalmente tem 4 MB); cada extensão pode pertencer a um volume lógico diferente. Para transferir um volume lógico para um grupo diferente, você não pode simplesmente transferir extensões, pois isso pode dividir o volume físico entre o VG de origem e o VG de destino.

O que você pode fazer é transferir um ou mais PVs do VG de origem para o VG de destino, com ovgsplitcomando. Você pode especificar quais PVs deseja transferir ou qual LV (mas apenas um de cada vez). Se você especificar um LV, ele e os outros LVs no VG de origem deverão estar em PVs separados. O VG de destino será criado se não existir nenhum VG com o nome especificado.

vgsplit -n source_group/volume_to_copy source_group target_group
vgsplit source_group target_group /dev/sdy99 /dev/sdz99

Você pode precisar usarpvmoveprimeiro, organize os volumes lógicos que você deseja mover para PVs separados.

Se você pretende manter os limites físicos do VG e mover os dados, não há nenhuma ferramenta integrada, mas você podefaça um espelho e depois remova o original.

Responder2

A partir do LVM no trecho Debian (9.0), ou seja, 2.02.168-2, é possível fazer uma cópia de um volume lógico entre grupos de volumes usando uma combinação de vgmerge, lvconvert, e vgsplit. Como uma movimentação é uma combinação de copiar e excluir, isso também funcionará para uma movimentação.

Alternativamente, você pode usar pvmovepara mover as extensões físicas. CitarU&L: Finalidade das Extensões Físicas:

Uma única extensão física é a menor unidade de espaço em disco que pode ser gerenciada individualmente pelo LVM.

Uma sessão de exemplo completa e independente usando dispositivos de loop e lvconverta seguir.

Resumo: criamos um grupo de volumes vg1com volume lógico lv1e vg2com lv2e fazemos uma cópia de lv1in vg2.

Crie arquivos.

truncate pv1 --size 100MB
truncate pv2 --size 100MB

Configure dispositivos de loop em arquivos.

losetup /dev/loop1 pv1
losetup /dev/loop2 pv2

Crie volumes físicos em dispositivos de loop (inicialize dispositivos de loop para uso pelo LVM).

pvcreate /dev/loop1 /dev/loop2

Crie grupos de volumes vg1 e vg2 em /dev/loop1 e /dev/loop2 respectivamente.

vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2

Crie volumes lógicos lv1 e lv2 em vg1 e vg2 respectivamente.

lvcreate -L 10M -n lv1 vg1
lvcreate -L 10M -n lv2 vg2

Crie sistemas de arquivos ext4 em lv1 e lv2.

mkfs.ext4 -j /dev/vg1/lv1
mkfs.ext4 -j /dev/vg2/lv2

Opcionalmente, escreva algo em lv1 para poder verificar posteriormente se a cópia foi criada corretamente. Torne vg1 inativo.

vgchange -a n vg1

Execute o comando merge no modo de teste. Isso mescla vg1 em vg2.

# vgmerge -A y -l -t -v <<destination-vg>> <<source-vg>>
vgmerge -A y -l -t -v vg2 vg1

E então de verdade.

vgmerge -A y -l -v vg2 vg1

Em seguida, crie um par de espelhos RAID 1 lv1usando lvconvert. O dest-pvargumento diz lvconvertpara fazer a cópia espelhada em /dev/loop2.

# lvconvert --type raid1 --mirrors 1 <<source-lv>> <<dest-pv>>
lvconvert --type raid1 --mirrors 1 /dev/vg2/lv1 /dev/loop2

Em seguida, divida o espelho. O novo LV é agora lv1_copy.

# lvconvert --splitmirrors 1 --name <<source-lv-copy>> <<source-lv>>
lvconvert --splitmirrors 1 --name lv1_copy /dev/vg2/lv1

Tornar vg2/lv1inativo.

lvchange -a n /dev/vg2/lv1

Então (modo de teste)

# vgsplit -t -v <<source-vg>> <<destination-vg>> <<moved-to-pv>>
vgsplit -t -v /dev/vg2 /dev/vg1 /dev/loop1

Sério

vgsplit -v /dev/vg2 /dev/vg1 /dev/loop1

Saída resultante:

lvs
[...]
lv1        vg1       -wi-a-----  12.00m
lv1_copy   vg2       -wi-a-----  12.00m
lv2        vg2       -wi-a-----  12.00m

NOTAS:

  1. A maioria desses comandos precisará ser executada como root. A #frente de alguns dos comandos indica que é um comentário. Não representa o prompt raiz.

  2. Se houver alguma duplicação dos nomes dos volumes lógicos nos dois grupos de volumes, vgmergerecusar-se-á a prosseguir.

  3. Na mesclagem, os volumes lógicos vg1devem estar inativos. E na divisão, os volumes lógicos vg2pertencentes vg1devem estar inativos. No nosso caso, isso é lv1.

Responder3

Vou oferecer o meu:

umount /somedir/

lvdisplay /dev/vgsource/lv0 --units b

lvcreate -L 12345b -n lv0 vgtarget

dd if=/dev/vgsource/lv0 of=/dev/vgtarget/lv0 bs=1024K conv=noerror,sync status=progress

mount /dev/vgtarget/lv0 /somedir/

se tudo estiver bem, remova a fonte

lvremove vgsource/lv0

Responder4

Digamos que você tenha um volume chamados0

$ pvs -o+pv_used

PV         VG Fmt  Attr PSize    PFree   Used
/dev/sda2  cl lvm2 a--  <118.24g      0  <118.24g
/dev/sdb   s0 lvm2 a--  <223.57g      0  <223.57g
/dev/sdc1  s0 lvm2 a--  <465.76g      0  <465.76g
/dev/sdd1     lvm2 ---   931.51g 931.51g       0 

Quero mudar /dev/sdbpara /dev/sdc1um novo disco psíquico/dev/sdd1

Crie um volume físico em sdd1

$ pvcreate /dev/sdd1

Agora você pode estender seu grupo de volumes s0com o novo disco

$ vgextend s0 /dev/sdd1

Agora você pode começar a mover dados

$ pvmove /dev/sdb /dev/sdd1

Espere para terminar

/dev/sdb: Moved: 10.0%
...

/dev/sdb: Moved: 50.0%
...

/dev/sdb: Moved: 100.0%

Verificar

$ pvs -o+pv_used

PV         VG Fmt  Attr PSize    PFree   Used    
/dev/sda2  cl lvm2 a--  <118.24g      0  <118.24g
/dev/sdb      lvm2 ---   223.57g 223.57g       0 
/dev/sdc1  s0 lvm2 a--  <465.76g      0  <465.76g
/dev/sdd1  s0 lvm2 a--  <931.51g 707.94g <223.57g

Agora você pode remover /dev/sdbdo s0grupo

$ vgreduce s0 /dev/sdb

Siga os mesmos passos para/dev/sdc1

informação relacionada