web-dev-qa-db-fra.com

Comment récupérer un fichier supprimé sous Linux?

Par accident, j’ai utilisé rm sur un fichier que je ne voulais pas supprimer. Est-il possible de le récupérer sous Linux?

65
HaiYuan Zhang

Voici des étapes génériques pour récupérer des fichiers texte.

  1. Utilisez d'abord la commande wall pour indiquer à l'utilisateur que le système est en train de tomber en mode utilisateur unique:

    # wall
    System is going down to .... please save your work.
    

    Appuyez sur CTRL + D pour envoyer un message.

  2. Utilisez ensuite la commande init 1 pour amener le système en mode utilisateur unique:

    # init 1
    
  3. Utiliser grep (manière UNIX traditionnelle) pour récupérer des fichiers

    Utilisez la syntaxe grep suivante:

    grep -b 'search-text' /dev/partition > file.txt
    

    OR

    grep -a -B[size before] -A[size after] 'text' /dev/[your_partition] > file.txt
    

    Où,

    -i : Ignore case distinctions in both the PATTERN and the input files i.e. match both uppercase and lowercase character.
    -a : Process a binary file as if it were text
    -B Print number lines/size of leading context before matching lines.
    -A: Print number lines/size of trailing context after matching lines.
    

    Pour récupérer un fichier texte commençant par "nixCraft" Word sur/dev/sda1, vous pouvez essayer la commande suivante:

    # grep -i -a -B10 -A100 'nixCraft' /dev/sda1 > file.txt
    
  4. Utilisez ensuite vi pour voir file.txt.

    Cette méthode est UNIQUEMENT utile si le fichier supprimé est un fichier texte. Si vous utilisez le système de fichiers ext2, essayez de récupérer la commande.

Trouvé à http://www.cyberciti.biz/tips/linuxunix-recover-deleted-files.html

50
  • Si c'est très très important, prenez le disque de l'ordinateur et embauchez une entreprise pour le faire à votre place.
  • Si c'est très important, montez le disque en lecture seule, copiez la partition entière dans un fichier en utilisant dd et essayez de trouver le fichier qu'il contient (en utilisant grep ou un éditeur).

Edit: parfois ddrescue fonctionne mieux que dd.

13
Sjoerd

Si votre système de fichiers est ext3 , utilisez ext3grep .

9
zaynyatyi

Testdisk a une option de suppression qui devrait fonctionner avec Linux.

Il y a une procédure pas à pas pour Linux . Notez que cela fonctionne pour ext2 , ext3 et ext4 .

8
James T

Si c'est le standard rm , j'espère que vous avez une copie de sauvegarde. La procédure de récupération d'un fichier supprimé serait différente pour chaque système de fichiers, si cela était possible. Linux n'a pas de "corbeille" intégrée; une fois que vous supprimez un fichier, tout est parti.

