Avvertenza: ho implementato questa soluzione e funziona, ma i tempi di unione per tornare all'istantanea possono far sì che il processo di avvio impieghi molto tempo se sono state apportate grandi modifiche al sistema durante l'ultimo avvio. Durante questo periodo di attesa, potrebbe sembrare agli utenti che il sistema sia sospeso!
Attenzione, inoltre, che chiunque disponga di conoscenze sufficienti per montare l'istantanea, potrebbe apportare modifiche allo stato "bloccato". Ho approfittato di questa possibilità per aggiornare i sistemi "congelati", ma anche questo può aumentare il tempo necessario per unire (ripristinare) l'istantanea!
Istantanee LVM + cron + script = stato "congelato"
Di recente ho iniziato a scavare in LVM e mi è venuto in mente che si poteva creare in modo fattibile uno stato "congelato" su una macchina usando LVM e le sue capacità di istantanea. Naturalmente, questo metodo richiede un sistema configurato utilizzando LVM (o almeno LVM sulle partizioni da congelare).
Sommario:
- Installa il sistema su partizioni LVM riservando spazio sufficiente su un PV per un'istantanea
- Ottieni il sistema configurato nel modo desiderato.
- Creare un processo cron che viene eseguito come root all'avvio per unire l'istantanea e creare una nuova istantanea per sostituire quella unita
- Tutti i riavvii successivi tornano all'istantanea. Tutte le istantanee create vengono acquisite dal sistema nello stato in cui è stato creato.
- Come bonus aggiuntivo, l'istantanea può essere montata e modificata (a condizione che tu abbia i privilegi di root) e lo stato "congelato" può essere aggiornato, se necessario.
Prova del concetto: blocca tutto tranne una partizione da un'installazione pulita
L'installazione:
- Avvia da un disco / USB di Ubuntu live e scegli l'opzione "Prova Ubuntu senza installare". Questo è importante per la configurazione manuale delle partizioni con LVM
- Quando Ubuntu carica la partizione del disco usando lo strumento di tua scelta in modo che abbia una partizione che occupa l'intero spazio del disco. Ecco con cosa sto lavorando:
- Successivamente in un terminale impostare LVM su
/dev/sda1. Metterò la maggior parte del sistema su una singola partizione, ma non dovresti.
sudo pvcreate /dev/sda1
sudo vgcreate ubuntu-vg /dev/sda1
sudo lvcreate -n swap -L 1G ubuntu-vg
sudo lvcreate -n unfrozen -L 10G ubuntu-vg
sudo lvcreate -n root -l +50%free ubuntu-vg
- Ora, se dovessi essere eseguito
sudo vgsseguito da sudo lvs, dovresti essere in grado di vedere che la quantità di spazio libero rimasto nel gruppo di volumi "ubuntu-vg" (VFree nell'output vgs) è uguale alla quantità di spazio occupato dal volume logico "root "(LSize sotto lvs output). Nel mio caso, ho 506.44 g gratuiti in ubuntu-vg e la mia partizione di root è grande 506,44 g. Se lo spazio libero rimasto nel gruppo di volumi è uguale alla dimensione della partizione che voglio congelare, dovrei essere in grado di cancellare l'intera partizione ed essere ancora in grado di ripristinare con un riavvio. Lascia il resto dello spazio libero in ubuntu-vg per ora inutilizzato. Lo useremo più tardi.
- Ora installa Ubuntu usando il partizionamento manuale

- Al termine dell'installazione, andare avanti e riavviare nel sistema appena installato.
- Una volta avviato nel tuo nuovo sistema, configuralo in modo che sia esattamente come desideri che si avvii ogni volta che il computer si avvia.
- Se non si verificano modifiche accidentali all'istantanea e non si desidera visualizzare la partizione dell'istantanea nella barra dei menu ...
mkdir /steady
- Modifica
/etc/fstabaggiungendo (questa è tutta una riga) /dev/ubuntu-vg/steadystate /steady ext4 defaults,ro,nofail 0 1come ultima riga del file
- Poiché cose come gli aggiornamenti verranno spazzate via ad ogni riavvio, potresti volerle disattivare.
- Se hai una partizione non bloccata come la mia in / unfrozen, non dimenticare di renderla accessibile agli utenti che hanno bisogno di accedervi
- Una volta configurato il sistema esattamente come lo desideri, crea il seguente script (avrai bisogno dei privilegi di root) e salva come
/root/steadystate.shcon il tuo editor preferito. Si noti che se si modifica il nome del gruppo di volumi durante l'impostazione di LVM, è necessario aggiornarlo anche nello script seguente.
#!/bin/bash
LOG=/dev/kmsg
# wait for merge in progress
echo -n "Reverting to snapshot if present... " | tee -a $LOG
merging=1
while [ "$merging" == "1" ];
do
/usr/sbin/service lightdm stop #prevent the auto-login/login screen from loading
[ "$(sudo lvs -a | grep steadystate)" == "" ] && merging=0
sleep 1
done
# create snapshot
echo -n "Creating new snapshot... " | tee -a $LOG
/sbin/lvcreate -s -n steadystate -l +100%free /dev/ubuntu-vg/root
# make sure root comes online before trying to merge
while [ ! -e /dev/mapper/ubuntu--vg-root];
do
sleep .5;
done
echo -n "Scheduling reset to snapshot... " | tee -a $LOG
/sbin/lvconvert --merge /dev/ubuntu-vg/steadystate
echo -n "Starting lightdm... " | tee -a $LOG
/usr/sbin/service lightdm start
- Infine esegui
sudo crontab -e, seleziona un editor e inserisci @reboot /bin/bash /root/steadystate.shalla fine del file. Salva e chiudi ( Ctrl+ X; risposta Yper salvare)
- Riavvia e dovresti avere un sistema congelato ad eccezione della partizione montata su / unfrozen
Questo funziona perché l'istantanea viene creata all'avvio e anche se passiamo il comando per unire l'istantanea subito dopo, l'istantanea non può essere unita mentre il volume logico per root è attivo. Quindi rimanda l'azione di unione fino alla successiva attivazione / dev / ubuntu-vg / root che è al successivo riavvio. Questa azione verrebbe inoltre attivata se il sistema fosse avviato da una USB live.
Solo per i calci, sono entrato dopo un riavvio ed sudo apt remove --purge firefox* libreoffice-* unity*ho corso che normalmente non consiglierei di fare perché rimuove alcuni programmi utili e mette il sistema in uno stato che potrebbe non essere desiderabile!
Il sistema non si spegnerebbe nemmeno correttamente dalla GUI. Quindi, come si può risolvere questo problema? Reboot!
Al riavvio, tutto era tornato in ordine. Firefox, LibreOffice e Unity erano tutti al loro posto.
Ho anche provato a rimuovere Linux *. Ciò non gli consentì di avviare la macchina, tuttavia, il semplice avvio da un disco Ubuntu live sembrava aver avuto luogo l'unione. Il riavvio di nuovo ha lasciato il sistema nel suo stato "congelato"
Se si desidera essere in grado di apportare modifiche, è possibile (ri) montare l'istantanea con privilegi rw e quindi eseguire il chroot su di essa e apportare le modifiche che si desidera rimanere permanenti. Questo non è perfetto, ma è una prova del concetto.