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 ?

青灯夜游
青灯夜游original
2020-04-20 16:12:2319081parcourir

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.

Comment récupérer des fichiers supprimés sous Linux ?

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn