Gestione delle istantanee LVM in LVM2

Istantanee LVM

Inizieremo ora a esaminare alcuni argomenti LVM2 più avanzati e il primo è la gestione delle istantanee LVM. Nel prossimo blog vedremo il Thin Provisioning in LVM. Gli snapshot LVM sono copie puntuali di volumi logici LVM. Sono efficienti nello spazio in quanto iniziano a non memorizzare dati, ma poiché i dati vengono modificati sul LV di origine, i dati originali vengono scritti nel volume di snapshot LVM. I casi d’uso per questo includono:

  • Backup: Gli snapshot LVM di per sé non sono un backup efficiente in quanto devono essere archiviati all’interno dello stesso gruppo di volumi. Tuttavia, le istantanee possono essere utilizzate per aumentare i backup. Basta creare un’istantanea del volume di destinazione e quindi eseguire il backup del volume di snapshot per superare eventuali problemi relativi alla concorrenza dei file durante il backup. Lo snapshot può essere eliminato al termine del processo di backup
  • Test and Destroy: gli snapshot LVM sono una copia in lettura / scrittura dell’LV originale. È possibile creare un LVM istantanee di un LV che contiene script complessi, modificare ansd testarli quanto si vuole e poi distruggere i dati quando avete finito. Il tutto senza influire sugli script originali.
  • Test di nuove distribuzioni software: L’installazione di una nuova versione del software può includere molte centinaia di file che si trovano in molte directory software. Se la posizione di destinazione per tutto il software è su un singolo volume logico LVM, possiamo creare un’istantanea prima di aggiornare il software. Se dopo aver testato il software non funziona nel modo desiderato. È un compito semplice ripristinare l’LV originale sullo snapshot. L’istantanea, ovviamente, contiene quella copia puntuale del volume di origine originale al momento in cui è stata scattata l’istantanea.

Segui il link qui sotto per scaricare la ‘Guida completa a LVM2 in Linux’, che costa solo £1.99! Una volta scaricato l’eBook può essere stampato se necessario.

Scarica eBook

Preparazione alla creazione di istantanee LVM

È necessario creare un’istantanea LVM nello stesso gruppo di volumi del LV di origine. Utilizzando la tecnologia CoW (Copy on Write), lo storage sottostante deve essere lo stesso. Consentire la lettura dei dati invariati nello snapshot dall’origine LV originale. Il nostro gruppo di volumi è pieno, quindi elimineremo il volume logico esistente e lo ricreeremo in una dimensione più piccola. Useremo anche due mountpoints, / mnt / original e / mnt / snap.

Dopo tutto questo lavoro, siamo tornati alla situazione in cui abbiamo un Volume logico appena formattato che abbiamo chiamato lv1. Questo è ora montato su / mnt / original ai fini della dimostrazione. Abbiamo creato lv1 a 600 MiB lasciando 392 MiB spazio libero nel gruppo di volumi vg1. Ricorda che ci occupiamo solo dello spazio libero nello stesso gruppo di volumi dei nostri Volumi logici. Lo snapshot deve essere creato nello stesso gruppo di volumi del sorgente LV. Se controlliamo l’output dal comando vgs possiamo vedere lo spazio libero disponibile:

# vgs VG #PV #LV #SN Attr VSize VFree vg1 2 1 0 wz--n- 992.00m 392.00m vg2 2 0 0 wz--n- 192.00m 192.00m

Questo comando, come abbiamo visto prima, è un ottimo modo per riassumere i gruppi di volumi. Per poter creare un’istantanea puntuale del Volume logico, lv1, dovremo aggiungere alcuni dati. Copieremo semplicemente il file / etc / services in / mnt / original.

 # cp /etc/services /mnt/original/ # wc -l /mnt/original/services 612 /mnt/original/services

Possiamo anche vedere che questo file, sul mio server Ubuntu, ha 612 linee. Ora abbiamo i dati quindi cerchiamo di crack su.

Creazione di istantanee LVM in LVM2

Le istantanee LVM sono, in sostanza, semplici volumi logici con alcune chicche extra imbullonate. Quindi, vengono creati usando il comando lvcreate e l’opzione-S. Abbiamo anche bisogno di specificare il volume di origine durante la creazione dello snapshot.

 # lvcreate -L 12m -s /dev/vg1/lv1 -n lv1_snap Logical volume "lv1_snap" created.

