[how to] Daten von einem beschädigten btrfs-volume retten

Difficulty: ★★☆☆☆

:uk: :de:

Du hast btrfs benutzt. Jetzt macht sich das bezahlt. Es gibt einen einfachen Ausweg (Ich habe das selbst schon gemacht):

In den meisten Fällen, wenn ein btrfs volume kaputt geht, ist es möglich die Daten zu retten
  • Das liegt daran dass btrfs mit copy on write arbeitet. Das bedeutet, dass neue Änderungen sozusagen immer am Ende angehängt werden. Die vorher vorhandenen Daten werden nicht wirklich überschrieben. (In Wirklichkeit ist das etwas komplizierter, aber für uns hier reicht diese vereinfachte Sicht).
  • Wenn das Dateisystem beschädigt wird, dann steht die Beschädigung ganz am Ende. Beim ro-mounten kann btrfs die Beschädigung finden, und blendet diesen letzten beschädigten Teil aus. Wir sehen das Dateisystem dann in dem Zustand kurz(eventuell 5 Sekunden) vor der Beschädigung. Mit den folgenden Aktionen kommt man an diese unbeschädigten Daten:

Anders als bei anderen Dateisystemen sind dazu keine Spezialprogramme notwendig. Im Gegenteil am besten rettet man die Daten von einem btrfs volume mit btrfs-tools !
Vor allem: Versuch auf keinen Fall das beschädigte Volume rw zu mounten solange die Daten nicht gerettet sind

Daten vom beschädigten btrfs-volume retten
  • Boote in ein Wiederherstellungssystem (DVD oder USB …) möglichst mit einem **aktuellen LTS-kernel (z.B. 5.10) **
  • mounte dein beschädigtes btrfs-Volume als ro (read only). Dieser mount entspricht einem Snapshot des letzten funktionierenden Zustands des Volumes
  • Jetzt kannst du einen von 2 Wegen einschlagen:
    • gesamtes Volume mit allen Subvolumes und snapshots retten (meine Empfehlung !)
    • ein bestimmtes Subvolume oder einen bestimmten Snapshot retten
      • Lass dir alle Subvolumes anzeigen. Mit einem Dateimanager (z.B. mc) suche das Subvolume auf dem die gewünschten Daten sind. Die Subvolumes können ganz verschiedene Layouts haben. Näheres findest du wenn du nach “btrfs-layout” googelst.
  • mounte ein (leeres) btrfs volume mit viel Platz rw. Es muß nicht gleich groß sein wie das beschädigte, aber es muß groß genug sein um den Inhalt des zu rettenden Volumes (inclusiv der Suvolumes/Snapshots) aufzunehmen.
  • Übertrage mit btrfs send den gesamten Inhalt des beschädigten Volumes auf das neue backup-volume.
  • Überprüfe die Daten auf dem Backup-Volume. Alles da ? Dann das backup-volume umounten
  • Wenn du eine Chance siehst das beschädigte btrfs “in place” zu reparieren, kannst du das jetzt versuchen. Ansonsten, mach einfach hier weiter.
Volume wieder herstellen
  • Das beschädigte btrfs-volume aushängen (umount) und neu als btrfs formatieren z.B. mit gparted (wir haben ja ein backup)
  • Das backup ro (readonly) mounten (sicher ist sicher)
  • Mit btrfs send die Daten zurückspielen auf das neu erzeugte volume

Wenn das geklappt hat erhältst du nicht nur alle Daten des letzten Stands, sondern auch alle Subvolumes und alle snapshots die du hattest.

Tips für die Zukunft:
  • Wenn du Angst hast dass die Daten auf einem btrfs-volume beschädigt wurden, dann teste es mit btrfs scrub
  • Bitte verwendet btrfs balance sparsam. Meistens ist es unnötig, und belastet nur das system. Und wenn, dann bitte immer mit limits verwenden (z.B. 75% oder 50%)
  • Mach automatische snapshots (z.B. mit snapper). Möglichst stündlich. Bei btrfs kostet das nichts. Snapper kann diese Snapshots auch wieder automatisch nach einer eingestellten Zeit auflösen. (löschen ist da das falsche Wort)
  • Wenn du mehrere (2, 3 oder 4) Devices hast und zu einem btrfs volume zusammenfassen kannst, dann verwende RAID1
  • Vergiss nicht gute backups deiner Daten zu machen. btrfs send ist dein Freund.

Viel Erfolg :sunglasses:

:uk:

4 Likes