Soluzione 1:
Ho appena provato un aggiornamento basato su snapshot con Ubuntu. E sì, ho dovuto riavviare diverse volte. Prima rinomina l'originale root-lv in qualcos'altro, così puoi dare all'istantanea il nome originale (poiché un aggiornamento crea molti cambiamenti e le modifiche sono più veloci 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 tramite
# lvrename lvm root root-new
# lvrename lvm root-old root
# reboot
Se vuoi eliminare l'aggiornamento, esegui (dal vecchio sistema)
# lvremove lvm/root-new
Se vuoi confermare le modifiche, esegui (dal vecchio sistema)
# lvconvert --merge lvm/root-new
oppure, dal nuovo sistema
# lvrename lvm root root-new
# lvconvert --merge lvm/root-new
# lvrename lvm root-old root
seguito da un riavvio. Il sistema si rifiuterà di eseguire immediatamente l'unione, poiché i volumi sono aperti. Quindi l'unione verrà avviata durante l'avvio e proseguita mentre puoi già lavorare con il sistema.
Oh, a proposito:quando si passa da un sistema all'altro, ricordarsi di utilizzare il kernel appropriato. Dato che /boot non fa parte di lvm, il vecchio e il nuovo kernel verrebbero posizionati fianco a fianco.
Soluzione 2:
Ok, penso di averlo capito rileggendo l'HOWTO 3.8.
- Gli snapshot di sola lettura (come LVM1) contengono le differenze a livello di blocco dopo la creazione dello snapshot:l'originale viene comunque modificato, ma lo snapshot conserva una rappresentazione dell'originale. Sto leggendo da l'istantanea presenta i dati così come apparivano in quel momento.
- È possibile scrivere su istantanee di lettura-scrittura (impostazione predefinita in LVM2):sono un fork della partizione originale. Scrivi a l'istantanea non modifica l'originale.
Il modo in cui funziona un'istantanea è un insieme di modifiche a livello di blocco rispetto all'originale. Quindi, quando l'originale viene scritto, accadono le seguenti cose:
- Qualcosa tenta di scrivere sull'originale.
- L'originale viene letto e i blocchi dell'originale vengono copiati nell'istantanea.
- L'originale viene modificato.
- L'istantanea contiene le "differenze inverse" - le modifiche che rendono l'originale simile a quando è stata creata l'istantanea.
Quindi, buttare via l'istantanea non influirà affatto sull'originale, perché l'originale è stato modificato e l'istantanea conteneva solo un elenco di tali modifiche.
Risposta alla mia stessa 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 andranno bene.
Quindi:
- Se si scrive nello istantanea R/W punto di montaggio, conferma scrivendo l'istantanea sull'originale e ripristina buttando via l'istantanea.
- Se si scrive all'indirizzo originale punto di montaggio, conferma eliminando lo snapshot e ripristina scrivendo dallo snapshot 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.
Soluzione 3:
La funzionalità di unione di istantanee 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 (guarda la sezione 5, MD/DM) e al registro delle modifiche di LVM alla 2.0.58:ftp://sources.redhat.com/pub/lvm2/WHATS_NEW
Ma non posso ancora dirti come usarlo correttamente;-)
Soluzione 4:
LVM funziona a livello di blocco. Anche "non sa" cosa sia un filesystem. Quindi non puoi eseguire lo snapshot solo di determinate directory, a meno che non sia montato un file system da un diverso volume LVM.
Quando crei un'istantanea LVM, in realtà richiedi il duplicato "copia su scrittura" di un volume. Qualsiasi blocco che verrebbe modificato sul volume di cui è stata eseguita l'istantanea verrà prima memorizzato senza modifiche nello snapshot. Quindi per "confermare le modifiche" non devi fare nulla. Basta rimuovere il volume dell'istantanea.
Non so bene quale sia il modo consigliato per "ripristinare le modifiche", poiché non ho mai usato LVM in tale scenario, ma immagino che sia descritto bene nella documentazione di LVM da qualche parte. Qualunque cosa sia, probabilmente dovrai riavviare tutto ciò che è stato modificato, un riavvio potrebbe essere una buona idea.
Soluzione 5:
- Non c'è motivo di unire alcuni. Basta rimuovere l'istantanea, il LV di origine rimane modificato
- Unione necessaria per annullare le modifiche
lvconvert --merge <snapshot name>
- LVM funziona con dispositivi a blocchi. Qualsiasi modifica relativa a FS dovrebbe essere eseguita da utility speciali (xfs_growfs, e2fsck, ...) in base al tipo di FS
L'istantanea 'blocca' lo stato originale del LV. Rimuovere l'istantanea significa dimenticare quello stato. Merge snapshot significa tornare a quello stato
Ma all'interno di LVM salva i dati riscritti nello snapshot:assicurati che le dimensioni dello snapshot soddisfino la quantità prevista di modifiche su LV e snapshot