Dalle opzioni del comando, possiamo vedere che prima specifichiamo la dimensione per essere 12 MiB. Abbiamo solo bisogno di spazio sufficiente per memorizzare le modifiche che apportiamo alla fonte. Avremmo potuto riempire la fonte LV con 600 MiB di dati, ma se solo 12 MiB è probabile che cambi, abbiamo solo bisogno di un volume di snapshot 12 MiB. Dimensioniamo l’istantanea in modo che corrisponda alla dimensione delle modifiche che si verificheranno. L’opzione – s o-snapshot specifica il volume di origine da snapshot. Come prima l’opzione-n imposta il nome del LV che stiamo creando.L’istantanea è in lettura / scrittura, quindi può essere montata. Andiamo avanti e montarlo nella directory / mnt / snap:

# mount /dev/vg1/lv1_snap /mnt/snap/

Saremo in grado di vedere lo stesso contenuto in entrambe le directory anche se non sono state apportate modifiche. Le istantanee LVM si collegano ai dati originali finché non vengono modificati.

Quando guardiamo il dettaglio sia della sorgente che del volume dell’istantanea, sembrerà un po ‘ diverso. In primo luogo, il volume lv1_snap. L’istantanea LV.

# lvdisplay /dev/vg1/lv1_snap --- Logical volume --- LV Path /dev/vg1/lv1_snap LV Name lv1_snap VG Name vg1 LV UUID s8gBiX-IV1z-jiZK-q4dN-paG5-8mvq-TCQkuk LV Write Access read/write LV Creation host, time yogi, 2017-08-22 09:26:14 +0000 LV snapshot status active destination for lv1 LV Status available # open 1 LV Size 600.00 MiB Current LE 150 COW-table size 12.00 MiB COW-table LE 3 Allocated to snapshot 0.36% Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:3

Possiamo ricordare, spero che tu lo faccia, che abbiamo creato questo con una dimensione di 12 MiB. La dimensione LV, tuttavia, mostra come 600 MiB. La dimensione che vediamo è dell’originale o della fonte LV. La dimensione dell’istantanea mostra nella dimensione della tabella MUCCA. La copia su scrittura si verifica quando i dati vengono modificati nell’origine e i dati originali vengono copiati nel volume dello snapshot. Il volume snapshot elencherà sempre i file snapshot originali, indipendentemente dal fatto che siano stati modificati o meno. Alla creazione dello snapshot non ci sono modifiche CoW da memorizzare, quindi il valore allocato è molto basso da avviare e aumenterà man mano che vengono apportate modifiche ai dati di origine. Quando guardiamo i dettagli del display ora per il lv1 LV, troppo sarà un po ‘ diverso:

# lvdisplay /dev/vg1/lv1 --- Logical volume --- LV Path /dev/vg1/lv1 LV Name lv1 VG Name vg1 LV UUID dmVaWm-kA9V-xouM-OZBR-b7Id-aMUh-EWymB0 LV Write Access read/write LV Creation host, time yogi, 2017-08-21 18:51:57 +0000 LV snapshot status source of lv1_snap LV Status available # open 1 LV Size 600.00 MiB Current LE 150 Segments 2 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:0

Possiamo vedere che mostra come fonte dello snapshot per lv1_snap.

Modifica dei dati di snapshot LVM

Se ora apportiamo una modifica ai dati nel volume di origine, inizieremo a vedere una differenza nei dati nel volume di snapshot. Il volume dello snapshot manterrà i dati originali mentre il LV di origine manterrà le modifiche. Innanzitutto, aggiungeremo un nuovo file al volume di origine:

# cp /etc/hosts /mnt/original/

Ora possiamo vedere che il contenuto differisce per la fonte ai volumi snaphot

Possiamo anche vedere che iniziamo a consumare più spazio di MUCCA nel Volume logico. Tornando al lvdisplay per lv1_snap vedremo aumentare la percentuale Allocata allo snapshot.

# lvdisplay /dev/vg1/lv1_snap --- Logical volume --- LV Path /dev/vg1/lv1_snap LV Name lv1_snap VG Name vg1 LV UUID s8gBiX-IV1z-jiZK-q4dN-paG5-8mvq-TCQkuk LV Write Access read/write LV Creation host, time yogi, 2017-08-22 09:26:14 +0000 LV snapshot status active destination for lv1 LV Status available # open 1 LV Size 600.00 MiB Current LE 150 COW-table size 12.00 MiB COW-table LE 3 Allocated to snapshot 0.98% Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 252:3

Anche se non abbiamo modificato i dati esistenti, l’aggiunta di nuovi dati influirà anche sull’istantanea poiché il volume dell’istantanea deve mostrare i dati come era quando è stata scattata l’istantanea. Se necessario, dovremmo essere in grado di ripristinare l’originale ai dati snapshotted.

Successivamente, sovrascriveremo il file /etc/services originale:

# > /mnt/original/services

Il file / mnt / original / services sarà ora vuoto. Se controlliamo il file snapshot però, avrà ancora i dati. Usando il comando wc possiamo contare il numero di righe in ogni file:

 # wc -l /mnt/original/services /mnt/snap/services 0 /mnt/original/services 612 /mnt/snap/services 612 total

Naturalmente, ricontrollando l’output di lvdisplay per lv1_snap mostrerà che la percentuale allocata allo snapshot è aumentata con la modifica:

Allocated to snapshot 1.17%

Modifiche del volume per le istantanee LVM

Gli attributi sia per l’origine che per l’istantanea LVs cambiano quando viene creata l’istantanea. Possiamo vedere questo in dettaglio con il comando lvdisplay ma è meglio riassunto con il comando lvs:

Ci sono 10 attributi che leggiamo da sinistra a destra:

Per lv1 gli attributi letti:

  • Tipo di volume: Origine. La fonte di un’istantanea
  • Autorizzazioni: Scrivibile
  • Criterio di Allocazione: Ereditato dal Gruppo di Volume
  • Fixed minor numero non è impostato
  • Stato: È contrassegnata come attiva
  • Dispositivo: È aperto o montati
  • tipo di Target: Snapshot, ossia i partecipanti in un’istantanea

Per lv1_snap gli attributi leggere:

  • Tipo di Volume: volume Istantanea
  • Autorizzazioni: Scrivibile
  • Criterio di Allocazione: Ereditato dal Volume di Gruppo
  • Fixed minor numero non è impostato
  • Stato: È contrassegnata come attiva
  • Dispositivo: È aperto o montati
  • tipo di Target: Snapshot, ossia i partecipanti in un’istantanea

L’originale e target LVs deve essere nello stesso Gruppo di Volumi come abbiamo già accennato, ma non necessariamente condividono la stessa dispositivi all’interno di tali Gruppi di Volume. Questo è normalmente astratto da noi ma possiamo aggiungere l’opzione al comando lvs:

L’aggiunta di-o per le opzioni e i dispositivi + mostrerà i dispositivi sottostanti che compongono l’LV. Possiamo vedere che lv1 è più grande di / dev / sdc1 o / dev / sdc2 ed è esteso su entrambi. Considerando che, vg1_snap può utilizzare lo spazio rimasto in / dev / sdc2. Il numero tra parentesi dopo il nome del dispositivo indica il numero di estensione fisica che l’LV avvia dal dispositivo. Possiamo vedere che lv1 inizia dall’estensione 0 sia per / dev / sdc1 che per / dev / sdc2 e lv1_snap inizia dall’estensione 26 di /dev/sdc2. Per visualizzare tutte le opzioni disponibili con l’opzione –o, utilizzare il comando:

# lvs -o help

Poiché l’elenco è esteso, non abbiamo incluso l’output.

Oltre a guardare direttamente i Volumi Logici, possiamo anche usare il comando lsblk. Qui vedremo più cambiamenti di quanto forse pensi:

 # lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT loop1 7:1 0 100M 0 loop sdb 8:16 0 256M 0 disk loop0 7:0 0 100M 0 loop sdc 8:32 0 1000M 0 disk ├─sdc2 8:34 0 500M 0 part │ ├─vg1-lv1-real 252:1 0 600M 0 lvm │ │ ├─vg1-lv1 252:0 0 600M 0 lvm /mnt/original │ │ └─vg1-lv1_snap 252:3 0 600M 0 lvm /mnt/snap │ └─vg1-lv1_snap-cow 252:2 0 12M 0 lvm │ └─vg1-lv1_snap 252:3 0 600M 0 lvm /mnt/snap └─sdc1 8:33 0 499M 0 part └─vg1-lv1-real 252:1 0 600M 0 lvm ├─vg1-lv1 252:0 0 600M 0 lvm /mnt/original └─vg1-lv1_snap 252:3 0 600M 0 lvm /mnt/snap sda 8:0 0 9.8G 0 disk /

Abbiamo già familiarità con il dispositivo vg1-lv1 e i dispositivi vg1-lv1_snap. Questi sono stati i LVS sottostanti con cui abbiamo lavorato. Il numero principale del kernel o driver che viene utilizzato con LVM2 è 252. Quindi, vediamo questo per tutti i LV che abbiamo in atto. Il primo LV era vg1-lv1 quindi questo ha il numero minore di 0. Quando guardiamo vg1-lv1_snap, però, questo ha un numero minore di 3 che lo indica il 4 ° LV e non il 2 ° come potremmo aspettarci. Invece, vengono creati due LVS wrapper per l’istantanea, vg1-lv1-real e vg1-lv1_snap-cow. Questi sono gestiti internamente e non diventiamo coinvolti in questi oggetti che LVM2 utilizza per gestire il processo di snapshotting. Ogni LV che vediamo qui ha anche un dispositivo devmapper corrispondente. Se elenchiamo la directory / dev e il filer su dm- * possiamo mostrarli.

