[HowTo]Rollback mit btrfs von Hand

Difficulty: ★★☆☆☆ :de: :uk:

Warum ein Rollback ?
  • Manjaro bootet nicht mehr in die grafische Oberfläche
  • Das letzte Update hat ein Programm beschädigt das du brauchst

Jetzt macht sich btrfs mit einem guten Layout und snapper bezahlt. Bitte lies die ganze Anleitung bis zum Ende durch bevor du beginnst.
Für einen Rollback sind nur wenige Schritte nötig:

Ein Rettungs-Manjaro booten

Entweder von CD oder von einem USB-Stick oder woanders her . Auf keinen Fall das btrfs-Volume benutzen, das wir reparieren wollen. Falls die notwendigen Programme nicht da sind, nachinstallieren mit:

pamac install btrfs-progs mc gparted
  • gparted - Um eine Übersicht mit den Device-namen der Laufwerke zu bekommen
  • btrfs-progs - Zum Erzeugen und Auflisten von Snapshots
  • mc - Zum kontrollieren was jeweils auf dem Volume passiert

:warning: Das folgende ist keine Spielwiese für Experimente. Die Befehle erfordern es als root zu arbeiten, und das nicht ohne Grund. Bitte denk daran jeden Befehl 3 mal auf Tippfehler zu kontrollieren. Das geht alles ganz einfach. Aber es greift eben tief ins System ein. Keine Angst. Fehler lassen sich reparieren. Aber das kostet unnötig Zeit und Nerven.

Also 2(!) Terminals aufmachen und in jedem root werden

sudo su
Wo liegt der "gute" Snapshot ?

Erstmal mit gparted die Platten anschauen und das device mit dem btrfs-Dateisystem suchen, das den Rollback bekommen soll. Dann dieses Volume im 1.Terminal mounten:

mkdir /mnt/ROOT; cd /mnt/ROOT

Mein btrfs Volume ist /dev/nvme0n1p3 Bitte im folgenden Befehl dein device einsetzen !

mount -t btrfs -o subvol=/ /dev/nvme0n1p3 /mnt/ROOT

Ab jetzt kann man im 2.Terminal mc starten und dort alles sehen was wir machen. Dort ist auch das layout des btrfs-Volume zu sehen.

cd /mnt/ROOT; mc

In meinem Layout liegt das system unter @ und die Snapshots unter @snapshot. Wir suchen den Snapshot, dessen Timestamp so liegt, dass das System zu diesem Zeitpunkt noch OK war. Keine Angst, die Daten von danach gehen nicht verloren. Bei mir ist das @snapshots/18330/snapshot

Den kaputten Systemzustand sichern

Mein bootendes system liegt jeweils unter @ , meine Snapshots unter @snapshots . Das @ ist kaputt und muß weggeräumt werden. (rw-snapshots lassen sich verschieben, und @ ist ein rw-Snapshot) Ich geh im rechten Fenster TAB in mc in das “Verzeichnis” @snapshots , dann TAB im linken Fenster mit F6 den “@” verschieben und dabei in “kaputt1” umbenennen. Oder im 1.Terminal:

mv /mnt/ROOT/@ /mnt/ROOT/@snapshots/kaputt1

Mit mc lässt sich wunderbar kontrollieren wie das klappt.

Den ausgewählten Snapshot zum booten herrichten

Das system braucht zum Booten einen rw-Snapshot. Aber die Snapshots die snapper anfertigt sind nicht ohne Grund “readonly”. Wir müssen also von dem vorhanden Snapshot einen neuen rw-Snapshot anfertigen.

btrfs subvolume snapshot /mnt/ROOT/@snapshots/18330/snapshot /mnt/ROOT/@

Diesen Snapshot machen wir jetzt noch zum default

btrfs subvolume set-default /mnt/ROOT/@

Wieder mit mc kontrollieren ! Dann mc beenden.

umount /mnt/ROOT

FERTIG

Wenn du den richtigen Snapshot ausgewählt hast bootet das system. Ich musste das ganze nochmal mit dem Snapshot 18347 wiederholen :wink:

Aufräumen

