Montag, 17. November 2014

Undelete für "rm *"

Verdammte Scheiße! Gerade ist es mir wieder passiert. Das letzte mal ist schon ein paar Jahre her. Und ich hätte nicht gedacht, dass es mir nochmal passiert. Aber im Eifer des Gefechts, wenn man nicht genau hinsieht und die Tab-Completion auf einer langsamen SSH-Leitung einem Dinge vorgaukelt, die nicht wirklich so sind wie sie scheinen, ja so ist es mir passiert. Und natürlich habe ich mir gespart die Arbeit der letzten paar Tage einzuchecken, will man ja immer erst machen, wenn es wirklich rund läuft. Scheiß drauf! In Zukunft wird jeder Müll eingecheckt. Aber das hilft jetzt leider nicht weiter.

Gelöschte Daten auf einem Linux-Dateisystem zu rekonstruieren ist nicht so einfach und wenn einem ein solches Malheur passiert ist, gilt es Ruhe zu bewahren. Jeder weitere Schreibzugriff auf die betreffende Platte kann dazu führen, dass die gelöschten Daten unwiederbringlich verloren sind. Natürlich kann man die Platte wegmounten und mit mit diversen Tools ein Backup machen, um darin noch was zu finden. Wenn man aber über SSH auf einem Produktionssystem ist, stellen solche Tools meist keine Option dar.

Was aber geht ist ein grep auf das Raw-Device. Und in meinem Fall hat genau das geholfen. Dazu muss man sich aber an den Anfang der Datei erinnern. Wenn man den noch kennt, kann man grep dazu überreden eine Binärdatei wie eine Textdatei zu behandeln. Mit den Optionen -B und -A kann man den Bereich vor und hinter der Überschrift eingrenzen und less zeigt die Daten an, ohne das Terminal zu schrotten.

grep --binary-files=text -B 1 -A 500 \
  '## Various Bash functions' \
  /dev/disk/by-uuid/6989be6b-e743-419a-bd8b-bc877756dfe2 |
less

Puh nochmal Glück gehabt:

Keine Kommentare: