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
, lvconvert
e vgsplit
. Poiché una mossa è una combinazione di una copia e di un'eliminazione, questo funzionerà anche per una mossa.
In alternativa, puoi usare pvmove
solo per spostare il volume.
Segue una sessione di esempio completa e autonoma che utilizza dispositivi loop
lvconvert
.
Riepilogo: creiamo un gruppo di volumi vg1
con volume logico lv1
e vg2
con lv2
e realizziamo una copia di lv1
in 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
Creare gruppi di volumi vg1
e vg2
su /dev/loop1
e /dev/loop2
rispettivamente.
vgcreate vg1 /dev/loop1
vgcreate vg2 /dev/loop2
Creare volumi logici lv1
e lv2
on vg1
e vg2
rispettivamente.
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 in lv1
modo da poter in seguito verificare che la copia sia stata creata correttamente. Rendi vg1
inattivo.
vgchange -a n vg1
Esegui il comando di unione in modalità test. Questo si fonde lv1
in lv2
.
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 lv1
dall'uso lvconvert
. Il <> argomento dice lvconvert
di fare il copia speculare
lv1_copy
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
inattivo.
vgchange -a n vg2
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, vgmerge
si rifiuterà di procedere.
3) In unione:
Logical volumes in `vg1` must be inactive
E su split:
Logical volume `vg2/lv1` must be inactive.