J'ai un disque dur défaillant qui est incapable d'écrire ou de lire les premiers secteurs du disque. Cela donne juste des erreurs d'E / S et c'est tout ce qu'il y a. Il y a d'autres zones sur le disque qui semblent (pour la plupart) correctes. J'essaie de monter une partition (ext4) et de voir si je peux accéder à certains fichiers que je voudrais récupérer. Étant donné que la mount
commande prend en charge une offset
option, je devrais pouvoir monter le système de fichiers même si la table de partition est illisible et non inscriptible. Le problème est de savoir comment trouver le décalage. Aucun des outils ext4 ne semble avoir cette fonctionnalité particulière.
filesystems
partition
data-recovery
ext4
Ernest A
la source
la source
Réponses:
Il n'y a pas de décalage standard en soi, car vous pouvez bien sûr démarrer la partition où vous le souhaitez. Mais supposons un instant que vous recherchez la première partition, et qu'elle a été créée en acceptant plus ou moins les valeurs par défaut. Vous pouvez alors le trouver à deux endroits, en supposant que vous utilisiez une table de partition DOS traditionnelle:
Maintenant, pour continuer, vous voudrez prendre votre outil de vidage hexadécimal préféré et en apprendre un peu plus sur la disposition du disque ext4 . En particulier, il commence par 1024 octets de remplissage, que ext4 ignore. Vient ensuite le superbloc. Vous pouvez reconnaître le superbloc en vérifiant le nombre magique 0xEF53 à l'offset 0x38 (depuis le début du superbloc, ou 0x438 depuis le début de la partition, ou 1080 en décimal.) Le nombre magique est petit-boutien. Il est donc réellement stocké sur le disque en tant que 0x53EF.
Voici à quoi cela ressemble
xxd -a
:0000000: 0000 0000 0000 0000 0000 0000 0000 0000 ................ * 0000400: 0040 5d00 0084 7401 33a0 1200 33db a600 .@]...t.3...3... 0000410: 4963 5300 0000 0000 0200 0000 0200 0000 IcS............. 0000420: 0080 0000 0080 0000 0020 0000 6637 0952 ......... ..f7.R 0000430: 6637 0952 0200 1600 53ef 0100 0100 0000 f7.R....S....... 0000440: 9938 f851 004e ed00 0000 0000 0100 0000 .8.Q.N..........
Notez que lorsque vous donnez l'offset à monter (ou losetup), vous devez donner l'offset à l'endroit où le remplissage commence - pas le superbloc.
Maintenant, si ce n'est pas la première partition, ou sinon n'est pas dans l'un des deux (trois) endroits attendus, vous pouvez essentiellement rechercher le nombre magique 0xEF53. C'est ce que
testdisk
(recommandé dans un commentaire) fait pour vous.la source
testdisk
ne le trouverait pas. Merci à tous pour l'aide.dd if=/dev/sda skip=$start_sector | xxd -a | grep '[02468]30: .... .... .... .... 53ef'
pour obtenir des correspondances probables. Probablement pas très rapide, mais vous pouvez le laisser fonctionner pendant que vous trouvez une meilleure méthode.testdisk
, j'ai juste dû ajouter une modification pour un en-tl;dr:
têteSur la base de la réponse de @ derobert , j'ai écrit un programme ( gist ) qui analysera un flux d'entrée à partir de
dd
et analysera chaque secteur pour quelque chose qui ressemble au début d'une partition ext.Cela fonctionnera au moins aussi vite que
dd
peut lire à partir de votre disque dur. Une version abrégée est ci-dessous.L'utilisation la plus simple est juste
sudo dd if=/dev/xxx | ext2scan
, bien que vous souhaitiez probablement modifier ladd
commande pour améliorer la taille du bloc ou choisir une région à rechercher.Remarque: il trouvera non seulement le début des partitions, mais également des superblocs à l' intérieur.
Dans les deux cas, je recommanderais d'utiliser
dumpe2fs
pour analyser les résultats. Vous pouvez sauvegarder le début du superbloc suspect dans un fichier (au moins les six premiers secteurs, selon mon test informel), et s'il s'agit d'un superbloc,dumpe2fs
vous dira (entre autres) l'emplacement relatif des autres superblocs .la source
Faites une supposition quant au début de la partition et appliquez une force brute:
J'imagine que cela pourrait prendre un certain temps, mais si vous avez déjà passé 6 heures avec testdisk, cela vaut peut-être la peine d'essayer.
la source
echo "--->$i<---"
ligne à cause de cela car sinon, il est impossible de mesurer les progrès. Je pense que vous pourriez augmenterbsz
à 4096, ce qui accélérera les choses.Essayez différentes options (par exemple, en utilisant debugfs et fsck.ext4):
debugfs:
Vous devez d'abord monter debugfs (pas le disque dur défaillant lui-même):
http://johnsofteng.wordpress.com/2013/11/20/sysfs-procfs-sysctl-debugfs-and-other-similar-kernel-interfaces/
http://afzalkhanlinuxtalk.wordpress.com/2013/08/07/how-to-recover-deleted-file-in-linux/comment-page-1/#comment-8
http://blesseddlo.wordpress.com/2010/10/12/using-debugfs/
(essentiellement, consiste à utiliser "debugfs -w" avec le mode activé en écriture, puis suivi de "lsdel" pour répertorier tous les fichiers supprimés). vous pouvez également utiliser
et voici fsck.ext4:
http://linuxexpresso.wordpress.com/2010/03/31/repair-a-broken-ext4-superblock-in-ubuntu/
Un autre est "sleuthkit" ("sudo apt-get install sleuthkit") qui a une commande comme "istat" pour fournir des informations de blocs sur les inodes - à partir desquelles vous pouvez obtenir le décalage et ainsi bloquer facilement le contenu des données.
https://www.ibm.com/developerworks/cn/linux/l-cn-ext4resize/
(BTW, si la taille du bloc est 1024, à partir de la commande "show_super_stats" de debugfs, il s'ensuit que le bloc 1 est décalé de 1024 octets par rapport au début du disque, et chaque groupe de blocs peut également avoir plusieurs blocs.)
la source
J'avais une image de micrologiciel de livre électronique qui comprenait une image de partition ext3fs, afin de monter et d'éditer que je devais numériser l'image à l'aide de l' outil bgrep pour trouver toutes les positions du nombre magique ext3fs
0x53EF
et essayer de monter en utilisant les décalages trouvés.Voici un script raccourci qui effectue le montage:
Script complet situé ici .
la source
Ceci n'est pas testé mais je pense que vous pouvez utiliser la méthode discutée dans ce SU Q&A intitulé: Recherche inversée d'inode / fichier à partir d'un décalage dans un périphérique brut sur linux et ext3 / 4? .
Il semble que vous pouvez utiliser l'inode d'un fichier + le décalage des disques + la taille du bloc pour déterminer le décalage d'un fichier.
la source