# ls /dev/dm-* /dev/dm-0 /dev/dm-1 /dev/dm-2 /dev/dm-3

Di nuovo. vediamo i dispositivi 4 non solo i 2 che potremmo aspettarci. Quindi in background LVM2 sta gestendo molto per noi e ci consente di accedere solo agli elementi di cui abbiamo bisogno.

Ripristino di un volume allo Snapshot

Uno scenario di ripristino con snapshot LVM consente di ripristinare lo snapshot.Se scopriamo che abbiamo bisogno di ripristinare l’LV originale all’istantanea puntuale, possiamo farlo. Ricorda che l’istantanea sarà una rappresentazione del volume originale al momento dell’istantanea. Possiamo farlo dopo che un aggiornamento del software è stato testato e la decisione è stata presa per ripristinare l’istantanea che avrebbe dovuto essere presa prima del processo di aggiornamento del software. Per garantire che possiamo vedere questo in tempo reale prima smonteremo entrambi i LVs:

# umount /mnt/{original,snap}

Se non chiudiamo i dispositivi dovremo attendere fino a quando l’originale LV, vg1 viene attivato. Spesso questo è su un riavvio. Con entrambi i volumi logici ora smontati e chiusi usiamo il comando lvconvert per unire l’istantanea con il genitore o l’origine. Questo sta ripristinando il volume logico di origine al contenuto dello snapshot. Lo snapshot viene rimosso automaticamente alla fine del processo.

# lvconvert --merge /dev/vg1/lv1_snap Merging of volume lv1_snap started. lv1: Merged: 99.2% lv1: Merged: 100.0%

A seconda della dimensione dei dati da unire e della velocità dei dischi, è possibile che ciò richieda del tempo. Si utilizza l’opzione-b per lo sfondo del processo.

Se ora montiamo di nuovo lv1 e controlliamo il contenuto. Ci mancherà il file hosts che è stato aggiunto dopo l’istantanea è stata scattata. Il file dei servizi ora abbiamo il contenuto che abbiamo sovrascritto.

 # mount /dev/vg1/lv1 /mnt/original/ # ls /mnt/original/ lost+found services # wc -l /mnt/original/services 612 /mnt/original/services

Test e sviluppo

Un altro utilizzo per le istantanee LVM è in un ambiente di test. Se si preferisce lavorare direttamente con i dati snapshotted allora si può. Quando hai finito devi solo smontare lo snapshot LV ed eliminarlo. Il LV originale sottostante rimane invariato. Questo è grande dove si vuole forse lavorare su script senza effettuare gli script di produzione originali.

Il processo è praticamente lo stesso, ma ora lavoriamo solo con la directory /mnt/snap. Segue un riepilogo dei comandi:

Estensione della dimensione dello Snapshot

Quando creiamo un volume di snapshot, dovremmo impostare una dimensione che riteniamo adeguata per memorizzare tutte le modifiche apportate al LV originale mentre lo snapshot è a posto. Tuttavia, è possibile espandere automaticamente un volume di snapshot, se necessario.

È importante notare che se un’istantanea si riempie completamente, l’istantanea viene automaticamente eliminata.

Le impostazioni predefinite non consentono la crescita automatica delle istantanee. Dobbiamo permetterlo. La configurazione di LVM2 è in / etc / lvm / lvm.conf. Se cerchiamo le impostazioni efficaci usando grep:

 # grep -E '^\s*snapshot_auto' /etc/lvm/lvm.conf snapshot_autoextend_threshold = 100 snapshot_autoextend_percent = 20

Avere snapshot_autoextend_threshold impostato al 100% significa che l’istantanea non crescerà mai. Non appena raggiungiamo la soglia del 100%, l’istantanea viene eliminata. Se abbiamo bisogno di autoextend abilitato, considera di impostarlo su qualcosa come 70. Nel qual caso, quando l’istantanea diventa piena del 70%, la dimensione verrà aumentata. La dimensione dell’aumento controllato da snapshot_autoexend_percent. Il valore predefinito è impostato su 20%, il che significa che la dimensione aumenterà del 20% della dimensione corrente ogni volta che è richiesta la crescita.

Write a Comment

Il tuo indirizzo email non sarà pubblicato.