Spostare un volume logico da un gruppo di volumi a un altro


18

È possibile spostare un volume logico da un gruppo di volumi a un altro nel suo insieme?

È possibile creare un lv (più o meno) corrispondente e copiare i dati, ma esiste un modo per farlo solo con gli strumenti LVM?

In caso contrario, esiste una ragione teorica o una limitazione tecnica (dimensioni dell'estensione)?

Risposte:


13

Un gruppo di volumi è costituito da interi volumi fisici. Un volume fisico è composto da molte estensioni (un'estensione è in genere 4 MB); ogni estensione può appartenere a un volume logico diverso. Per trasferire un volume logico in un altro gruppo, non è possibile semplicemente trasferire le estensioni, poiché ciò potrebbe dividere il volume fisico tra il VG di origine e il VG di destinazione.

Quello che puoi fare è trasferire uno o più PV dal VG sorgente al VG target, con il vgsplitcomando. È possibile specificare quali PV si desidera trasferire o quale LV (ma solo uno alla volta). Se si specifica un LV, esso e gli altri LV nel VG sorgente devono essere su PV separati. Il VG di destinazione verrà creato se non esiste alcun VG con il nome specificato.

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

Potrebbe essere necessario utilizzare pvmoveprima per disporre i volumi logici che si desidera spostare su PV separati.

Se intendevi conservare i confini fisici del VG e spostare i dati, non esiste uno strumento integrato, ma potresti creare un mirror e rimuovere l'originale .


Sembra che il target_group possa essere preesistente?
XTL

8

A partire dalla LVM in Debian tratto (9.0), cioè 2.02.168-2, è possibile fare una copia di un volume logico attraverso gruppi di volumi utilizzando una combinazione di vgmerge, lvconverte vgsplit. Poiché una mossa è una combinazione di una copia e di una cancellazione, questo funzionerà anche per una mossa.

In alternativa, puoi usare pvmovesolo per spostare il volume.

Segue una sessione di esempio completa e indipendente che utilizza dispositivi loop lvconvert.

Riepilogo: creiamo un gruppo di volumi vg1con volume logico lv1e vg2con lv2e facciamo una copia di lv1in vg2.

Crea file.

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

Configurare dispositivi loop su file.

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

Creare volumi fisici su dispositivi loop (inizializzare i dispositivi loop per l'uso da LVM).

pvcreate /dev/loop1 /dev/loop2

Crea gruppi di volumi vg1 e vg2 rispettivamente su / dev / loop1 e / dev / loop2.

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

Creare volumi logici lv1 e lv2 rispettivamente su vg1 e vg2.

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

Crea filesystem ext4 su lv1 e lv2.

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

Facoltativamente, scrivi qualcosa su lv1 in modo da poter verificare in seguito che la copia sia stata creata correttamente. Rendi vg1 inattivo.

vgchange -a n vg1

Esegui il comando di unione in modalità test. Questo unisce vg1 in vg2.

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

E poi per davvero.

vgmerge -A y -l -v vg2 vg1

Quindi creare una coppia mirror RAID 1 lv1dall'uso lvconvert. L' dest-pvargomento dice lvconvertdi fare il copia speculare su /dev/loop2.

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

Quindi dividere lo specchio. Il nuovo LV è ora lv1_copy.

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

Rendi vg2/lv1inattivo.

lvchange -a n /dev/vg2/lv1

Quindi (modalità test)

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

Davvero

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

Risultato risultante:

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

APPUNTI:

1) La maggior parte di questi comandi dovrà essere eseguita come root.

2) In caso di duplicazione dei nomi dei volumi logici nei due gruppi di volumi, vgmergesi rifiuterà di procedere.

3) All'unione, i volumi logici in vg1devono essere inattivi. E su split, i volumi logici in vg2appartenenza vg1devono essere inattivi. Nel nostro caso, questo è lv1.


2

Offrirò il mio:

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 tutto è a posto, rimuovi la fonte

lvremove vgsource/lv0

Questo è praticamente l'opposto della domanda. Il punto è spostare il volume invece di copiare i dati in uno nuovo.
XTL
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.