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

65

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

HaiYuan Zhang
la source
@Nav, rmest une commande "dangereuse" UNIX / Linux (lecture $ man rm). Utilisez-le avec une extrême prudence . Cela dit, c’est un moyen rapide de supprimer des fichiers dont vous êtes sûr. Les environnements de bureau Linux et Unix modernes fournissent une solution de "Corbeille" , de sorte que l'utilisateur peut facilement récupérer des fichiers supprimés par inadvertance.
Jose Elera
1
Quelques réponses plus à jour: unix.stackexchange.com/questions/122305/…
Ben Crowell
N'utilisez pas "rm" si vous souhaitez restaurer les fichiers à l'avenir. Utilisez
Natesh bhat

Réponses:

51

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
    

    OU

    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" 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

Gabriel L. Oliveira
la source
16
A noter que vous ne pouvez pas faire
ceci à distance Le
1
Cette méthode fonctionne à merveille pour les fichiers texte, merci! Ce que j'aime c'est qu'il ne s'appuie pas sur le journal du système de fichiers (comme extundelete), mais qu'il analyse en réalité les octets bruts de l'intégralité du lecteur. Si cette commande ne trouve pas votre fichier, rien ne le fera.
Benjamin B.
1
@Quinma, cette méthode peut fonctionner à distance avec seulement de légères modifications ... Au lieu de l'exécuter init 1, supprimez manuellement tous les démons du système, à l'exception de sshd. Je pense également qu’à ce stade, vous devriez remonter tous les systèmes de fichiers RO et les enregistrer dans tmpfs (en supposant que vos fichiers temporaires s’intègrent dans la mémoire RAM) pour éviter d’écraser les fichiers avec les données temporaires. Vous devrez bien sûr le copier ailleurs ultérieurement, soit sur un serveur distant, soit de nouveau sur les systèmes de fichiers locaux après leur remontage RW.
Thomas Guyot-Sionnest
quelle est votre_partition ??? J'ai l'erreur: / dev / sda1: Aucun fichier ou répertoire de ce type
coolcool1994
1
@ Qback, je ne sais vraiment pas. Comme indiqué, je viens de suivre l’étape par étape. Mais init 1 est destiné aux tâches administratives, et peut-être même à un processus de destruction non lié à ce scénario de niveau d'exécution. Cela peut aider à empêcher l’utilisation du disque dur et à écraser le fichier que vous essayez de récupérer.
Gabriel L. Oliveira
13
  • Si c'est très très important, prenez le disque de l'ordinateur et embauchez une entreprise pour le faire à votre place.
  • Si cela n’est que très important, montez le disque en lecture seule, copiez la partition entière dans un fichier à l’aide de ddet essayez de trouver le fichier qu’il contient (à l’aide d’ grepun éditeur).

Edit: ddrescuefonctionne parfois mieux que dd.

Sjoerd
la source
1
"essayer de trouver le fichier à l'intérieur" Je ne comprends pas, comment peut-on raisonnablement ouvrir un fichier de plus de 15 Go et effectuer des recherches ou diriger cette bête vers grep? Et que feriez-vous quand vous auriez trouvé le texte? Comment est cette récupération?
TheLQ
1
La première chose à faire est d'essayer quelques outils courants avant de dépenser beaucoup d'argent pour un résultat incertain. BTW, grep ne va pas vraiment aider, photorec ou ext3grep sera.
Wazoox
8

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

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

James T
la source
1
extundelete est également utile si la partition est ext3 / 4. Cependant, la première chose à faire est peut-être de démonter la partition.
billc.cn
5
  • 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 sévère, mais je suis dans le stockage de données, et les gens ne sauvegardent pas avant d'avoir perdu des données importantes, c'est un fait. Donc oui, vous avez l'air stupide, mais ainsi presque tout le monde

  • OK, vous n'avez pas de sauvegarde. vous devez cesser d' utiliser le système de fichiers contenant le fichier RIGHT NOW . Toute activité d’écriture peut définitivement détruire les données de fichier qui peuvent (ne peuvent ) rester sur le disque.

  • Si vous avez commis l'erreur tragique d'utiliser une seule partition à la fois comme système de fichiers racine et / home, cela signifie que vous devez démarrer à partir d'un autre périphérique. NOW .

  • Si votre fichier est d'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.

Wazoox
la source
5

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 j’espérais ê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.

De plus, la commande stringsétait utile pour supprimer les déchets binaires de la sortie, mais si je me souviens bien, elle supprimait également tous les retours à la ligne, 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 toujours être disponibles si aucune activité n’est trop active), et ensuite 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 système de sauvegarde automatique est un accident qui attend, IMHO.


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

rm -r foo<Tab>*

, qui, malheureusement, fooétait apparemment un lien symbolique et le seul fichier correspondant, le shell transformé en

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 rmm'a demandé si je voulais "supprimer le fichier protégé en écriture" quelque chose "". Très vite, j'ai senti les frissons et doucement et très contrôlé j'ai appuyé Ctrl+c. ~ La moitié de ma ~copie a été supprimée, mais j’ai réussi à récupérer tout ce qui avait de la valeur par le biais de la description décrite ci-dessus de greps et de 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 perdues, 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. N'avait pasrm -rbloqué sur un fichier protégé en écriture, le quatrième aurait été mangé depuis que ce dossier a été monté via sshfs dans my ~. Je suis beaucoup plus prudent avec ce genre de choses depuis.

Daniel Andersson
la source
5

Si c'est la chambre standard , j'espère que vous avez une 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 le fichier sera écrasé. Cela fait, installez-le sur un autre ordinateur, redémarrez un CD live (en veillant à ne pas monter le lecteur, sauf en lecture seule), ou enlevez le disque dur et confiez-le à un spécialiste en récupération de données.

chao
la source
4

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.

Cher
la source
2

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. ;-)

Michał Šrajer
la source
2

Si vous avez une application ouverte qui lit actuellement le fichier, telle que VLC ou LibreOffice, cette réponse géniale de L & U.SO m'aidera à 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 /proc/PID/fd/DESCRIPTOR_NUMBERet de le recopier à son emplacement d'origine. Utilisez ps aux | grep APP_NAMEpour trouver le PID, puis ls -la /proc/PID/fd/pour trouver le DESCRIPTOR_NUMBER approprié.

dotancohen
la source
1

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 des 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. KEEP BACKUPS (et testez qu'ils sont valides et restaurables)!

Andy Lee Robinson
la source
1

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é avant tout , qui m'a aidé à restaurer des débris de 60G cpp à partir 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!

Izana
la source
0

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 textvous pouvez mettre un nom de fichier et spécifier un répertoire dans lequel vous voulez restaurer /home.

santosh
la source
2
Salut Santosh. S'il vous plaît ne pas ajouter des liens trompeurs à vos messages. Il a été supprimé.
ᔕᖺᘎᕊ
0

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

Traits :

  • 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
Natesh bhat
la source
-2

J'ai eu le même problème la semaine dernière et j'ai essayé beaucoup de programmes, tels que debugfs, photorec, ext3grep et extundelete. ext3grep était le meilleur programme pour récupérer des fichiers. Le sintax est très facile:

ext3grep image.img --restore-all

ou:

ext3grep /dev/sda3 --restore-all --after date -d '2015-01-01 00:00:00' '+%s' --before `date -d ‘2015-01-02 00:00:00’ ‘+%s’

Cette vidéo montre est un mini tutoriel qui peut vous aider.

Juan
la source