GNU/Linux >> Linux Esercitazione >  >> Linux

Esiste un modo semplice per spostare/copiare un volume logico da un gruppo di volumi a un altro? (LVM2)

Se puoi fare in modo che il volume logico si trovi su un sottoinsieme separato di volumi fisici dal resto del gruppo di volumi di origine (lvconvert sourcevg/sourcelv /dev/pv1 ... può aiutare), puoi usare vgsplit per dividere lv in un nuovo vg e vgmerge per unire il nuovo vg nel target vg.

Sebbene LVM abbia una funzione di mirroring, non puoi (sensatamente) usarla per fare una copia tra gruppi di volumi, perché entrambe le gambe del mirror devono vivere sullo stesso vg e l'associazione non può essere interrotta.

Puoi copiare un volume LVM su un altro nello stesso modo in cui copi qualsiasi volume su un altro:crea un lv di destinazione della dimensione appropriata, quindi copia i contenuti con dd if=/dev/sourcevg/sourcelv of=/dev/targetvg/targetlv bs=4M . Se il volume di origine è attivo, puoi sfruttare LVM per creare una copia coerente:prima scatta un'istantanea del lv di origine con lvcreate -s , quindi copia lo snapshot.


pvmove -n lvol1 /dev/sdb1 /dev/sdc1

pvmove può spostare i dati tra i volumi fisici:Guida dell'amministratore di LVM


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 fai 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 gruppi di volumi vg1 e vg2 su /dev/loop1 e /dev/loop2 rispettivamente.

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

Crea volumi logici lv1 e lv2 su 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 su lv1 in modo da poter successivamente verificare che la copia sia stata creata correttamente. Crea vg1 inattivo.

vgchange -a n vg1

Eseguire il comando di unione in modalità test. Questo unisce 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 crea una coppia di mirror RAID 1 da lv1 utilizzando lvconvert . L'argomento <> indica lvconvert per fare in modo che la copia specularelv1_copy 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

Crea 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

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:

Logical volumes in `vg1` must be inactive

E su split:

Logical volume `vg2/lv1` must be inactive.

Linux
  1. Come spostare tutti i file (inclusi quelli nascosti) da una directory all'altra?

  2. Come copiare le impostazioni da una macchina all'altra?

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

  4. Come copiare i primi 10 file più recenti da una directory all'altra?

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

Come copiare elementi da un DynamoDB a un'altra tabella DynamoDB utilizzando Python su AWS

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

Come copiare o clonare i permessi da un file all'altro su Linux

Linux:spostare un volume logico da un gruppo di volumi a un altro?

Come copiare un file da un'altra directory a quella corrente?

Copia file di grandi dimensioni da un server Linux a un altro