Si vous utilisez le système de fichiers ext3, essayez de suivre le HOWTO de Carlo Wood
En quelques mots,
- Utilisez ext3grep $ IMAGE --ls --inode 2 | grep votre_fichier pour trouver le fichier que vous recherchez (où $ IMAGE est votre partition par exemple / dev / sda2)
- Recherchez le bloc de système de fichiers qui contient le journal de l'espace non alloué.
- Recherchez tous les descripteurs de journal faisant référence au bloc qui ont été trouvés précédemment.
- Copiez le bloc avec dd.
- Modifiez le fichier pour supprimer les zéros de fin.
- cat le fichier où tu veux
De la source:
"Le chapitre Exemple de récupération manuelle
Dans l'exemple suivant, nous allons récupérer manuellement un petit fichier. Seule une sortie partielle est donnée afin d'économiser de l'espace et de rendre l'exemple plus lisible.
En utilisant ext3grep $ IMAGE --ls --inode, nous trouvons le nom du fichier que nous voulons récupérer:
$ ext3grep $ IMAGE --ls --inode 2 | grep carlo 3 end d 195457 D 1202352103 jeu 7 fév 03:41:43 2008 drwxr-xr-x carlo
$ ext3grep $ IMAGE --ls --inode 195457 | grep 'bin $' | tête -n 1 34 35 d 309540 D 1202352104 jeu 7 fév 03:41:44 2008 drwxr-xr-x bin
$ ext3grep $ IMAGE --ls --inode 309540 | grep start_azureus 9 10 r 309631 D 1202351093 jeu 7 fév 03:24:53 2008 rrwxr-xr-x start_azureus
De toute évidence, l'inode 309631 est effacé et nous n'avons aucun numéro de bloc pour ce fichier:
$ ext3grep $ IMAGE --print --inode 309631 [...] L'inode est un groupe non alloué: 19 Génération ID: 2771183319 uid / gid: 1000/1000 mode: rrwxr-xr-x taille: 0 nombre de liens: 0 secteurs: 0 (-> 0 blocs indirects).
Inode Times: Accessed: 1202350961 = Thu Feb 7 03:22:41 2008 File Modified: 1202351093 = Thu Feb 7 03:24:53 2008 Inode Modified: 1202351093 = Thu Feb 7 03:24:53 2008 Heure de suppression: 1202351093 = Thu 7 févr 03:24:53 2008
Blocs directs:
Par conséquent, nous essaierons d'en rechercher une copie plus ancienne dans le journal. Tout d'abord, nous trouvons le bloc de système de fichiers qui contient cet inode:
$ ext3grep $ IMAGE --inode-to-block 309631 | grep réside L'inode 309631 réside dans le bloc 622598 à l'offset 0xf00.
Ensuite, nous trouvons tous les descripteurs de journal référençant le bloc 622598:
$ ext3grep $ IMAGE --journal --block 622598 [...] Descripteurs de journal faisant référence au bloc 622598: 4381294 26582 4381311 28693 4381313 28809 4381314 28814 4381321 29308 4381348 30676 4381349 30986 4381350 31299 4381374 32718 438 438 438 438 438 438 4382137 6672 4382138 7536 4382139 7984 4382140 8931
Cela signifie que la transaction avec le numéro de séquence 4381294 a une copie du bloc 622598 dans le bloc 26582, etc. Le plus grand numéro de séquence, en bas, doit être les dernières données écrites sur le disque et donc le bloc 8931 doit être le même que le bloc actuel 622598. Pour trouver la dernière copie non supprimée, il faut commencer par le bas et travailler vers le haut.
Si vous essayez d'imprimer un tel bloc, ext3grep reconnaît qu'il s'agit d'un bloc d'une table d'inodes et imprimera le contenu des 32 inodes qu'il contient. Nous souhaitons seulement voir l'inode 309631 cependant; nous utilisons donc un grep intelligent:
$ ext3grep $ IMAGE --print --block 8931 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- ID de génération: 2771183319 uid / gid: 1000/1000 mode: rrwxr-xr-x taille: 0 nombre de liens: 0 secteurs: 0 (-> 0 blocs indirects).
Inode Times: Accessed: 1202350961 = Thu Feb 7 03:22:41 2008 File Modified: 1202351093 = Thu Feb 7 03:24:53 2008 Inode Modified: 1202351093 = Thu Feb 7 03:24:53 2008 Heure de suppression: 1202351093 = Thu 7 févr 03:24:53 2008
Blocs directs:
C'est en effet le même que celui que nous avons vu dans le bloc 622598. Ensuite, nous regardons les numéros de séquence plus petits jusqu'à ce que nous en trouvions un avec un temps de suppression de 0. Le premier que nous trouvons (de bas en haut) est le bloc 6073:
$ ext3grep $ IMAGE --print --block 6073 | grep -A15 'Inode 309631' -------------- Inode 309631 ----------------------- ID de génération: 2771183319 uid / gid: 1000/1000 mode: rrwxr-xr-x taille: 40 nombre de liens: 1 secteurs: 8 (-> 0 blocs indirects).
Inode Times: Accessed: 1202350961 = Thu Feb 7 03:22:41 2008 File Modified: 1189688692 = Thu Sep 13 15:04:52 2007 Inode Modified: 1189688692 = Thu Sep 13 15:04:52 2007 Temps de suppression: 0
Blocs directs: 645627
Ce qui précède est automatisé et peut être fait beaucoup plus rapidement avec l'option de ligne de commande --show-journal-inodes. Cette option trouvera le bloc auquel appartient l'inode, puis trouvera toutes les copies de ce bloc dans le journal, et imprime ensuite uniquement l'inode demandé de chacun de ces blocs (chacun contenant 32 inodes, comme vous le savez), éliminant les doublons :
$ ext3grep $ IMAGE --show-journal-inodes 309631 Nombre de groupes: 75 Bloc de journal minimum / maximum: 1115/35026 Chargement des descripteurs de journal ... terminé La transaction de journal 4381435 se termine, certains blocs de données peuvent avoir été perdus de cette transaction. Nombre de descripteurs dans la revue: 30258; numéros de séquence min / max: 4379495/4382264 Copies de l'inode 309631 trouvées dans le journal:
-------------- Inode 309631 ----------------------- ID de génération: 2771183319 uid / gid: 1000/1000 mode: rrwxr-xr-x taille: 0 nombre de liens: 0 secteurs: 0 (-> 0 blocs indirects).
Inode Times: Accessed: 1202350961 = Thu Feb 7 03:22:41 2008 File Modified: 1202351093 = Thu Feb 7 03:24:53 2008 Inode Modified: 1202351093 = Thu Feb 7 03:24:53 2008 Heure de suppression: 1202351093 = Thu 7 févr 03:24:53 2008
Blocs directs:
-------------- Inode 309631 ----------------------- ID de génération: 2771183319 uid / gid: 1000/1000 mode: rrwxr-xr-x taille: 40 nombre de liens: 1 secteurs: 8 (-> 0 blocs indirects).
Inode Times: Accessed: 1202350961 = Thu Feb 7 03:22:41 2008 File Modified: 1189688692 = Thu Sep 13 15:04:52 2007 Inode Modified: 1189688692 = Thu Sep 13 15:04:52 2007 Temps de suppression: 0
Blocs directs: 645627
Le fichier est en effet petit: un seul bloc. Nous copions ce bloc avec dd comme indiqué précédemment:
$ dd if = $ IMAGE bs = 4096 count = 1 skip = 645627 of = block.645627 1 + 0 enregistrements en 1 + 0 enregistrements out 4096 octets (4,1 kB) copiés, 0,0166104 secondes, 247 kB / s
puis éditez le fichier pour supprimer les zéros de fin, ou copiez les 40 premiers octets (la taille donnée du fichier):
$ dd if = block.645627 bs = 1 count = 40 of = start_azureus 40 + 0 enregistrements in 40 + 0 enregistrements out 40 octets (40 B) copiés, 0,000105397 secondes, 380 kB / s
$ cat start_azureus cd / usr / src / azureus / azureus ./azureus &
Rétabli!"