Se si utilizza il file system ext3, provare a seguire l' HOWTO di Carlo Wood
In poche parole,
- Usa ext3grep $ IMAGE --ls --inode 2 | grep your_file per trovare il file che stai cercando (dove $ IMAGE è la tua partizione, ad esempio / dev / sda2)
- Trova il blocco del file system che contiene il journal di spazio non allocato.
- Trova tutti i descrittori di giornale che fanno riferimento al blocco che sono stati trovati in precedenza.
- Copia il blocco con dd.
- Modifica il file per eliminare gli zeri finali.
- cat il file dove vuoi
Dalla fonte:
"Il capitolo Esempio di recupero manuale
Nel seguente esempio recupereremo manualmente un piccolo file. Viene fornito solo un output parziale per risparmiare spazio e rendere l'esempio più leggibile.
Usando ext3grep $ IMAGE --ls --inode troviamo il nome del file che vogliamo recuperare:
$ ext3grep $ IMMAGINE --ls --inode 2 | grep carlo 3 end d 195457 D 1202352103 gio 7 feb 03:41:43 2008 drwxr-xr-x carlo
$ ext3grep $ IMMAGINE --ls --inode 195457 | grep 'bin $' | head -n 1 34 35 d 309540 D 1202352104 gio 7 feb 03:41:44 2008 drwxr-xr-x bin
$ ext3grep $ IMMAGINE --ls --inode 309540 | grep start_azureus 9 10 r 309631 D 1202351093 gio 7 feb 03:24:53 2008 rrwxr-xr-x start_azureus
Ovviamente, l'inode 309631 viene cancellato e non abbiamo numeri di blocco per questo file:
$ ext3grep $ IMMAGINE --print --inode 309631 [...] Inode è non allocato Gruppo: 19 ID generazione: 2771183319 uid / gid: 1000/1000 modalità: rrwxr-xr-x dimensione: 0 numero di collegamenti: 0 settori: 0 (-> 0 blocchi indiretti).
Inode Times: Accesso: 1202350961 = Gio 7 feb 03:22:41 2008 File modificato: 1202351093 = Gio 7 feb 03:24:53 2008 Inode modificato: 1202351093 = Gio 7 feb 03:24:53 2008 Tempo cancellazione: 1202351093 = Gio 7 febbraio 03:24:53 2008
Blocchi diretti:
Pertanto, proveremo a cercarne una copia precedente nel diario. Innanzitutto, troviamo il blocco del file system che contiene questo inode:
$ ext3grep $ IMMAGINE --inode-to-block 309631 | grep risiede Inode 309631 risiede nel blocco 622598 all'offset 0xf00.
Quindi troviamo tutti i descrittori di giornale che fanno riferimento al blocco 622598:
$ ext3grep $ IMAGE --journal --block 622598 [...] Descrittori di giornale blocco di riferimento 622598: 4381294 26582 4381311 28693 4381313 28809 4381314 28814 4381321 29308 4381348 30676 4381349 30986 4381374 4381 4381 7081 4381 4382137 6672 4382138 7536 4382139 7984 4382140 8931
Ciò significa che la transazione con il numero progressivo 4381294 ha una copia del blocco 622598 nel blocco 26582 e così via. Il numero di sequenza più grande, in fondo, dovrebbe essere l'ultimo dato scritto sul disco e quindi il blocco 8931 dovrebbe essere lo stesso del blocco corrente 622598. Per trovare l'ultima copia non cancellata, si dovrebbe iniziare dal basso e lavorare verso l'alto.
Se provi a stampare un tale blocco, ext3grep riconosce che è un blocco da una tabella di inode e stampa il contenuto di tutti i 32 inode in esso. Desideriamo solo vedere l'inode 309631; quindi usiamo un grep intelligente:
$ ext3grep $ IMMAGINE --print --block 8931 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- ID generazione: 2771183319 uid / gid: 1000/1000 modalità: rrwxr-xr-x dimensione: 0 numero di collegamenti: 0 settori: 0 (-> 0 blocchi indiretti).
Inode Times: Accesso: 1202350961 = Gio 7 feb 03:22:41 2008 File modificato: 1202351093 = Gio 7 feb 03:24:53 2008 Inode modificato: 1202351093 = Gio 7 feb 03:24:53 2008 Tempo cancellazione: 1202351093 = Gio 7 febbraio 03:24:53 2008
Blocchi diretti:
Questo è effettivamente lo stesso che abbiamo visto nel blocco 622598. Successivamente esaminiamo i numeri di sequenza più piccoli fino a quando non ne troviamo uno con un tempo di eliminazione 0. Il primo che troviamo (dal basso verso l'alto) è il blocco 6073:
$ ext3grep $ IMMAGINE --print --block 6073 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- ID generazione: 2771183319 uid / gid: 1000/1000 modalità: rrwxr-xr-x dimensione: 40 num di collegamenti: 1 settori: 8 (-> 0 blocchi indiretti).
Inode Times: Accesso: 1202350961 = Gio 7 feb 03:22:41 2008 File modificato: 1189688692 = Gio 13 set 15:04:52 2007 Inode modificato: 1189688692 = Gio 13 set 15:04:52 2007 Tempo cancellazione: 0
Blocchi diretti: 645627
Quanto sopra è automatizzato e può essere fatto molto più velocemente con l'opzione della riga di comando --show-journal-inodes. Questa opzione trova il blocco a cui appartiene l'inode, quindi trova tutte le copie di quel blocco nel journal e successivamente stampa solo l'inode richiesto da ciascuno di questi blocchi (ognuno dei quali contiene 32 inode, come sai), eliminando i duplicati :
$ ext3grep $ IMMAGINE --show-journal-inodes 309631 Numero di gruppi: 75 Blocco journal minimo / massimo: 1115/35026 Caricamento descrittori journal ... completato La transazione journal 4381435 si avvolge, alcuni blocchi di dati potrebbero essersi persi con questa transazione. Numero di descrittori nel giornale: 30258; numeri di sequenza min / max: 4379495/4382264 Copie dell'inode 309631 trovate nel journal:
-------------- Inodo 309631 ----------------------- ID generazione: 2771183319 uid / gid: 1000/1000 modalità: rrwxr-xr-x dimensione: 0 numero di collegamenti: 0 settori: 0 (-> 0 blocchi indiretti).
Inode Times: Accesso: 1202350961 = Gio 7 feb 03:22:41 2008 File modificato: 1202351093 = Gio 7 feb 03:24:53 2008 Inode modificato: 1202351093 = Gio 7 feb 03:24:53 2008 Tempo cancellazione: 1202351093 = Gio 7 febbraio 03:24:53 2008
Blocchi diretti:
-------------- Inodo 309631 ----------------------- ID generazione: 2771183319 uid / gid: 1000/1000 modalità: rrwxr-xr-x dimensione: 40 numero di collegamenti: 1 settori: 8 (-> 0 blocchi indiretti).
Inode Times: Accesso: 1202350961 = Gio 7 feb 03:22:41 2008 File modificato: 1189688692 = Gio 13 set 15:04:52 2007 Inode modificato: 1189688692 = Gio 13 set 15:04:52 2007 Tempo cancellazione: 0
Blocchi diretti: 645627
Il file è davvero piccolo: solo un blocco. Copiamo questo blocco con dd come mostrato prima:
$ dd se = $ IMMAGINE bs = 4096 conteggio = 1 salto = 645627 di = blocco.645627 1 + 0 registra in 1 + 0 registra 4096 byte (4,1 kB) copiato, 0,0166104 secondi, 247 kB / s
e quindi modificare il file per eliminare gli zeri finali o copiare i primi 40 byte (la dimensione data del file):
$ dd if = blocco.645627 bs = 1 conteggio = 40 di = start_azureus 40 + 0 registra in 40 + 0 registra 40 byte (40 B) copiati, 0,000105397 secondi, 380 kB / s
$ cat start_azureus cd / usr / src / azureus / azureus ./azureus &
Recuperato!"