Récupérer un fichier supprimé encore utilisé par un programme sous Unix

Thursday, 12 January 2006 @ 09:41 AM CET

Effectué par: Admin

Ce truc ne marchera que si on a effacé un fichier, pas si on a écrasé son contenu ( si on l'a supprimé puis créé un fichier du même nom, ça marche. Sinon généralement on a une troncation et ça ne marche pas ) . Il faut également qu'un programme en cours d'exécution ait gardé ce fichier ouvert. Ce qu'il faut savoir, c'est qu'un rm ne fait que virer l'entrée du répertoire pointant vers le fichier ; mais il existe physiquement sur le disque tant que tous les programmes qui l'utilisent ne l'ont pas fermé. On peut penser à une espèce de compteur de référence.

Il faut retrouver le PID du process ayant ouvert ce fichier ; le plus simple c'est encore de faire un lsof | grep nom_du_fichier. La deuxième colonne est le PID dont on a besoin. Faire cd /proc/PID/fd. Dans ce répertoire, on trouvera les file descriptor utilisés par ce programme, c'est à dire les fichiers ouverts. Pour voir ce vers quoi pointent ces descripteurs, ls -la. Une entrée correspondra au fichier effacé sous la forme "N -> nom_du_fichier (deleted)", où N est un nombre. Il suffit alors de faire un cp N vers la destination de son choix ( pourquoi pas celle d'origine ) et voilà !

Évidemment l'ennemi absolu de la récupération de fichier c'est l'écrasement du contenu. Généralement les lourds outils récupérant ce qu'ils peuvent sur le disque ne pourront eux-même rien y faire. Attention que l'astuce ne fonctionne pas non plus sur un mount NFS par exemple.

2 commentaires


www.sioban.net
http://www.sioban.net/article.php/20060112094139485