ZFS Dataset gelöscht

MichaZ

Member
Hallo @all.

Ich habe gestern richtig Bockmist gebaut, als ich mit dem Midnight Commander einen Ordner löschte ohne daran zu denken, dass darin auch meine Downloads verlinkt sind oder besser waren.

[micha@qCoreFreeBSD ~]$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
daten 297G 1.00T 96K /daten
daten/crypt 297G 1.00T 297G /daten/crypt

Hinter daten/crypt fehlt daten/crypt/Downloads. "USED 297G" macht mir Hoffnung, dass dort noch etwas ist.
Ich habe leider keine Ahnung, wie ich hier vorgehen sollte.
Nein, snapshots und Backups gibt es nicht.

Danke schon mal, für eure Hilfe.

MfG

Micha
 

medV2

Well-Known Member
mit zdb kann man da schon noch was machen, du kannst allte transaktionen wiederherstellen wenn sie noch nicht gelöscht sind. Tip ist also fürs erste: nichts am system machen.

auswendig weiß ich das leider nicht, aber yamagi hat hier auch schonmal einiges dazu geschrieben der hat das vielleicht noch im kopf. ich bin leider bis ende der woche nicht zuhause und könnte dir frühstens da nachsehen.
 

Yamagi

Possessed With Psi Powers
Teammitglied
Im Kopf nicht mehr. :) Grundsätzlich können ZFS on FreeBSD seit ich meine 11.0 und OpenZFS mit sogenannten Pool Checkpoints einen kompletten Pool inklusive gelöschter Datasets und so weiter wiederherstellen. Aber dafür braucht man einen Checkpoint und wer hat den schon... @Lance Ansatzpunkt ist die aussichtsreichste Option, klappt aber nur, wenn noch nicht allzu viele nachfolgende Transaktionen geschrieben wurden. Und ZFS schreibt auch im normalen System-Leerlauf Transaktionen, zum Beispiel durch atime-Updates sporadischer Zugriffe. Wenn das nicht klappt, kann man noch wie @medV2 mit zdb rumstochern. Danach gäbe es noch diverse Datenrettungstools, die mehr oder weniger intelligent die rohe Platte scannen und schauen, was sie so finden.

Dabei muss einem klar sein, dass all diese Ansätze letztendlich destruktiv sind. Man sollte sich also, wenn irgendwie möglich, ein Image der ganzen Platte ziehen, bevor man irgendwas macht! Und, je nach Wichtigkeit der Daten, ist es auch durchaus zu überlegen gleich eine professionelle Datenrettungsfirma zu nehmen. Ich habe gute Erfahrungen mit Ontrack gemacht. Sie sind nicht ganz billig, die Beratungshotline ist allerdings kostenlos. Durch einen Anruf verliert man also nichts.
 

MichaZ

Member
Danke erstmal für eure Tipps.

Und, je nach Wichtigkeit der Daten, ist es auch durchaus zu überlegen gleich eine professionelle Datenrettungsfirma zu nehmen.
Die Wichtigkeit der Daten liegt irgendwo dazwischen.
Zu wichtig, um nicht einiges zu versuchen, zu unwichtig, um professionelle Anbieter in Anspruch zu nehmen.

Die Festplatte habe ich erstmal aus dem System genommen. Alles Rettungstools erwarten ein Image des zu rettenden Datenträgers. Somit werde ich mir erstmal eine neue Festplatte ordern müssen, um den Platz dafür zu bekommen. Danach sehe ich dann weiter.

Gruß
 
Zuletzt bearbeitet:

turrican

Well-Known Member
@MichaZ Hab noch ein paar Aufzeichnungen zu dem Thema gefunden, vllt hilfts dir weiter (hab aktuell keinen Zugriff auf FreeBSD mit ZFS, um da aktuell was draus nachzuvollziehen):

ZFS ist Log basiert und führt ein Transaction Log über alle Aktionen.
Im Prinzip müsstest du nur rausfinden, in welcher Transaction Group (txg) innerhalb des ZFS die Daten noch vorhanden waren - also die txg, vor deiner Löschaktion - und könntest, wenn alles klappt, über diese dann die Daten wieder herholen.
Problematik: falls du seit dem Löschzeitpunkt mit dem Pool gearbeitet hast, sind die Daten ggf wg erneuten überschreibens nicht mehr über die txg rettbar - nur die Information DASS die Daten mal da waren steckt noch in der txg.

- sobald du festgestellt hast, dass Daten gelöscht wurden, den Pool sofort exportieren;
Das stellt sicher, dass die Daten bzw Teile davon nicht überschrieben werden;
Code:
zpool export <poolname>

- ermitteln der txg, in welcher die Daten noch vorhanden waren, du müsstest dazu am Besten den genauen Zeitraum wissen, in welchem die Daten gelöscht wurden (Datum, Uhrzeit);
Auflisten der txgs des exportierten Pools mittels
Code:
zdb -hhe <poolname>
Aus dem Output kannst du anhand der Zeitstempel die einzelnen Transaktionen ersehen
Suche die letzte, vor dem bekannten Löschzeitpunkt und notiere die txg Nummer (im Ausgabe-Listing mit "history txg: <nr>") bezeichnet

- Mounten des Pools mit dieser in Frage kommenden Transaktionsgruppennummer (<txg-nr>) als read-only:
Code:
zpool import -N -o readonly=on -T <txg-nr> <poolname>

Daraus solltest du jetzt (im Idealfall) deine Daten rauskopieren können.

Dieser letzte Schritt (das mounten) kann aber aus div. Gründen scheitern; auch ist es laut einer Aussage eines der ZFS-Erfinders Matt Ahrens recht unwahrscheinlich, dass die Daten noch vollständig und unbeschädigt vorhanden sind, wenn die fragliche txg mehr als 4 txgs zurück liegt.


Gruss,
turrican
 
Oben