Warnung: Ich habe diese Lösung implementiert und sie funktioniert, aber die Zusammenführungszeiten, um zum Snapshot zurückzukehren, können dazu führen, dass der Startvorgang lange dauert, wenn beim letzten Start große Änderungen am System vorgenommen wurden. Während dieser Wartezeit kann es für Benutzer so aussehen, als ob das System hängt!
Beachten Sie auch, dass jeder, der über ausreichende Kenntnisse zum Mounten des Snapshots verfügt, Änderungen am Status "Eingefroren" vornehmen kann. Ich habe diese Möglichkeit genutzt, um "eingefrorene" Systeme zu aktualisieren, aber auch dies kann die Zeit verlängern, die zum Zusammenführen (Zurücksetzen) des Snapshots benötigt wird!
LVM-Snapshots + cron + script = "eingefroren"
Ich habe vor kurzem angefangen, mich mit LVM zu beschäftigen, und mir ist aufgefallen, dass man mit LVM und seinen Snapshot-Funktionen auf einem Computer einen "eingefrorenen" Zustand erzeugen kann. Natürlich erfordert diese Methode ein System, das mit LVM konfiguriert ist (oder zumindest LVM auf den Partitionen, die eingefroren werden sollen).
Zusammenfassung:
- Installieren Sie das System auf LVM-Partitionen und reservieren Sie auf einer PV genügend Speicherplatz für einen Snapshot
- Konfigurieren Sie das System so, wie Sie es möchten.
- Erstellen Sie einen Cron-Job, der beim Booten als Root ausgeführt wird, um den Snapshot zusammenzuführen, und erstellen Sie einen neuen Snapshot, um den zusammengeführten zu ersetzen
- Alle aufeinanderfolgenden Neustarts werden auf den Snapshot zurückgesetzt. Alle erstellten Snapshots werden vom System in dem Zustand erstellt, in dem Sie sie erstellt haben.
- Als zusätzlichen Bonus kann der Snapshot gemountet und geändert werden (vorausgesetzt, Sie haben Root-Rechte) und der Status "eingefroren" kann bei Bedarf aktualisiert werden.
Proof of Concept: Frieren Sie alles außer einer Partition aus einer Neuinstallation ein
Die Installation:
- Booten Sie von einer Live-Ubuntu-Disc / USB und wählen Sie die Option "Ubuntu ohne Installation testen". Dies ist wichtig für die manuelle Konfiguration von Partitionen mit LVM
- Wenn Ubuntu eine Partition lädt, partitionieren Sie Ihre Festplatte mit dem Tool Ihrer Wahl, sodass eine Partition den gesamten Speicherplatz des Laufwerks einnimmt. Hier ist, womit ich arbeite:
- Als nächstes in einem Terminal LVM einrichten
/dev/sda1
. Ich werde den größten Teil des Systems auf eine einzelne Partition stellen, aber das müssten Sie nicht.
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
- Wenn Sie nun ausführen,
sudo vgs
gefolgt von sudo lvs
, sollten Sie in der Lage sein zu sehen, dass die Menge an freiem Speicherplatz in der Datenträgergruppe "ubuntu-vg" (VFree unter vgs output) gleich der Menge an Speicherplatz ist, die vom Stamm des logischen Datenträgers "root" belegt wird "(LSize unter lvs Ausgabe). In meinem Fall habe ich 506,44 g frei in Ubuntu-vg und meine Root-Partition ist 506,44 g groß. Wenn der in der Datenträgergruppe verbleibende freie Speicherplatz der Größe der Partition entspricht, die ich einfrieren möchte, sollte ich in der Lage sein, die gesamte Partition zu löschen und sie dennoch mit einem Neustart wiederherzustellen. Lassen Sie den Rest des freien Speicherplatzes in Ubuntu-VG vorerst ungenutzt. Wir werden es später verwenden.
- Installieren Sie nun Ubuntu mithilfe der manuellen Partitionierung
- Wenn die Installation abgeschlossen ist, starten Sie das neu installierte System neu.
- Konfigurieren Sie das neue System nach dem Start so, dass es genau so ist, wie Sie es möchten, wenn der Computer jedes Mal gestartet wird.
- Wenn Sie nicht versehentlich Änderungen am Snapshot vornehmen und nicht möchten, dass die Snapshot-Partition in der Menüleiste angezeigt wird ...
mkdir /steady
- Bearbeiten Sie
/etc/fstab
durch Hinzufügen (dies ist alles eine Zeile) /dev/ubuntu-vg/steadystate /steady ext4 defaults,ro,nofail 0 1
als letzte Zeile der Datei
- Da Dinge wie Updates bei jedem Neustart weggeblasen werden, möchten Sie sie möglicherweise deaktivieren.
- Wenn Sie eine nicht gefrorene Partition wie meine bei / unfrozen haben, vergessen Sie nicht, sie Benutzern zugänglich zu machen, die Zugriff darauf benötigen
- Wenn Sie das System genau so konfiguriert haben, wie Sie es möchten, erstellen Sie das folgende Skript (Sie benötigen Root-Berechtigungen) und speichern Sie es wie
/root/steadystate.sh
bei Ihrem bevorzugten Editor. Beachten Sie, dass Sie den Namen der Datenträgergruppe beim Einrichten von LVM auch im folgenden Skript aktualisieren müssen, wenn Sie ihn geändert haben.
#!/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
- Zum Schluss ausführen
sudo crontab -e
, einen Editor auswählen und @reboot /bin/bash /root/steadystate.sh
am Ende der Datei einfügen. Speichern und schließen ( Ctrl+ X; Yzum Speichern antworten )
- Starten Sie neu, und Sie sollten ein System haben, das eingefroren ist, mit Ausnahme der Partition, die bei / unfrozen bereitgestellt wird
Dies funktioniert, weil der Snapshot beim Booten erstellt wird und obwohl wir den Befehl zum Zusammenführen des Snapshots direkt danach übergeben, kann der Snapshot nicht zusammengeführt werden, solange das logische Volume für root aktiv ist. Daher wird die Zusammenführungsaktion auf das nächste Mal verschoben, wenn / dev / ubuntu-vg / root beim nächsten Neustart aktiviert wird. Diese Aktion wird auch ausgelöst, wenn das System von einem Live-USB-Gerät gestartet wird.
Nur zum Spaß ging ich nach einem Neustart rein und lief, sudo apt remove --purge firefox* libreoffice-* unity*
was ich normalerweise nicht empfehlen würde, da es einige nützliche Programme entfernt und das System in einen möglicherweise weniger wünschenswerten Zustand versetzt!
Das System würde nicht einmal ordnungsgemäß über die GUI heruntergefahren. Wie behebt man das? Neustart!
Nach dem Neustart war alles wieder in Ordnung. Firefox, LibreOffice und Unity waren alle wieder da, wo sie hingehörten.
Ich habe auch versucht, Linux * zu entfernen. Dies ließ den Computer nicht booten, aber das einfache Booten von einer Live-Ubuntu-Festplatte schien die Zusammenführung zu bewirken. Durch einen erneuten Neustart wurde das System im "eingefrorenen" Zustand belassen
Wenn Sie Änderungen vornehmen möchten, können Sie den Snapshot mit rw-Berechtigungen (erneut) bereitstellen, ihn dann chrooten und alle Änderungen vornehmen, die dauerhaft bleiben sollen. Dies ist nicht fehlerfrei, aber es ist ein Proof of Concept.