Commettere o ripristinare un'istantanea LVM Linux?


16

Sto per eseguire un aggiornamento sperimentale sul mio server CentOS 5. Se l'aggiornamento non riesce, voglio essere in grado di eseguire il backup delle modifiche al filesystem. Questo scenario sembra simile all'esempio nella Sezione 3.8 dell'LVM HOWTO per gli snapshot di lettura / scrittura LVM2 - ma l'esempio è piuttosto carente nell'effettivo how-to.

  1. Come farei il commit delle modifiche, fondendole nuovamente nella partizione originale?

  2. Come ripristinare le modifiche, riportando il filesystem al suo stato originale? Devo supporre che dovrò riavviare diversi servizi, se non riavviare completamente?

  3. È possibile eseguire l'istantanea solo di determinate directory su una partizione o è un'operazione a livello di partizione?

Risposte:


11

La funzionalità di unione di snapshot LVM2 / device mapper è disponibile se si esegue Linux 2.6.33+ e si utilizza LVM 2.0.58+:

lvconvert --merge

Vedi questo post: http://www.jonnor.com/2010/02/lvm-snapshot-merging-avaliable/

Fa riferimento a http://kernelnewbies.org/Linux_2_6_33 (vedi sezione 5, MD / DM) e al log delle modifiche LVM al 2.0.58: ftp://sources.redhat.com/pub/lvm2/WHATS_NEW

Ma non posso ancora dirti come usarlo correttamente ;-)


dmsetup targetsdovrebbe mostrare snapshot-merge se questo è il caso del comando merge, applicato allo snapshot-lv tornerà allo stato in cui è stato acquisito lo snapshot.
Nils,

L'OP sembra confuso riguardo al fatto di apportare modifiche tramite una sorta di fase di unione. Le modifiche vengono eseguite man mano che l'istantanea aumenta di dimensioni. L'istantanea (delle modifiche) è l'informazione necessaria per eseguirne il backup tramite lvconvert --merge. Se l'OP è soddisfatto delle sue modifiche, può eliminare l'istantanea tramite lvremove.
Vince,

20

Ho appena provato un aggiornamento basato su snapshot con Ubuntu. E sì, ho dovuto riavviare più volte. Innanzitutto rinominare l'originale root-lv in qualcos'altro, in modo da poter assegnare allo snapshot il nome originale (poiché un aggiornamento crea molte modifiche e le modifiche sono più rapide sull'istantanea che sull'originale):

 # lvrename lvm root root-old
 # lvcreate -n root -s lvm/root-old -L 10G

La dimensione dovrebbe essere scelta in modo appropriato. Quindi riavvia, quindi il "nuovo" lvm / ubuntu viene montato come root e puoi eseguire l'aggiornamento. Ora puoi testare la nuova versione e persino passare al vecchio sistema

 # lvrename lvm root root-new
 # lvrename lvm root-old root
 # reboot

Se desideri interrompere l'aggiornamento, esegui (dal vecchio sistema)

# lvremove lvm/root-new

Se vuoi eseguire il commit delle modifiche, esegui (dal vecchio sistema)

# lvconvert --merge lvm/root-new

o, dal nuovo sistema

# lvrename lvm root root-new
# lvconvert --merge lvm/root-new
# lvrename lvm root-old root

seguito da un riavvio. Il sistema rifiuterà di eseguire immediatamente l'unione, poiché i volumi sono aperti. Quindi l'unione verrà avviata durante l'avvio e continuerà mentre è già possibile lavorare con il sistema.

Oh, e comunque: quando si cambia tra i sistemi, ricordarsi di usare il kernel appropriato. Poiché / boot non fa parte di LVM, i kernel vecchi e nuovi verrebbero posizionati fianco a fianco.


Grazie per la tua risposta. Ho appena riprodotto la tua procedura in una macchina virtuale CentOS 7 e ha funzionato come un fascino. Dopo aver ripristinato la mia macchina virtuale nel mezzo del processo di fusione, il sottosistema LVM l'ha ripresa mentre il sistema stava ancora accedendo ai file aggiornati.
Anderson Medeiros Gomes il

Parte di questa risposta sembra suggerire di apportare modifiche tramite lvconvert --merge. Man mano che l'istantanea aumenta di dimensioni, vengono apportate anche modifiche. Un lvconvert --merge ripristina (annulla) le modifiche usando le informazioni dell'istantanea.
Vince,

10

Ok, penso di averlo capito rileggendo l'HOWTO 3.8.

  • Le istantanee di sola lettura (come LVM1) contengono le differenze a livello di blocco dopo la creazione dell'istantanea: l'originale viene comunque modificato, ma l'istantanea mantiene una rappresentazione dell'originale. La lettura dalle snapshot presenta i dati come si presentava nel momento indicato.
  • Le istantanee di lettura / scrittura (predefinite in LVM2) possono essere scritte in: sono un fork della partizione originale. Scrivendo per la fotografia non cambia l'originale.