Quelle que soit la méthode choisie, vous devrez débrancher l'ordinateur - dès que possible, car le fait de continuer à exécuter l'ordinateur (même à l'éteindre) provoque des écritures sur le disque et augmente le risque que certains blocs précédemment occupés par l'ordinateur de poche soient bloqués. le fichier sera écrasé. Cela fait, installez-le sur un autre ordinateur, redémarrez un live CD (en veillant à ne pas monter le lecteur sauf si vous le montez en lecture seule), ou retirez le disque dur et amenez-le à un spécialiste en récupération de données.

5
cHao

Je l'ai fait il y a quelques années. Mon approche consistait à directement, pas de temps à perdre, démonter la partition, puis

dd if=/dev/hda1 of=backup_image.ext3

d'avoir un fichier de sauvegarde de l'état exact de la partition. Ensuite, vous pouvez monter la partition à nouveau et poursuivre vos activités comme d'habitude lorsque vous recherchez le fichier supprimé dans votre image créée. L'image sera probablement TRES grande car vous avez besoin de tout l'espace "vide", il pourrait donc être un problème pratique pour la stocker.

Ensuite, c’était juste pour effectuer des recherches ennuyeuses après des extraits de texte que je pensais être quelque part dans la soupe du contenu de la partition. Par exemple. pour trouver des fichiers .tex, j'ai couru

grep --binary-files=text -1000 "subsection" < backup_image.ext3 > latexfiles

qui a imprimé un contexte large autour de l'expression "subdivision" et a sauvegardé la sortie dans un fichier dans lequel effectuer une recherche manuelle. J'ai imprimé un contexte aussi vaste, car la recherche de l'image prenait tellement de temps que je préférerais ne pas le faire plus de fois que nécessaire.

La commande strings a également été utile pour supprimer les déchets binaires de la sortie, mais si je me souviens bien, elle a également supprimé toutes les nouvelles lignes, ce qui pourrait poser problème.

Pour trouver des fichiers binaires de la même manière, on pourrait réussir à trouver un en-tête caractéristique ou quelque chose d'un certain fichier, mais j'imagine que c'est une aventure plutôt grosse.


Brèves notes techniques: la récupération de disque et Ext3/4 posent des problèmes techniques. C'est une longue chose à expliquer, mais brièvement (et de manière inadéquate): Ext3/4 supprime les "marqueurs" qui indiquent au système d'exploitation où les fichiers sont situés sur le disque lorsque vous les supprimez. Les fichiers ne sont pas nettoyés, mais personne ne sait où ils commencent et se terminent sur le disque, et ils sont parfois même fragmentés à plusieurs endroits. Certains autres systèmes de fichiers définissent simplement les statuts des fichiers sur "supprimé", mais conservent les données d'emplacement. Alors, restaurer n’est pas plus difficile que de regarder les pointeurs de fichiers avec cet indicateur (ils devraient rester disponibles si aucune activité n’est trop active) et espérer que leur contenu n’a pas été écrasé.

Quel est le meilleur? Rhétorique, à mon avis. Une sauvegarde fréquente est la réponse à tous ces problèmes. Des données importantes sans un système de sauvegarde automatisé est un accident imminent, IMHO.


Anecdote personnelle obligatoire: J'allais retirer foo\ foo* de ~. J'ai écrit

rm -r foo<Tab>*

, qui, malheureusement, étant donné que foo était apparemment un lien symbolique et que le seul fichier correspondant, le shell

rm -r foo\ foo *

J'ai appuyé sur Entrée et je suis restée assise à regarder la commande, ce qui aurait dû prendre une seconde au plus. Après un peu plus de temps, rm m'a demandé si je voulais "supprimer le fichier protégé en écriture" quelque chose "". Très rapidement, j'ai senti les frissons et, très doucement, très contrôlé, j'ai appuyé sur Ctrl+c. ~ La moitié de mon ~ a été supprimée, mais j’ai réussi à récupérer tout ce qui avait de la valeur grâce à la sauvegarde décrite ci-dessus et à certaines sauvegardes plus ou moins actuelles. J'avais personnellement des données de mesure très précieuses (lire: longues) et très récentes sur disque, mais j'avais effectué des sauvegardes quadruples. L'un d'eux a disparu ici, un autre en raison d'une panne système à l'école, un autre était corrompu et, au début, je ne pouvais pas trouver le quatrième, car je l'avais mis par erreur dans le mauvais dossier :-D. Si rm -r n'avait pas été bloqué sur un fichier protégé en écriture, le quatrième aurait été mangé depuis que ce dossier a été monté via sshfs dans mon ~. Je suis beaucoup plus prudent avec ce genre de choses depuis.

5
Daniel Andersson

Définissez vos attentes faibles. Si quelque chose a été écrit sur les données «supprimées», vous le perdrez.

J'ai fait une petite récupération et les meilleurs outils que j'ai trouvés ont souvent été conçus pour certains formats. Par exemple, «photorec» était génial lorsque je voulais récupérer des dizaines de milliers de fichiers jpeg.

Recuva m'a également aidé avant maintenant et pourrait être votre meilleur choix. (C'est gratuit, ne vous laissez pas piéger par leurs annonces)

À la fin de la journée, si ce que vous avez perdu est important, mettez le lecteur hors ligne et arrêtez d'écrire. Utilisez tous les logiciels de récupération que vous pouvez trouver jusqu'à ce que vous récupériez vos données ou que cela en vaille la peine. Si c'est vraiment important, envoyez-le à des professionnels à un prix élevé.

Si vous avez déjà eu de la chance avec un outil, essayez à nouveau, vu que vous le connaissez bien. À la fin de la journée, ils ne devraient pas écrire sur le disque et vous pouvez donc utiliser un logiciel jusqu'à ce que vous en trouviez un qui fonctionne.