Einige Tage nach dem Rollback muss man noch den nun unnötigen Snapshot mit dem kaputten Dateisystem entfernen. Der heißt @snapshots/kaputt1 Das kann aus dem laufenden system heraus geschehen. (btrfs ist großartig)

Diese Anleitung setzt voraus, dass sich das Verzeichnis (/boot) mit dem Kernel (der ja beim Update geändert werden kann) auf dem btrfs-Volume befindet. Damit ist sichergestellt, dass in jedem Snapshot, dazu passende kernel, initramfs und module vorhanden sind. Bei einem getrennten /boot -Laufwerk (wie früher üblich) kann ein Rollback schwierig werden.

Du kannst auch versuchen den Zustand der Bootdateien zu prüfen. Eventuell gibt es dann einen Weg das zu reparieren. maxi kann bei der Bestandsaufnahme helfen.

Wenn das nicht gelingt, folge dem Link um wenigstend die Daten zu retten:

Hat es geklappt ?
  • Mein Rollback ist gelungen :grinning:
  • Ich konnte zumindest meine Daten retten :sweat_smile:
  • Ich hab aufgegeben :cry:
  • Ich bin dabei, und noch nicht fertig

0 voters

1 Like

Falls man mit GRUB-BTRFS gearbeitet hat geht auch folgende Alternative:

  1. mit GRUB in einen Snapshot booten, das komplette System wird also ins GUI eines readonly-Snapshot booten
  2. alle vorher beschädigte Funktionen prüfen
  3. Terminal öffnen
  4. manuelles Rollback wie oben gezeigt aber jetzt vom gebooteten ro-Snapshot nach @

Man benötigt also nur das normale System von dem man sonst auch bootet. Je nach Setup muß man unter Umständen noch weitere Rollbacks anderer SubVolumes durchführen, zB. @home.

Mein Setup ist hier beschrieben: BTRFS system disk won't work with TimeShift - #3 by Hagen

1 Like

Das ist der Hauptgrund warum ich kein verschachteltes Layout mehr habe. Dann kann @home meist einfach so bleiben wie es ist :sunglasses: Das ist auch ein guter Grund warum man darauf achten sollte dass alle User ihre Daten in /home/$user , und nicht woanders haben.

Bei einem verschachtelten layout ist auch das Aufräumen aufwändig und war für mich Nervaufreibend weil ich zu diesem Zeitpunkt noch nicht so viel Erfahrung mit btrfs und ständig die Angst hatte mein gesamtes Sytem dauerhaft zu schrotten.
Ergo: Layout so wählen dass der Rollback so leicht wie möglich geht.

Es kann tatsächlich passieren, dass auch im Bereich von @home irgendwelche Schäden zu beheben sind. Ist mir (unter ext4) auch schon mal passiert. Auch da kann der Rollback im Prinzip gleich ablaufen. Dann ist es @home statt @ und @home.snapshots statt @snapshots.

Man kann auch statt eines Rollbacks einfach ganze Verzeichnisse aus einem Snapshot kopieren.

Korrekt, exakt so ist auch mein Layout (siehe Link). Aber was ich oben meinte war der Fakt das bei einem Update eben auch bestimmte Konfigurationsdaten in ~/.local/… durch ein Update verändert werden können. Und unter Umständen möchte man diese nach einen Rollback von @ ebenfalls zurück setzen.

FastTrack (für Erfahrene als root)

:warning: Möglicherweise musst du ALLE Befehle an dein Btrfs-Layout anpassen

1) BTRFS-Volume mounten

mount -o subvol=/,compress=zstd:9 /dev/sdy2 /mnt/
2) Aktuellen Zustand speichern (optional)
mv /mnt/@ /mnt/@snapshots/broken_230512

3) Snapshot 7569 wiederherstellen

btrfs subvolume snapshot /mnt/@snapshots/7569/snapshot /mnt/@ 

4) Als Standard deklarieren (zum Booten)

btrfs subvolume set-default /mnt/@

booten (für die Mutigen)

reboot
5) Bereinigung (optional später)
btrfs subvolume delete /.snapshots/broken_230512

Dies funktionierte über ssh in einem laufenden System, während @ als Dateisystem-Root (/) gemountet war. Ganz ohne Live-Manjaro.
:smiling_face_with_three_hearts:


This may be the same as:

snapper --print-number rollback 7569