Code: Select all
#! /bin/bash
Pfad=/backup
if ! test -d $Pfad
then
mkdir $Pfad
fi
cd $Pfad
if test -d 3
then
btrfs sub del 3
fi
if test -d 2
then
echo 2 wird nach 3 verschoben
mv 2 3
fi
if test -d 1
then
echo 1 wird nach 2 verschoben
mv 1 2
fi
btrfs sub snap -r / 1Solange das System noch läuft muss man diese Wiederherstellung nicht aufrufen. Man kann ja Dateien, die man gelöscht oder kaputt editiert hat, manuell aus dem Snapshot wiederherstellen. Wenn das System aber nicht mehr starten will, entweder weil ein Update in die Hose gegangen ist oder man emerge -C glibc gemacht hat, dann hilft folgendes Script. Das System wird auf den Stand von /backup/1 versetzt, mit Ausnahme von /usr/portage und /var/lib/layman. Die bleiben erhalten. Zum einen verhindern diese Ordner ja keinen Systemstart und wenn ein Update in die Hose gegangen ist, dann hat man genau diese Updates wieder vor der Nase und kann analysieren, an welchem es lag. Und alles, was man sonst noch so hatte, ist in /backup/Jetzt gespeichert. Wenn man Änderungen an world oder USE-Flags gemacht hat, dann kann man sich die Dateien aus diesem Ordner zurückkopieren.
Man startet dazu ein Rettungssystem, mountet sein System nach /mnt/gentoo und startet dieses Script. Aber aufpassen, man sollte es vorher sichern. Wenn man es gerade erst auf sein System kopiert hat und es sich noch nicht im /bakup/1 befindet, ist es nach der Wiederherstellung nicht mehr in $PATH vorhanden und befindet sich nur noch in /backup/Jetzt. Wenn man nicht daran denkt, ist es irgendwann ganz weg. Die Ordner werden mit reflink=auto kopiert, weil ich für /var/log cow abgeschaltet habe.
Ansonsten bitte noch mit Vorsicht anwenden, es muss noch ausführlich getestet werden. Eventuell haben sich noch Fehler versteckt. Und es funktioniert auch nur, wenn man vorher das oben aufgeführte Backup-Script ausgeführt hat.
Code: Select all
#! /bin/bash
Sicherung=backup/Jetzt
Backup=backup/1
cd /mnt/gentoo
#
# Testen, ob Backup vorhanden ist
if ! test -d $Backup
then
echo $Backup ist nicht vorhanden
exit
fi
#
# Ordner von alter Sicherung entfernen falls vorhanden
if test -d $Sicherung
then
if test -d $Sicherung/var/lib/machines
then
btrfs sub del $Sicherung/var/lib/machines
fi
btrfs sub del $Sicherung
fi
btrfs sub create $Sicherung
#
# Ordner in Jetzt sichern und aus 1 wiederherstellen
for Ordner in bin boot etc lib32 lib64 opt sbin
do
echo $Ordner wird wiederhergestellt
mv $Ordner $Sicherung/
cp -a --reflink=auto $Backup/$Ordner .
done
#
# Bei usr zusätzlich aktuelles portage zwischenspeichern und wiederherstellen
Ordner=usr
echo $Ordner wird wiederhergestellt
mv $Ordner/portage $Sicherung/
mv $Ordner $Sicherung/
cp -a --reflink=auto $Backup/$Ordner .
mv $Ordner/portage $Sicherung/$Ordner/
mv $Sicherung/portage $Ordner/
#
# Bei var zusätzlich aktuelles layman zwischenspeichern und wiederherstellen
# machines wird durch den Snapshot vom subvolume zum Ordner.
Ordner=var
echo $Ordner wird wiederhergestellt
mv $Ordner/lib/layman $Sicherung/
mv $Ordner $Sicherung/
cp -a --reflink=auto $Backup/$Ordner .
mv $Ordner/lib/layman $Sicherung/$Ordner/lib/
mv $Sicherung/layman $a/lib/
rmdir $Ordner/lib/machines
btrfs sub create $Ordner/lib/machines
chmod 700 $Ordner/lib/machines
#
# Sicher ist sicher...
echo Warten, bis alle Operationen abgeschlossen sind
btrfs sub sync /mnt/gentoo
btrfs file sync /mnt/gentoo

