En tant que système d'exploitation multi-utilisateurs et multitâches, une fois les fichiers sous Linux supprimés, ils sont difficiles à récupérer. Bien que la commande delete marque uniquement le nœud du fichier pour suppression et n'efface pas réellement le contenu du fichier, d'autres utilisateurs et certains processus qui écrivent sur le disque écraseront rapidement les données.
1. Une brève introduction à la structure du système de fichiers Ext2
Dans le système de fichiers Ext2 utilisé par Linux, les fichiers sont stockés en blocs. Par défaut, la taille de chaque bloc est de 1 Ko et les différents blocs sont distingués par des numéros de bloc. Chaque fichier possède également un nœud contenant le propriétaire du fichier, les autorisations de lecture et d'écriture, le type de fichier et d'autres informations. Pour un fichier inférieur à 12 blocs, le numéro de bloc du bloc de données du fichier est stocké directement dans le nœud. Si le fichier est supérieur à 12 blocs, alors le nœud stocke le numéro de bloc d'un bloc indirect après 12 numéros de bloc. Dans le bloc correspondant à ce numéro de bloc indirect, les numéros de bloc de 256 blocs de données de fichier sont stockés (chaque bloc dans Ext2fs). Le numéro occupe 4 octets, donc le numéro de bloc pouvant être stocké dans un bloc est 1024/4=256). S'il existe des fichiers plus volumineux, les blocs indirects secondaires et ** les blocs indirects apparaîtront également dans le nœud.
2. Méthodes pour récupérer des fichiers supprimés accidentellement
La plupart des distributions Linux fournissent un outil debugfs qui peut être utilisé pour modifier le système de fichiers Ext2. Mais avant d’utiliser cet outil, il reste encore du travail à faire.
Tout d’abord, remontez la partition où se trouve le fichier supprimé accidentellement en mode lecture seule. Utilisez la commande suivante : (en supposant que le fichier se trouve dans la partition /usr)
mount -r -n -o remount /usr -r indique un montage en lecture seule ; -n indique ne pas écrire dans /etc/mtab Si vous restaurez des fichiers sur /etc, ajoutez ce paramètre. Si le système indique que la partition xxx est occupée, vous pouvez utiliser la commande fuser pour vérifier quels processus utilisent les fichiers sur cette partition :
unité de fusion –v –m /usr
S'il n'y a aucun processus important, arrêtez-les avec la commande suivante :
fusion -k –v –m /usr
Ces systèmes de fichiers peuvent ensuite être remontés.
Si tous les fichiers sont installés dans une grande partition /, vous pouvez utiliser Linux Single pour passer en mode mono-utilisateur à l'invite de démarrage afin de minimiser les risques que le processus système écrive des données sur le disque dur, ou simplement suspendre le disque dur à un autre emplacement. .sur la machine. De plus, n'écrivez pas les données récupérées dans / ci-dessus pour éviter d'endommager ces données utiles. S'il y a des dos/windows sur la machine, vous pouvez écrire sur ces partitions :
mont –r –n /dev/hda1 /mnt/had
Ensuite, vous pouvez exécuter debugfs : (en supposant que Linux soit dans /dev/hda5)
#debugfs /dev/hda5
L'invite debugfs debugfs apparaîtra :
Utilisez la commande lsdel pour répertorier les informations sur de nombreux fichiers supprimés :
débogage:lsdel debugfs : 2692 inodes supprimés trouvés. Mode propriétaire de l'inode Taille des blocs Heure supprimée 164821 0 100600 8192 1/ 1 dimanche 13 mai 19:22:46 2001 36137 0 100644 4 1/ 1 mar 24 avril 10:11:15 2001 196829 0 100644 149500 38/ 38 lundi 27 mai 13:52:04 2001 |
De nombreux fichiers sont répertoriés (2692 trouvés ici). Le premier champ est le numéro de nœud du fichier, le deuxième champ est le propriétaire du fichier, le troisième champ est les autorisations de lecture et d'écriture, suivi de la taille du fichier, du nombre de blocs occupés et. heure de suppression.
Nous pouvons ensuite déterminer lesquels nous avons besoin en fonction de la taille du fichier et de la date de suppression. Par exemple, nous souhaitons restaurer le fichier avec le nœud 196829 :
Vous pouvez d'abord regarder l'état des données du fichier :
debugfs:stat <196829> Inode : 196829 Type : normal Mode : 0644 Indicateurs : 0x0 Version : 1 Utilisateur : 0 Groupe : 0 Taille : 149500 ACL de fichier : 0 ACL de répertoire : 0 Liens : 0 Nombre de blocs : 38 Fragment : Adresse : 0 Numéro : 0 Taille : 0 ctime : 0x31a9a574 -- lundi 27 mai 13:52:04 2001 atime: 0x31a21dd1 -- mardi 21 mai 20:47:29 2001 mtime: 0x313bf4d7 -- mar 5 mars 08:01:27 2001 dtime: 0x31a9a574 -- lundi 27 mai 13:52:04 2001 BLOCS : 594810 594811 594814 594815 594816 594817 TOTAL : 38 |
Ensuite, vous pouvez utiliser la commande dump pour restaurer le fichier :
debugfs : dump <196829> /mnt/hda/01.sav
Cela restaurera le fichier. Quitter le débogage :
débogage : quitter
Une autre façon consiste à modifier l'inode manuellement :
debugfs: mi <196829> Mode [0100644] ID utilisateur [0] ID de groupe [0] Taille [149500] Heure de création [0x31a9a574] Heure de modification [0x31a9a574] Temps d'accès [0x31a21dd1] Temps de suppression [0x31a9a574] 0 Nombre de liens [0] 1 Nombre de blocs [38] Indicateurs de fichier [0x0] Réservé1[0] Fichier acl [0] ACL de répertoire [0] Adresse du fragment [0] Numéro de fragment [0] Taille des fragments [0] Bloc direct #0 [594810] Blocage indirect triple [0] |
Après avoir utilisé la commande mi, une ligne d'informations est affichée pour modification à la fois. Pour les autres lignes, vous pouvez directement appuyer sur Entrée pour confirmer, modifier l'heure de suppression à 0 (non supprimée) et modifier le nombre de liens à 1. Après avoir effectué les modifications, quittez debugfs :
débogage : quitter
Vérifiez ensuite /dev/hda5 avec fsck
fsck /dev/hda5
Le programme dira qu'il a trouvé le bloc de données perdu et le mettra dans perdu+trouvé. Les fichiers de ce répertoire correspondent à ce que nous voulons.