Wenn Sie das ext3-Dateisystem verwenden, befolgen Sie das HOWTO von Carlo Wood
In wenigen Worten,
- Verwenden Sie ext3grep $ IMAGE --ls --inode 2 | grep your_file, um die gesuchte Datei zu finden (wobei $ IMAGE Ihre Partition ist, zum Beispiel / dev / sda2)
- Suchen Sie den Dateisystemblock, der das Journal des nicht zugewiesenen Speicherplatzes enthält.
- Suchen Sie alle Journal-Deskriptoren, die auf den zuvor gefundenen Block verweisen.
- Kopieren Sie den Block mit dd.
- Bearbeiten Sie die Datei, um die nachfolgenden Nullen zu löschen.
- Katze die Datei, wo immer du willst
Aus der Quelle:
"Das Kapitel Manuelle Wiederherstellung Beispiel
Im folgenden Beispiel wird eine kleine Datei manuell wiederhergestellt. Es wird nur eine Teilausgabe gegeben, um Platz zu sparen und das Beispiel besser lesbar zu machen.
Mit ext3grep $ IMAGE --ls --inode finden wir den Namen der Datei, die wir wiederherstellen möchten:
$ ext3grep $ IMAGE --ls --inode 2 | grep carlo 3 end d 195457 D 1202352103 Do 7 Feb 03:41:43 2008 drwxr-xr-x carlo
$ ext3grep $ IMAGE --ls --inode 195457 | grep 'bin $' | head -n 1 34 35 d 309540 D 1202352104 Do 7. Februar 03:41:44 2008 drwxr-xr-x bin
$ ext3grep $ IMAGE --ls --inode 309540 | grep start_azureus 9 10 r 309631 D 1202351093 Do 7. Februar 03:24:53 2008 rrwxr-xr-x start_azureus
Offensichtlich wird Inode 309631 gelöscht und wir haben keine Blocknummern für diese Datei:
$ ext3grep $ IMAGE --print --inode 309631 [...] Inode ist nicht zugeordnet Gruppe: 19 Generierungs-ID: 2771183319 UID / GID: 1000/1000 Modus: rrwxr-xr-x Größe: 0 Anzahl der Links: 0 Sektoren: 0 (-> 0 indirekte Blöcke).
Inode-Zeiten: Zugriff: 1202350961 = Do 7. Februar 03:22:41 2008 Datei geändert: 1202351093 = Do 7. Februar 03:24:53 2008 Inode geändert: 1202351093 = Do 7. Februar 03:24:53 2008 Löschzeit: 1202351093 = Do. 7. Februar 03:24:53 2008
Direkte Blöcke:
Daher werden wir versuchen, im Journal nach einer älteren Kopie davon zu suchen. Zuerst finden wir den Dateisystemblock, der diesen Inode enthält:
$ ext3grep $ IMAGE --inode-to-block 309631 | grep befindet sich Inode 309631 befindet sich in Block 622598 mit dem Offset 0xf00.
Dann finden wir alle Journaldeskriptoren, die auf Block 622598 verweisen:
$ ext3grep $ IMAGE --journal --block 622598 [...] Journaldeskriptoren, die auf Block 622598 verweisen: 4381294 26582 4381311 28693 4381313 28809 4381314 28814 4381321 29308 4381348 30676 4381349 30986 4381350 31299 4381374 32718 438178 438178 3188 4382137 6672 4382138 7536 4382139 7984 4382140 8931
Dies bedeutet, dass die Transaktion mit der Sequenznummer 4381294 eine Kopie von Block 622598 in Block 26582 usw. enthält. Die größte Sequenznummer unten sollte die letzten auf die Festplatte geschriebenen Daten sein, und daher sollte Block 8931 mit dem aktuellen Block 622598 identisch sein. Um die letzte nicht gelöschte Kopie zu finden, sollte man unten beginnen und arbeiten nach oben.
Wenn Sie versuchen, einen solchen Block zu drucken, erkennt ext3grep, dass es sich um einen Block aus einer Inode-Tabelle handelt, und druckt den Inhalt aller 32 darin enthaltenen Inodes. Wir möchten jedoch nur inode 309631 sehen; Also verwenden wir einen intelligenten Grep:
$ ext3grep $ IMAGE --print --block 8931 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- Generierungs-ID: 2771183319 uid / gid: 1000/1000 Modus: rrwxr-xr-x Größe: 0 Anzahl der Links: 0 Sektoren: 0 (-> 0 indirekte Blöcke).
Inode-Zeiten: Zugriff: 1202350961 = Do 7. Februar 03:22:41 2008 Datei geändert: 1202351093 = Do 7. Februar 03:24:53 2008 Inode geändert: 1202351093 = Do 7. Februar 03:24:53 2008 Löschzeit: 1202351093 = Do. 7. Februar 03:24:53 2008
Direkte Blöcke:
Dies ist in der Tat das gleiche wie in Block 622598. Als nächstes betrachten wir kleinere Sequenznummern, bis wir eine mit einer Löschzeit von 0 finden. Der erste, den wir finden (von unten nach oben), ist Block 6073:
$ ext3grep $ IMAGE --print --block 6073 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- Generierungs-ID: 2771183319 uid / gid: 1000/1000 Modus: rrwxr-xr-x Größe: 40 Anzahl der Links: 1 Sektoren: 8 (-> 0 indirekte Blöcke).
Inode-Zeiten: Zugriff: 1202350961 = Do 7. Februar 03:22:41 2008 Datei geändert: 1189688692 = Do 13. September 15:04:52 2007 Inode geändert: 1189688692 = Do 13. September 15:04:52 2007 Löschzeit: 0
Direkte Blöcke: 645627
Das oben Genannte ist automatisiert und kann mit der Befehlszeilenoption --show-journal-inodes viel schneller ausgeführt werden. Diese Option findet den Block, zu dem der Inode gehört, findet dann alle Kopien dieses Blocks im Journal und druckt anschließend nur den angeforderten Inode aus jedem dieser Blöcke (von denen jeder bekanntlich 32 Inodes enthält), wodurch Duplikate entfernt werden ::
$ ext3grep $ IMAGE --show-journal-inodes 309631 Anzahl der Gruppen: 75 Minimaler / maximaler Journalblock: 1115/35026 Laden von Journaldeskriptoren ... erledigt Die Journaltransaktion 4381435 wird umbrochen. Einige Datenblöcke dieser Transaktion sind möglicherweise verloren gegangen. Anzahl der Deskriptoren im Journal: 30258; Min / Max-Sequenznummern: 4379495/4382264 Kopien von Inode 309631 im Journal gefunden:
-------------- Inode 309631 ----------------------- Generierungs-ID: 2771183319 uid / gid: 1000/1000 Modus: rrwxr-xr-x Größe: 0 Anzahl der Links: 0 Sektoren: 0 (-> 0 indirekte Blöcke).
Inode-Zeiten: Zugriff: 1202350961 = Do 7. Februar 03:22:41 2008 Datei geändert: 1202351093 = Do 7. Februar 03:24:53 2008 Inode geändert: 1202351093 = Do 7. Februar 03:24:53 2008 Löschzeit: 1202351093 = Do. 7. Februar 03:24:53 2008
Direkte Blöcke:
-------------- Inode 309631 ----------------------- Generierungs-ID: 2771183319 uid / gid: 1000/1000 Modus: rrwxr-xr-x Größe: 40 Anzahl der Links: 1 Sektoren: 8 (-> 0 indirekte Blöcke).
Inode-Zeiten: Zugriff: 1202350961 = Do 7. Februar 03:22:41 2008 Datei geändert: 1189688692 = Do 13. September 15:04:52 2007 Inode geändert: 1189688692 = Do 13. September 15:04:52 2007 Löschzeit: 0
Direkte Blöcke: 645627
Die Datei ist in der Tat klein: nur ein Block. Wir kopieren diesen Block mit dd wie zuvor gezeigt:
$ dd if = $ IMAGE bs = 4096 count = 1 skip = 645627 of = block.645627 1 + 0 Datensätze in 1 + 0 Datensätze aus 4096 Bytes (4,1 kB) kopiert, 0,0166104 Sekunden, 247 kB / s
und bearbeiten Sie dann die Datei, um die nachfolgenden Nullen zu löschen, oder kopieren Sie die ersten 40 Bytes (die angegebene Größe der Datei):
$ dd if = block.645627 bs = 1 count = 40 of = start_azureus 40 + 0 Datensätze in 40 + 0 Datensätze aus 40 Bytes (40 B) kopiert, 0,000105397 Sekunden, 380 kB / s
$ cat start_azureus cd / usr / src / azureus / azureus ./azureus &
Genesen! "