4
PriceChild
  • La seule réponse correcte est: restaurez votre fichier à partir d'une sauvegarde. Tout le monde doit avoir une sauvegarde. Pour les fichiers vraiment importants, vous devez avoir deux sauvegardes. Vous pas? Eh bien, tant pis, voici une leçon apprise (désolée de paraître dure, mais je suis en stockage de données, et les gens ne sauvegardent pas avant d'avoir perdu des données importantes, c'est un fait. Alors oui, vous avez l'air stupide, mais ainsi presque tout le monde.

  • OK, vous n'avez pas de sauvegarde. vous devez stop en utilisant le système de fichiers contenant le fichier RIGHT NOW . Toute activité d’écriture peut définitivement contenir les données de fichier qui peut (seulement peut) reste sur le disque.

  • si vous avez commis l'erreur tragique de n'utiliser qu'une seule partition à la fois comme système de fichiers racine et/home, cela signifie que vous amorcez doit à partir d'un autre périphérique.MAINTENANT.

  • Si votre fichier a un format courant (fichier Word, JPG, etc.), utilisez Photorec . Photorec peut récupérer les formats de fichiers les plus courants.

  • Vous pouvez essayer la méthode "ext3 undelete" proposée précédemment, mais vous devez être à l'aise avec la ligne de commande, comprendre le fonctionnement de base de Linux, etc.

  • Si votre fichier est d'un format spécial, pas de chance. Une fois, j’ai écrit un programme Perl pour analyser un lecteur à la recherche de fichiers spéciaux, et cela a très bien fonctionné; mais vous aurez besoin de connaître la programmation pour le faire et d’être aussi à l’aise avec Linux.

4
wazoox

Si vous avez une application ouverte qui lit actuellement le fichier, telle que VLC ou LibreOffice, alors cette réponse géniale de L & U.SO m'a aidé à sortir de ce gâchis. Voici une méthode alternative pour faire la même chose.

L'idée générale est de trouver le lien dans /proc/PID/fd/DESCRIPTOR_NUMBER et de le recopier à son emplacement d'origine. Utilisez ps aux | grep APP_NAME pour trouver le PID, puis ls -la /proc/PID/fd/ pour trouver le DESCRIPTOR_NUMBER approprié.

2
dotancohen

Voici un excellent document pour vous. Vous y trouverez une foule de conseils pratiques.

BTW, il y a deux groupes de personnes:

  1. ceux qui font des sauvegardes
  2. ceux qui vont faire des sauvegardes

Félicitations, vous venez d'être promu dans le groupe 2. ;-)

2
Michał Šrajer

La réponse "correcte" consiste à supposer qu’il n’existe pas de méthode de restauration fiable mais plutôt de restauration à partir de sauvegardes ou d’un système cloné ou de réinstallation.

TestDisk est un excellent outil. Il existe d'autres moyens de récupérer certaines données du disque physique en fonction du système de fichiers et de la récence de la suppression. Toutefois, le temps et la douleur impliqués peuvent être trop longs, donc GARDER DES SAUVEGARDES (et vérifiez également qu’ils sont valides et restaurables)!

1
Andy Lee Robinson

Si ce n'est pas écrasé par d'autres utilisateurs, alors vous avez de la chance. J'ai accidentellement supprimé mon fichier source cpp et utilisé un outil appelé foremost , qui m'a aidé à restaurer les débris 60G cpp du disque. Enfin, j'ai récupéré mon dossier en assemblant ces débris pièce par pièce. Je pense qu'il scanne certains motifs pour un type de fichier spécifique et traverse tous les inodes du disque pour récupérer des fichiers! Juste essayer!

1
Izana

Si vous avez accidentellement supprimé le fichier de Linux, vous pouvez utiliser cette commande:

find /root -name "search text" -type f  -exec mv {} "/home" \;

à la place de search text, vous pouvez mettre un nom de fichier et spécifier le répertoire dans lequel vous voulez restaurer à la place de /home.

0
santosh

Vous pouvez essayer ce script. Fonctionne bien et destiné à être utilisé à la place de rm et im l'utiliser intensément maintenant.

https://github.com/nateshmbhat/safe-rm

Caractéristiques :

  • destiné à être utilisé à la place de la rm
  • gère tous les arguments que rm peut prendre
  • gère les collisions de noms de fichiers avec les fichiers déjà dans la corbeille
  • gère automatiquement certains problèmes de permission
  • si rm est appelé depuis n'importe quel autre script ou indirectement, la commande système 'rm' est utilisée automatiquement
  • affiche les messages d'erreur appropriés comme ceux qui apparaissent dans rm
0
Natesh bhat