Maison > Article > Opération et maintenance > Comment récupérer des fichiers supprimés sous Linux ?
Comment récupérer des fichiers supprimés sous Linux ? L'article suivant vous présentera comment récupérer des fichiers supprimés sous Linux. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. J'espère qu'il sera utile à tout le monde.
Linux n'a pas de corbeille comme Windows. Fondamentalement, les fichiers ne peuvent pas être récupérés à l'aide de rm -rf *
.
Alors la question est :
Pour les fichiers supprimés accidentellement sous Linux, sommes-nous vraiment incapables de les récupérer via un logiciel ?
La réponse est bien sûr non. toujours être récupéré via un logiciel. La restauration de fichiers supprimés accidentellement peut être divisée en deux situations :
L'une est que des informations de suppression existent dans le processus après la suppression
L'autre est suppression À l'avenir, le processus est introuvable et ne peut être restauré qu'à l'aide d'outils.
Ensuite, nous utiliserons des exemples pour expliquer deux méthodes de récupération différentes en cas de suppression accidentelle :
Si le processus de suppression accidentelle d'un fichier est toujours là :
Cela signifie généralement qu'un processus actif a une entrée ou une sortie standard continue. Une fois le fichier supprimé, le PID du processus existe toujours. C'est aussi la raison pour laquelle certains serveurs suppriment certains fichiers mais le disque n'est pas libéré.
Ouvrez un terminal et effectuez l'opération cat append sur un fichier de test :
[root@docking ~]# echo "This is DeleteFile test." > deletefile.txt [root@docking ~]# ls deletefile.txt [root@docking ~]# cat >> deletefile.txt Add SomeLine into deletefile for fun.
Ouvrez un autre terminal pour afficher le fichier et vous pourrez voir clairement le contenu :
[root@docking ~]# ls deletefile.txt [root@docking ~]# cat deletefile.txt This is DeleteFile test. Add SomeLine into deletefile for fun.
À ce stade fois, supprimez le fichier rm -f deletefile.txt
[root@docking ~]# rm -f deletefile.txt [root@docking ~]# ls #命令查看这个目录,文件已经不存在了,那么现在我们将其恢复出来。
lsof vérifie si le processus de fichier supprimé existe toujours.
Si vous ne l'avez pas installé, veuillez le faire vous-même yum install lsof
ou apt-get install lsof
1. peut d'abord vérifier ceux supprimés avec lsof Le fichier est-il toujours là
[root@docking ~]# lsof | grep deletefile cat 21796 root 1w REG 253,1 63 138860 /root/deletefile.txt (deleted)
2 Restaurercp /proc/pid/fd/1 /指定目录/文件名
Entrez le répertoire du processus, généralement /proc/pid/fd/, pour. la situation actuelle :
[root@docking ~]# cd /proc/21796/fd [root@docking fd]# ll 总用量 0 lrwx------ 1 root root 64 1月 18 22:21 0 -> /dev/pts/0 l-wx------ 1 root root 64 1月 18 22:21 1 -> /root/deletefile.txt (deleted) lrwx------ 1 root root 64 1月 18 22:21 2 -> /dev/pts/0
Opération de restauration :
[root@docking fd]# cp 1 ~/deletefile.txt.backup [root@docking fd]# cat ~/deletefile.txt.backup This is DeleteFile test. Add SomeLine into deletefile for fun.
3. Restauration terminée.
Le processus de fichiers supprimés accidentellement n'existe plus, utilisez l'outil pour le restaurer
Préparez quelques répertoires de fichiers
#准备一份挂载的盘 mkdir backuptest cd backuptest mkdir deletetest mkdir deletetest/innerfolder echo "Delete a folder test." > deletetest/innerfolder/deletefile.txt echo "tcpdump:x:172:72::/:/sbin/nologin" > tmppasswd
La structure de répertoires enfin préparée est comme suit :
taroballs@taroballs-PC:/media/taroballs/taroballs/backuptest$ cd .. taroballs@taroballs-PC:/media/taroballs/taroballs$ tree backuptest/ backuptest/ ├── deletetest │ └── innerfolder │ └── deletefile.txt └── tmppasswd 2 directories, 2 files
Commencez maintenant à supprimer le répertoirerm -rf backuptest/
taroballs@taroballs-PC:/media/taroballs/taroballs$ rm -rf backuptest/ taroballs@taroballs-PC:/media/taroballs/taroballs$ ls -l 总用量 0
Dans ce cas, il n'y a généralement pas de démon ou de processus en arrière-plan qui continue de le saisir, donc la suppression est vraiment supprimée. lsof ne peut pas le voir non plus, vous devez donc utiliser des outils pour le restaurer.
Commencez dès maintenant à récupérer les fichiers supprimés accidentellement.
L'outil que nous utilisons est un outil tiers extundelete. Les étapes de récupération et les précautions sont les suivantes :
Arrêtez d'effectuer toute opération sur la partition actuelle pour éviter que l'inode ne soit écrasé. Si l'inode est écrasé, il sera essentiellement restauré.
Pour exagérer, par exemple, arrêtez le service de la partition où il se trouve, désinstallez le périphérique où se trouve le répertoire, et déconnectez le réseau si nécessaire.
Utilisez la commande dd pour sauvegarder la partition actuelle afin d'éviter toute perte de données causée par un échec de récupération de logiciel tiers.
Convient aux situations où les données sont très importantes. Voici un exemple, il n'y a donc pas de sauvegarde. Pour la sauvegarde, envisagez la méthode suivante : dd if=/path/filename of=. /dev/vdc1
Utilisez la commande umount pour démonter la partition actuelle du périphérique. Ou utilisez la commande fuser umount /dev/vdb1
S'il vous indique que le périphérique est occupé, vous pouvez utiliser la commande fuser pour forcer la désinstallation : fuser -m -v -i - k ./
Téléchargez l'outil tiers extundelete pour l'installer et recherchez les fichiers supprimés accidentellement pour restaurer
installation de l'outil extunelete
Adresse de téléchargement extunelete : http://extundelete.sourceforge.net/
wget https://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
Extraire le fichiertar jxvf extundelete-0.2.4.tar.bz2
Si cette erreur est signalée
[root@docking ~]# tar jxvf extundelete-0.2.4.tar.bz2 tar (child): bzip2:无法 exec: 没有那个文件或目录 tar (child): Error is not recoverable: exiting now tar: Child returned status 2 tar: Error is not recoverable: exiting now
, utilisez yum -y install bzip2
pour le résoudre
[root@docking ~]# tar jxvf extundelete-0.2.4.tar.bz2 extundelete-0.2.4/ extundelete-0.2.4/acinclude.m4 extundelete-0.2.4/missing extundelete-0.2.4/autogen.sh extundelete-0.2.4/aclocal.m4 extundelete-0.2.4/configure extundelete-0.2.4/LICENSE extundelete-0.2.4/README ...................................................
cd extundelete-0.2.4 ./configure
Si une erreur est signalée à cette étape
[root@docking extundelete-0.2.4]# ./configure Configuring extundelete 0.2.4 configure: error: in `/root/extundelete-0.2.4': configure: error: C++ compiler cannot create executables See `config.log' for more details
, utilisez yum -y install gcc-c++
pour la résoudre.
Si une erreur est toujours signalée après l'exécution de l'étape précédente,
[root@docking extundelete-0.2.4]# ./configure Configuring extundelete 0.2.4 configure: error: Can't find ext2fs library
puis utilisez yum -y install e2fsprogs e2fsprogs-devel
pour la résoudre. #Ubuntu的解决办法为sudo apt-get install e2fslibs-dev e2fslibs-dev
Si rien ne va pas, la configuration devrait être terminée avec succès ici
[root@docking extundelete-0.2.4]# ./configure Configuring extundelete 0.2.4 Writing generated files to disk [root@docking extundelete-0.2.4]#
Enfin make
puis make install
[root@docking extundelete-0.2.4]# make make -s all-recursive Making all in src extundelete.cc: 在函数‘ext2_ino_t find_inode(ext2_filsys, ext2_filsys, ext2_inode*, std::string, int)’中: extundelete.cc:1272:29: 警告:在 {} 内将‘search_flags’从‘int’转换为较窄的类型‘ext2_ino_t {aka unsigned int}’ [-Wnarrowing] buf, match_name2, priv, 0}; ^ [root@docking extundelete-0.2.4]# make install Making install in src /usr/bin/install -c extundelete '/usr/local/bin'
l'installation d'extundelete est terminée. terminé
Rechercher les fichiers supprimés accidentellement :
Utilisez df -lh
pour afficher la monture :
taroballs@taroballs-PC:~$ df -lh 文件系统 容量 已用 可用 已用% 挂载点 udev 1.9G 0 1.9G 0% /dev tmpfs 387M 1.8M 385M 1% /run /dev/sda2 92G 61G 26G 71% / tmpfs 1.9G 49M 1.9G 3% /dev/shm tmpfs 5.0M 4.0K 5.0M 1% /run/lock tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup /dev/sda3 104G 56G 44G 57% /home tmpfs 387M 40K 387M 1% /run/user/1000 /dev/sda4 70G 20G 47G 30% /media/taroballs/d8423f8c-d687-4c03-a7c8-06a7fb57f96d /dev/sdb1 6.8G 4.1G 2.8G 60% /media/taroballs/taroballs /dev/sr0 4.0G 4.0G 0 100% /media/taroballs/2018-01-16-12-36-00-00 taroballs@taroballs-PC:~$ cd /media/taroballs/taroballs/ taroballs@taroballs-PC:/media/taroballs/taroballs$
Comme vous pouvez le voir, notre répertoire / media/taroballs /taroballs
Montez dans le système de fichiers /dev/sdb1.
démontez notre disque de montage
Par exemple :
taroballs@taroballs-PC:~$ df -lh | grep /dev/sdb1 /dev/sdb1 6.8G 4.1G 2.8G 60% /media/taroballs/taroballs
démonter ce répertoire
taroballs@taroballs-PC:~$ umount /media/taroballs/taroballs taroballs@taroballs-PC:~$ df -lh | grep /dev/sdb1 taroballs@taroballs-PC:~$ #记得删除一定要后umount哦,不然二次写入谁也帮不了你呢。
Restaurer via le nœud inode
taroballs@taroballs-PC:~$ mkdir recovertest taroballs@taroballs-PC:~$ cd recovertest/ taroballs@taroballs-PC:~/recovertest$
Effectuer la récupérationextundelete /dev/sdb1 --inode 2
taroballs@taroballs-PC:/media/taroballs/taroballs$ sudo extundelete /dev/sdb1 --inode 2 NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 8 groups loaded. Group: 0 Contents of inode 2: . .省略N行 File name | Inode number | Deleted status . 2 .. 2 deletetest 12 Deleted tmppasswd 14 Deleted
Découvrir les fichiers que nous avons supprimés via le dossier d'analyse et maintenant effectuez l’opération de récupération.
(1) Récupérer un seul fichier tmppasswd
taroballs@taroballs-PC:~/recovertest$ extundelete /dev/sdb1 --restore-file passwd NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 8 groups loaded. Loading journal descriptors ... 46 descriptors loaded. Successfully restored file tmppasswd
Le fichier récupéré est placé dans le répertoire courant RECOVERED_FILES.
Afficher les fichiers récupérés :
taroballs@taroballs-PC:~/recovertest$ cat tmppasswd tcpdump:x:172:72::/:/sbin/nologin
(2) Restaurer le répertoire deletetest
extundelete /dev/sdb1 --restore-directory deletetest NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 8 groups loaded. Loading journal descriptors ... 46 descriptors loaded. Searching for recoverable inodes in directory deletetest ... 5 recoverable inodes found. Looking through the directory structure for deleted files ...
(3) Restaurer tout
taroballs@taroballs-PC:~/recovertest$ extundelete /dev/sdb1 --restore-all NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 8 groups loaded. Loading journal descriptors ... 46 descriptors loaded. Searching for recoverable inodes in directory / ... 5 recoverable inodes found. Looking through the directory structure for deleted files ... 0 recoverable inodes still lost. taroballs@taroballs-PC:~/recovertest$ tree backuptest/ ├── deletetest │ └── innerfolder │ └── deletefile.txt └── tmppasswd 2 directories, 2 files
(4) Restaurer l'inode spécifié
taroballs@taroballs-PC:~/recovertest$ extundelete /dev/sdb1 --restore-inode 14 NOTICE: Extended attributes are not restored. Loading filesystem metadata ... 8 groups loaded. Loading journal descriptors ... 46 descriptors loaded. taroballs@taroballs-PC:~/recovertest$ cat file.14 tcpdump:x:172:72::/:/sbin/nologin #注意恢复inode的时候,恢复 出来的文件名和之前不一样,需要单独进行改名。
Enfin ci-joint l'utilisation de extundelete
:
$ extundelete --help Usage: extundelete [options] [--] device-file Options: --version, -[vV] Print version and exit successfully. --help, Print this help and exit successfully. --superblock Print contents of superblock in addition to the rest. If no action is specified then this option is implied. --journal Show content of journal. --after dtime Only process entries deleted on or after 'dtime'. --before dtime Only process entries deleted before 'dtime'.Actions: --inode ino Show info on inode 'ino'. --block blk Show info on block 'blk'. --restore-inode ino[,ino,...] Restore the file(s) with known inode number 'ino'. The restored files are created in ./RECOVERED_FILES with their inode number as extension (ie, file.12345). --restore-file 'path' Will restore file 'path'. 'path' is relative to root of the partition and does not start with a '/' The restored file is created in the current directory as 'RECOVERED_FILES/path'. --restore-files 'path' Will restore files which are listed in the file 'path'. Each filename should be in the same format as an option to --restore-file, and there should be one per line. --restore-directory 'path' Will restore directory 'path'. 'path' is relative to the root directory of the file system. The restored directory is created in the output directory as 'path'. --restore-all Attempts to restore everything. -j journal Reads an external journal from the named file. -b blocknumber Uses the backup superblock at blocknumber when opening the file system. -B blocksize Uses blocksize as the block size when opening the file system. The number should be the number of bytes. --log 0 Make the program silent. --log filename Logs all messages to filename.--log D1=0,D2=filename Custom control of log messages with comma-separated Examples below: list of options. Dn must be one of info, warn, or --log info,error error. Omission of the '=name' results in messages --log warn=0 with the specified level to be logged to the console. --log error=filename If the parameter is '=0', logging for the specified level will be turned off. If the parameter is '=filename', messages with that level will be written to filename. -o directory Save the recovered files to the named directory. The restored files are created in a directory named 'RECOVERED_FILES/' by default.
推荐:《linux教程》
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!