Il modo in cui funziona un'istantanea è una serie di modifiche a livello di blocco rispetto all'originale. Quindi, quando l'originale viene scritto, accadono le seguenti cose:

  1. Qualcosa prova a scrivere sull'originale.
  2. L'originale viene letto e i blocchi dell'originale vengono copiati nell'istantanea.
  3. L'originale viene cambiato.
  4. Lo snapshot contiene le "differenze inverse": le modifiche che rendono l'originale simile a quando è stato creato lo snapshot.

Quindi, eliminare l'istantanea non avrà alcun effetto sull'originale, poiché l'originale è stato modificato e l'istantanea contiene solo un elenco di tali modifiche.

Rispondere alla mia domanda:

Crea una nuova istantanea con LVM. Se l'aggiornamento può essere configurato per scrivere nel punto di montaggio dello snapshot, utilizzare uno snapshot R / W. Altrimenti, RO o R / W lo faranno.

Poi:

  • Se si scrive nel punto di montaggio dell'istantanea S / N , eseguire il commit scrivendo l'istantanea sull'originale e ripristinare annullando l'istantanea.
  • Se si scrive sul punto di montaggio originale , eseguire il commit eliminando l'istantanea e ripristinare scrivendo dall'istantanea all'originale.

Non ho ancora trovato uno strumento specifico per eseguire questa unione e, dato che il mio scenario non è esattamente l'uso previsto delle istantanee, potrebbe non essercene uno. Sembra un lavoro per rdiff.


Non è ancora disponibile uno strumento di unione LVM. È stato in lavorazione, ma non credo sia completo.
Ignacio Vazquez-Abrams,

lo strumento di unione esiste ora (almeno su Ubuntu Trusty): lvconvert --merge <snapshot-name>"ripristinerà" il disco originale su quella istantanea ed eliminerà quella istantanea. Ovviamente puoi ripristinarlo rapidamente subito.
dpb,

3

LVM funziona a livello di blocco. Persino "non sa" cos'è un filesystem. Quindi non è possibile eseguire l'istantanea solo di determinate directory, a meno che non sia montato un file system da un diverso volume LVM.

Quando si esegue un'istantanea LVM, si richiede in realtà il duplicato 'copia in scrittura' di un volume. Qualsiasi blocco che verrebbe modificato sul volume dell'istantanea verrà prima memorizzato non modificato nell'istantanea. Quindi, per "eseguire le modifiche" non devi fare nulla. Basta rimuovere il volume dell'istantanea.

Non so esattamente quale sia il modo consigliato di "annullare le modifiche", dato che non ho mai usato LVM in tale scenario, ma immagino che sia stato descritto bene nella documentazione LVM da qualche parte. Qualunque cosa tu sia, probabilmente dovrai riavviare tutto ciò che è stato modificato, un riavvio potrebbe essere una buona idea.


2
  1. Non c'è motivo di unire alcuni. Basta rimuovere l'istantanea, l'origine LV rimane modificata
  2. L'unione era necessaria per ripristinare le modifiche lvconvert --merge <snapshot name>
  3. LVM funziona con dispositivi a blocchi. Qualsiasi modifica relativa a FS deve essere effettuata da utility speciali (xfs_growfs, e2fsck, ...) in base al tipo di FS

Snapshot 'congela' lo stato originale di LV. Rimuovere l'istantanea significa dimenticare quello stato. Unire snapshot significa tornare a quello stato

Ma all'interno di LVM salva i dati riscritti nell'istantanea: assicurati che le dimensioni dell'istantanea soddisfino la quantità prevista di modifiche su LV e l'istantanea


In realtà, lo snapshot non congela nulla. Registra le modifiche in un posto aggiuntivo in modo che possano essere ripristinate in seguito, se lo si desidera.
Vince,

0

La documentazione è confusa. Mi sembra che lvcreate --merge significhi annullare tutte le modifiche e lvremove significa eseguire il commit delle modifiche. La distinzione sta nel modo in cui lo usi.

Nella maggior parte dei casi, si sta semplicemente utilizzando l'istantanea come copia temporizzata di sola lettura del volume live e il volume live continua a cambiare. In questo caso, se si unisce, logicamente ciò significherebbe che si sovrascriverà il volume live con la copia congelata, o in altre parole, unione significa modifiche di rollback e rimozione significa modifiche di commit.

Se si scrive sull'istantanea (una nuova opzione con LVM2), che non sembra il comportamento predefinito, e probabilmente richiede la modifica della configurazione altrove per fare in modo che le applicazioni scrivano sull'istantanea anziché sul volume originale, il contrario sarebbe vero.

Si prega di fare attenzione quando si ha a che fare con le istantanee, poiché alcune persone presumono che intendiate usarle in un modo e vi daranno istruzioni che potrebbero distruggere il vostro sistema se operate sotto il presupposto opposto!


Scrivi all'istantanea semplicemente montando l'istantanea; ciò che viene montato dove ha poco a che fare con i valori predefiniti di LVM - non importa molto di cosa esattamente fai con ogni volume logico, che si tratti di un'istantanea o meno, tiene semplicemente traccia dell'apertura o meno.
Josip Rodin,
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.