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

16

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

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

Se não, há uma razão teórica ou uma limitação técnica (tamanhos de extensão)?

    
por XTL 23.03.2012 / 08:15

3 respostas

12

Um grupo de volumes consiste em volumes físicos inteiros. Um volume físico consiste em muitas extensões (uma extensão é tipicamente 4MB); 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, porque 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 o vgsplit comando. Você pode especificar quais PVs deseja transferir ou qual LV (mas apenas um por vez). Se você especificar um LV, ele e os outros LVs no VG de origem deverão estar em PVs separados. O destino VG será criado se não existir 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

Pode ser necessário usar pvmove primeiro para organizar os volumes lógicos que você deseja mover em PVs separados.

Se você quisesse manter os limites físicos do VG e mover os dados, não há nenhuma ferramenta interna, mas você poderia faça um espelho e remova o original .

    
por 23.03.2012 / 20:28
5

A partir do LVM no trecho Debian (9.0), a saber, 2.02.168-2, é possível fazer uma cópia de um volume lógico em grupos de volumes usando um combinação de vgmerge , lvconvert e vgsplit . Desde que um movimento é uma combinação de uma cópia e uma exclusão, isso também funcionará para um movimento.

Como alternativa, você pode usar pvmove apenas para mover o volume.

Uma sessão de exemplo completa e independente, usando dispositivos de loop e lvconvert segue.

Resumo: criamos o grupo de volume vg1 com volume lógico lv1 e vg2 com lv2 e fazemos uma cópia de lv1 em 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 depois verificar se a cópia foi corretamente criado. Torne vg1 inativa.

vgchange -a n vg1

Execute o comando de mesclagem no modo de teste. Isso mescla vg1 na 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 a partir de lv1 usando lvconvert . o dest-pv argument diz lvconvert para 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/lv1 inativo.

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

Para real

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

Resultado 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.

2) Se houver alguma duplicação dos nomes dos volumes lógicos em os dois grupos de volume, vgmerge se recusarão a prosseguir.

3) Na mesclagem, os volumes lógicos em vg1 devem estar inativos. E na divisão, os volumes lógicos em vg2 pertencentes a vg1 devem estar inativos. No nosso caso, isso é lv1 .

    
por 01.07.2017 / 21:14
1

Eu vou oferecer o meu próprio:

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
    
por 15.05.2018 / 04:20

Tags