Habituellement, lorsque les éditeurs enregistrent des fichiers, ils suppriment ou tronquent à 0, libérant ainsi l'espace alloué, puis écrivent, ce qui alloue un nouvel espace. Il en résulte que le système de fichiers place les données dans un emplacement physique complètement différent. Votre idée pourrait donc ne pas fonctionner.
Vous pouvez obtenir l'emplacement physique d'un fichier à l'aide de filefrag
ou hdparm --fibmap
, puis utiliser dd
pour lire cet emplacement physique directement. J'ai décrit ce processus dans un contexte différent ici: /unix//a/85880/30851
Dans votre cas, il est plus probable que vous ayez besoin de l'approche générale pour trouver des données textuelles ... quelque chose comme:
strings -n 12 -t d /dev/partition | grep -F 'text snippet'
strings
recherchera des données ASCII consécutives (prend également en charge certains autres encodages, vous n'êtes pas sûr de l'UTF-8. Si c'est du code ou de l'anglais, vous n'en aurez pas besoin) et il imprimera également l'offset où il a été trouvé.
text snippet
devrait être un exemple de texte exact et unique dont vous vous souvenez avoir été dans la partie du fichier que vous recherchez [sur une seule ligne]. (Si vous ne le savez pas exactement, vous pouvez plutôt utiliser grep avec des expressions régulières.)
-n 12
est la longueur minimale strings
recherchée. 12
devrait être la longueur de votre text snippet
. Ce paramètre est facultatif, s'il est fourni, il pourrait aider strings | grep
à aller un peu plus vite.
La lecture de la partition entière prendra beaucoup de temps, mais en cas de succès, vous disposerez d'un décalage que vous pourrez alimenter dd
pour saisir la zone générale, puis supprimer les éléments qui n'appartiennent pas.
Je n'ai rien fait dans ce répertoire depuis
Si votre répertoire ne se trouve pas être un point de montage ... la plupart des systèmes de fichiers ne réservent pas vraiment d'espace "par répertoire" donc ... toutes les écritures dans le système de fichiers entier peuvent écraser le bit que vous recherchez. Dans une situation de récupération de données, vous basculez généralement le tout en mode lecture seule.
strings
, ne localisera que certaines parties du fichier, sauf si vous êtes extrêmement chanceux.strings -n16
ou une longueur minimale raisonnable, pour l'accélérer.strings
j'ai pu trouver le fichier entier ailleurs dans la partition. C'est presque deux mois de travail que je n'ai pas à refaire, et un excellent rappel de toujours utiliser le contrôle de version pour tout ce qui est important.