web-dev-qa-db-fra.com

Comment récupérer des fichiers que j'ai supprimés maintenant en exécutant rm *?

Par erreur, j'ai exécuté rm * sur le répertoire courant où j'ai créé de nombreux fichiers programme c. J'y travaillais depuis le matin. Maintenant, je ne peux pas reprendre le temps que j'ai passé depuis le matin à créer les fichiers. Veuillez dire comment récupérer. Ils ne sont pas non plus dans la corbeille!

54
Ravi

Si un programme en cours d'exécution a toujours le fichier supprimé ouvert, vous pouvez récupérer le fichier via le descripteur de fichier ouvert dans /proc/[pid]/fd/[num]. Pour déterminer si tel est le cas, vous pouvez essayer ce qui suit:

$ lsof | grep "/path/to/file"

Si ce qui précède donne la sortie du formulaire:

progname 5383 user 22r REG 8,1 16791251 265368 /path/to/file               

notez le PID dans la deuxième colonne et le numéro de descripteur de fichier dans la quatrième colonne. À l'aide de ces informations, vous pouvez récupérer le fichier en exécutant la commande:

$ cp /proc/5383/fd/22 /path/to/restored/file

Si vous ne parvenez pas à trouver le fichier avec lsof, vous devez immédiatement remonter le système de fichiers qui hébergeait le fichier en lecture seule:

$ mount -o remount,ro /dev/[partition]

ou démontez complètement le système de fichiers:

$ umount /dev/[partition]

La raison en est que dès que le fichier a été dissocié et qu'il n'y a plus de lien dur vers le fichier en question, le système de fichiers sous-jacent peut libérer les blocs précédemment alloués pour le fichier supprimé, moment auquel les blocs peuvent être alloués à un autre fichier et leur contenu écrasé. L'arrêt de toute nouvelle écriture dans le système de fichiers est donc critique en termes de temps si une récupération doit être possible. Si le système de fichiers est le système de fichiers racine ou ne peut pas être rendu en lecture seule ou démonté pour une autre raison, il peut être nécessaire d'arrêter le système (si possible) et de poursuivre la récupération à partir d'un environnement en direct où vous pouvez laisser le fichier cible système en lecture seule.

Une fois que les écritures sur le système de fichiers ont été empêchées, il n'y a pas de hâte immédiate pour tenter la récupération réelle. Pour jouer en toute sécurité, vous souhaiterez peut-être effectuer une sauvegarde du système de fichiers pour effectuer la récupération réelle sur:

$ dd bs=4M if=/dev/[partition] of=/path/to/backup

Les étapes suivantes dépendent désormais du type de système de fichiers. En supposant une installation Ubuntu typique, vous avez très probablement un ext3 ou ext4 système de fichiers. Dans ce cas, vous pouvez tenter une récupération en utilisant extundelete . La récupération peut être tentée en toute sécurité sur la sauvegarde ou le périphérique brut, tant qu'il n'est pas monté (ou qu'il est monté en lecture seule). N'ESSAYEZ PAS DE RÉCUPÉRER À PARTIR D'UN SYSTÈME DE FICHIERS EN DIRECT . Cela mettra très probablement le système de fichiers dans un état incohérent.

extundelete tentera de restaurer tous les fichiers qu'il trouve dans un sous-répertoire du répertoire actuel nommé RECOVERED_FILES. L'utilisation typique pour restaurer tous les fichiers supprimés à partir d'une sauvegarde serait:

$ extundelete /path/to/backup --restore-all 
60
Thomas Nyman

Oui, je peux récupérer mes fichiers. Je n'ai pas encore vérifié si tous sont récupérés ou non, mais oui, certains que j'ai vérifiés sont récupérés. Comme il existe de nombreux fichiers qui sont récupérés via cet outil/commande, j'ai besoin de récupérer un modèle de texte dans ces fichiers et de voir lesquels sont les miens. Les fichiers sont récupérés avec des noms différents (peuvent être générés par le système). J'ai obtenu la solution d'un autre forum et la commande est photorec

Sudo photorec

Cela ouvrira une fenêtre basée sur du texte. J'ai suivi les instructions et oui c'est superbe.

11
Ravi