OpenZFS: zerstörtes dataset wiederherstellen?

h^2

hat ne Keule +1
Vorweg: es handelt sich um OpenZFS auf Ubuntu, aber ich dachte hier passt es noch am besten.

Ich haben den neuen Firmenlaptop mit Ubuntu 21.04 eingerichtet, da ich auf einige Linux-native Dinge angewiesen bin, aber einfaches ZFS haben wollte. Nach der Installation habe ich ein verschlüsseltes Home eingerichtet via ZFS native encryption. Das hat alles auch soweit funktioniert und das Passwort wurde auch automatisch beim Start abgefragt etc pp.
Weil ich hier [1] gelesen habe, dass das wichtig ist, habe ich auch irgendeine Ubuntu-spezifische Property auf dem Dataset gesetzt.

So habe ich den Laptop ca. 10 Tage verwendet und sehr viele Dinge eingerichtet, Daten rüber kopiert etc und gearbeitet (programmiert). Ich bin heute bei meinem Reiseziel angekommen, wo ich auch vorhatte ein Backup zu ziehen. Aber, dummerweise habe ich das Passwort beim Start drei mal falsch eingegeben. Das hat absurderweise dazu geführt, dass der ZFS-Aufräumdienst von Ubuntu das Dataset zum ersten Mal unmountet vorfand und sich dachte "das braucht keiner mehr" und es gelöscht hat. WTF. Dazu gibt es Doku im Internet. Im wesentlichen hätte ich mein einges dataset in einem anderen "namespace" erzeugen soll (wobei eigentlich auch das blöde Flag das Dateisystem hätte schützen sollen).

Wie dem auch sei, es wurde nun von Ubuntu zerstört und ich kann abschätzen, dass ich sicherlich ne volle Arbeitswoche bräuchte um alles wieder eingerichtet zu kriegen und meine Programmierarbeiten wieder nachzuprogrammieren (kein git checkin, weil auf Reisen gewesen). Also, die Frage: kann ich das Dataset irgendwie wieder herstellen? Der Pool wurde danach einmal rw gemountet, aber es wurden kaum Daten geschrieben. 90% des Speicherplatzes im Pool sind noch ungenutzt.

Was ich bis jetzt gemacht habe:
  • zpool history -il um die TXG des deletes rauszufinden.
  • versucht manuell mit zpool import -R /rpool -o readonly=on -T 91900 rpool ein Rollback des Pools auf die TXG vor dem delete zu machen.

Das war nicht erfolgreich, ich bekomme immer cannot import 'rpool': one or more devices is currently unavailable. Ich habe irgendwo gelesen, dass dieses feature in modernem ZFS nicht mehr geht?

Gibt es sonst noch was, was ich tun kann?

Vielen Dank!


[1] https://talldanestale.dk/2020/04/06/zfs-and-homedir-encryption/
 

h^2

hat ne Keule +1
Hier in diesem Link gibt es ein paar Kommandos und noch weitere Links, welche dir vielleicht helfen können.

[1] https://serverfault.com/questions/842955/restoring-data-after-zfs-destroy
Das hatte ich auch schon gesehen, da geht es aber um zpool destroy und nicht zfs destroy... Ich könnte es natürlich trotzdem versuchen, aber das Fazit des Posts ist ja auch, dass das Script den Pool völlig vernichtet hat, also bin ich nicht so heiß darauf, dass auf meinen Pool loszulassen ^^
 

foxit

Well-Known Member
Mhh also zfs destroy ... ist meiner Meinung nach endgültig und lässt sich nicht wiederherstellen.
 

Yamagi

Possessed With Psi Powers
Teammitglied
Eine hypothetische Möglichkeit wäre noch ein Checkpoint, aber den müsstest du oder Script irgendwann mal explizit mit zpool checkpoint angelegt haben.
 

midnight

OpenBSD & FreeBSD
Ich habe ein altes Script gefunden. Evtl. klappt das auch mit OpenZFS oder Du kannst davon etwas herleiten?

archive.org:

Hier das Script:
 

h^2

hat ne Keule +1
Eine hypothetische Möglichkeit wäre noch ein Checkpoint, aber den müsstest du oder Script irgendwann mal explizit mit zpool checkpoint angelegt haben.
Darüber habe ich jetzt auch gelesen. Sehr praktisch. Aber leider ist keiner gesetzt.

Ich habe ein altes Script gefunden. Evtl. klappt das auch mit OpenZFS oder Du kannst davon etwas herleiten?

archive.org:

Hier das Script:
Ja, das habe ich auch gesehen. Das ist das ursprünglich in dem obigen Beitrag genutzte. Da das aber mehr als 10 Jahre alt ist, habe ich wenig Hoffnung, dass es auf einem OpenZFS noch das richtige macht. Und dann müsste ich gleich den Rest des Pools auch wiederherstellen... [Ich kann davon jetzt ein Backup machen, aber da ich das über das Internet rausschicken müsste und dann auch wieder ziehen ist das sehr langsam und umständlich gerade]
 

h^2

hat ne Keule +1
Ich hatte gehofft, dass man mit zdb vielleicht noch irgendwie an Sachen herankommt? Ich brauche auch kein restore aller snapshots, ein einfacher Zugriff auf bestimmte Dateien würde genügen.
 

medV2

Well-Known Member
Wenn die Daten wichtig sind würde ich halt nicht zu viel rumdockern. Kauf ne billige externe Platte und mach da mal mit DD ein Image drauf bevor du rumprobierst.
 

medV2

Well-Known Member
Hilft dir jetzt leider nicht weiter, aber ich hab versucht das zu reproduzieren weil - auch wenn ich wirklich kein Freund von Ubuntu bin - ich es doch krass fände, wenn das einfach so Datasets löscht:

Bei mir nicht der Fall. Kann es sein, dass du das com.ubuntu.zsys:bootfs-datasets falsch gesetzt hast? Das ist das einzige womit sich das Verhalten nachstellen lässt bei mir.

Du müsstest das com.ubuntu.zsys:bootfs-datasets btw garnicht setzen - dann hast du halt keine automatischen snapshots und das Zeug. Aber dass ohne das Property irgendwas gelöscht wird, war noch zu 20.04, da war das auch noch experimental, und wurde behoben.
 
Oben