Existe uma maneira simples de mover / copiar um volume lógico de um grupo de volumes para outro? (LVM2)

13
Eu estou reorganizando um monte de discos no meu servidor em casa e me vejo na posição de querer mover um monte de volumes lógicos LVM para outro grupo de volume. Existe uma maneira simples de fazer isso? Eu vi menção de um comando cplv , mas isso parece ser algo antigo ou não disponível para o Linux.

    
por jkp 01.12.2010 / 21:36

3 respostas

19

Se você conseguir que o volume lógico esteja em um subconjunto separado de volumes físicos do restante do grupo de volumes de origem ( lvconvert sourcevg/sourcelv /dev/pv1 ... pode ajudar), você pode usar vgsplit para dividir o lv em um novo vg e vgmerge para mesclar o novo vg no destino vg.

Embora o LVM tenha um recurso de espelhamento, você não pode (sanely) usá-lo para fazer uma cópia entre grupos de volumes, porque ambas as pernas do espelho devem estar no mesmo vg e a associação não pode ser quebrada .

Você pode copiar um volume LVM para outro da maneira que você copia qualquer volume para outro: crie um alvo lv do tamanho apropriado e copie o conteúdo com dd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4M . Se o volume de origem estiver ativo, você pode aproveitar o LVM para fazer uma cópia consistente: primeiro, tire um instantâneo da fonte lv com lvcreate -s e copie o instantâneo.

    
por 02.12.2010 / 02:47
2
pvmove -n lvol1 /dev/sdb1 /dev/sdc1

O pvmove pode mover dados entre volumes físicos: Guia do administrador do LVM

    
por 16.09.2013 / 11:04
0

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 poder verificar mais tarde se a cópia foi corretamente criado. Tornar vg1 inativo.

vgchange -a n vg1

Execute o comando de mesclagem no modo de teste. Isso mescla lv1 em lv2 .

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 < > argumento diz lvconvert para fazer a cópia espelhada lv1_copy on /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 inativo.

vgchange -a n vg2

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:

Logical volumes in 'vg1' must be inactive

E na divisão:

Logical volume 'vg2/lv1' must be inactive.
    
por 01.07.2017 / 21:16