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


18

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

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

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

Respostas:


13

Um grupo de volumes consiste em volumes físicos inteiros. Um volume físico consiste em várias extensões (uma extensão é geralmente de 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 o vgsplitcomando 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

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

Se você pretendia manter os limites físicos do VG e mover os dados, não há ferramenta integrada, mas você poderia fazer um espelho e remover o original .


Parece que o target_group pode ser um já existente?
XTL 25/03

8

A partir do LVM em estiramento Debian (9.0), ou seja 2.02.168-2, é possível fazer uma cópia de um volume lógico entre os grupos de volume utilizando uma combinação de vgmerge, lvconverte vgsplit. Como uma movimentação é uma combinação de uma cópia e uma exclusão, isso também funcionará para uma movimentação.

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

Uma sessão de exemplo independente e completa usando dispositivos de loop e a lvconvertseguir.

Resumo: criamos um grupo de volumes vg1com volume lógico lv1, e vg2com lv2, e 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 os grupos de volumes vg1 e vg2 em / dev / loop1 e / dev / loop2, respectivamente.

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

Crie os volumes lógicos lv1 e lv2 nas 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 no lv1 para verificar posteriormente se a cópia foi criada corretamente. Torne a vg1 inativa.

vgchange -a n vg1

Execute o comando mesclar 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 /dev/loop2.

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

Depois 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

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 nos dois grupos de volumes, vgmergeele se recusará a continuar.

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


2

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 bom, remova a fonte

lvremove vgsource/lv0

Este é praticamente o oposto da questão. O objetivo é mover o volume em vez de copiar os dados para um novo.
XTL
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.