GNU/Linux >> Linux Esercitazione >  >> Linux

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

Un gruppo di volumi è costituito da interi volumi fisici. Un volume fisico è costituito da molte estensioni (un'estensione è generalmente di 4 MB); ogni estensione può appartenere a un volume logico diverso. Per trasferire un volume logico a un gruppo diverso, non puoi trasferire semplicemente le estensioni, perché 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 di origine al VG di destinazione, con vgsplit comando. Puoi specificare quali PV vuoi trasferire o quale LV (ma solo uno alla volta). Se specifichi un LV, esso e gli altri LV nel VG di origine devono trovarsi 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 pvmove prima di fare in modo che i volumi logici che vuoi spostare siano su PV separati.

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


A partire da LVM in Debian stretch (9.0), vale a dire 2.02.168-2, è possibile eseguire una copia di un volume logico attraverso i gruppi di volumi utilizzando una combinazione di vgmerge , lvconvert e vgsplit . Poiché uno spostamento è una combinazione di una copia e di un'eliminazione, funzionerà anche per uno spostamento.

In alternativa, puoi usare pvmove per spostare solo il volume.

Una sessione di esempio completa e autonoma che utilizza dispositivi loop e lvconvert segue.

Riepilogo:creiamo il gruppo di volumi vg1 con volume logico lv1 e vg2 con lv2 e crea una copia di lv1 in vg2 .

Crea file.

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

Imposta i dispositivi di loop sui file.

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

Crea volumi fisici sui dispositivi loop (inizializza i dispositivi loop per l'utilizzo da parte di LVM).

pvcreate /dev/loop1 /dev/loop2

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

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

Crea 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

Eseguire il comando di unione in modalità test. Questo fonde 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 crea una coppia di mirror RAID 1 da lv1 utilizzando lvconvert . Il dest-pv argomento dice lvconvert per fare in modo che la 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 dividi 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/lv1 inattivo.

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

Output risultante:

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

NOTE:

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) All'unione, volumi logici in vg1 deve essere inattivo. E su volumi logici divisi in vg2 appartenente a vg1 deve essere inattivo. Nel nostro caso, questo è lv1 .


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 va bene, rimuovi la fonte

lvremove vgsource/lv0

Linux
  1. CentOS / RHEL:sposta un volume fisico da un gruppo di volumi esistente a un altro gruppo di volumi

  2. CentOS / RHEL:come spostare un gruppo di volumi da un sistema all'altro

  3. Come spostare lo scambio dalla partizione del disco al volume LVM in Linux

  4. Come spostare (e sovrascrivere) tutti i file da una directory all'altra?

  5. Come copiare i commit da un repository Git a un altro?

Reptyr:sposta un processo in esecuzione da un terminale all'altro senza chiuderlo

Gestione del volume logico

Come spostare gli account da un server cPanel a un altro server cPanel?

Come copiare una tabella da un database mysql a un altro database mysql

Come trovare parole da un file in un altro file?

Come inoltrare una porta da una macchina all'altra?