7 votes

Le contenu d'une partition peut-il être récupéré après l'écrasement de la table de partition ?

J'ai lancé une commande pour rendre mon disque dur externe amorçable en sachant que c'était risqué étant donné que la commande elle-même ne me permettait pas de spécifier une partition sur laquelle écrire. (Avec le recul, je qualifierais maintenant cette décision de stupide - mais à l'époque, j'ai essayé cette commande :)

$ sudo dd if=/Users/MyUser/Downloads/Fedora-17-x86_64-Live-Desktop.iso \
> of=/dev/disk1 bs=1m

Pour lequel le résultat que j'ai reçu était :

645+0 records in
645+0 records out
676331520 bytes transferred in 98.578444 secs (6860846 bytes/sec)

J'ai tout de suite su que c'était louche puisque /dev/disk1 a été divisé en trois partitions, qui ont toutes été hfs . Puisque c'est presque impossible de trouver bon informations sur la création d'un fichier de démarrage partition à partir d'un périphérique USB externe, j'ai essayé malgré les risques.

Je n'ai plus rien écrit sur mon disque dur externe après ce moment, car maintenant la seule partition que je vois lorsque je monte le disque est "Fedora 17".

Quelle est la probabilité de récupérer les fichiers que j'avais stockés dans ma partition de sauvegarde ? Et comment devrait J'ai fait ça en premier lieu ?


NOTE : Voici comment étaient mes partitions avant J'ai essayé dd .

$ diskutil list
/dev/disk0
#:                       TYPE NAME                    SIZE       IDENTIFIER
0:      GUID_partition_scheme                        *160.0 GB   disk0
1:                        EFI                         209.7 MB   disk0s1
2:                  Apple_HFS Macintosh HD            159.7 GB   disk0s2
/dev/disk1
#:                       TYPE NAME                    SIZE       IDENTIFIER
0:      GUID_partition_scheme                        *1.0 TB     disk1
1:                        EFI                         209.7 MB   disk1s1
2:                  Apple_HFS Linux                   50.0 GB    disk1s2
3:                  Apple_HFS Backup                  500.0 GB   disk1s3
4:                  Apple_HFS Misc                    449.6 GB   disk1s4

6voto

John S Perayil Points 648

Rapide et simple : Comme il s'agit d'un disque GPT, vous pouvez exécuter gpart recover /dev/disk1 pour fixer la table. Vous avez détruit les premiers ~700MB du disque, donc toutes les partitions qui touchent cette zone ont disparu aussi (plus ou moins). Le reste du disque devrait être en bon état. Je ne suis pas sûr qu'OSX soit livré avec gpart, donc vous devrez peut-être le télécharger quelque part.

Les détails plus longs : En ce qui concerne la ou les partitions qui n'ont été que partiellement écrasées, certains des fichiers peuvent être récupérés. Les outils pour le faire sont beaucoup plus compliqués et vous voudrez trouver quelqu'un qui vraiment sait ce qu'ils font pour ça. Si vous êtes concerné par l'un de ces fichiers, n'essayez rien d'autre que de débrancher le disque. De plus, les données écrasées peuvent probablement être récupéré par un service de récupération des données, mais cela coûterait des dizaines de milliers de dollars.

De plus, s'il s'agissait d'un disque MBR, vous seriez complètement fichu, à moins que vous ne connaissiez la taille exacte et les décalages de toutes les partitions. Ces informations peuvent être imprimées à partir de fdisk, mais il est préférable de ne pas faire ce genre d'erreur.

5voto

ughoavgfhw Points 4370

Selon votre sortie, vous avez copié 645MB sur le disque, ce qui signifie que l'EFI et les premiers ~440MB de la partition Linux ont été écrasés. Vos partitions Backup et Misc n'ont pas été modifiées, donc les données qu'elles contiennent peuvent être récupérées... si vous pouvez les trouver.

Cela peut être relativement facile 1 . Les tables de partition GUID sont stockées au début et à la fin du disque, donc tant qu'OS X n'a pas écrasé celles de la fin, vous pouvez les utiliser pour trouver vos données.

1 Par rapport à la recherche manuelle des en-têtes HFS, les commandes suivantes sont assez faciles. H


Tout d'abord, vous devez déterminer le nombre de secteurs de votre disque. Dans le Terminal, exécutez diskutil info disk1 (ou quel que soit le nom sous lequel votre disque est actuellement connecté), et recherchez la section Taille totale. Vous devriez y trouver le nombre exact de secteurs et, en dessous, la taille des secteurs. J'appellerai ces valeurs N et S, respectivement.

Ensuite, exécutez ces commandes, en remplaçant disk1, N et S comme il convient. Ceci copiera le dernier bloc de votre disque dans un fichier nommé partition_header.hex . Ensuite, il imprime certaines données de ce fichier.

sudo dd if=/dev/disk1 of=partition_header.hex bs=S skip=$((N-1)) count=1
od -cN 8 partition_header.hex
od -tx4 -N 8 -j 72 partition_header.hex
-d -tu4 -N 4 -j 84 partition_header.hex

La sortie pour les trois od devrait ressembler à ceci :

0000000    E   F   I       P   A   R   T      
0000110          xxxxxxxx        yyyyyyyy        
0000124              ssss               

Si la sortie de la première commande ne correspond pas à cette première ligne, vos tables de partition ont été écrasées. Voir mes suggestions à la fin. Les valeurs xxxxxxxx y yyyyyyyy sont deux nombres hexadécimaux. Ils doivent être des chiffres et des lettres compris entre a et f, et ils vous indiquent où sont stockées les données de la partition. La valeur ssss est un nombre qui vous indique la taille d'une entrée de partition. Exécutez cette commande pour obtenir les données de la partition, en remplaçant disk1, S, xxxxxxxx , yyyyyyyy et ssss (notez que le x après le 0 est littéral). Si ssss est supérieure à 1/4 S, vous devrez peut-être augmenter le paramètre de comptage, mais cela est peu probable.

sudo dd if=/dev/disk1 of=partition_entry.hex bs=S skip=$((0xyyyyyyyyxxxxxxxx)) count=1
od -tc -N 8 -j $((56+2*ssss)) partition_entry.hex
od -tc -N 8 -j $((56+3*ssss)) partition_entry.hex

Les deux dernières commandes impriment le début des noms des troisième et quatrième partitions, chaque lettre étant suivie de \0 (en raison de l'encodage sur le disque). Si votre table de partition est toujours valide, il devrait s'agir de "Back" et "Misc". Si c'est le cas, il est temps de récupérer la table de partition complète et d'effectuer les modifications nécessaires pour la stocker à l'autre extrémité du disque. Exécutez ces deux commandes pour obtenir les LBA d'en-tête appropriés et le nombre total d'entrées de partition :

od -tx1 -N 16 -j 24 partition_header.hex
od -td4 -N 4 -j 80 partition_header.hex

La première commande renvoie aa bb cc dd ee ff gg hh ii jj kk ll mm oo pp qq . Très probablement, ii est 01 y jj par le biais de qq son 00 . La deuxième commande renvoie nnnn probablement 128. Maintenant, nous pouvons lire la table de partition entière, au lieu de seulement les premières. Exécutez cette commande, en faisant les substitutions appropriées :

sudo dd if=/dev/disk1 of=partition_entry.hex bs=ssss skip=$((0xyyyyyyyyxxxxxxxx * S / ssss)) count=nnnn

Nous devons maintenant apporter quelques modifications à l'en-tête puisque les données seront stockées à un autre endroit.

printf '\xii\xjj\xkk\xll\xmm\xoo\xpp\xqq\xaa\xbb\xcc\xdd\xee\xff\xgg\xhh' | dd of=partition_header.hex bs=8 seek=3 count=2 conv=notrunc
printf '\x02\x00\x00\x00\x00\x00\x00\x00' | dd of=partition_header.hex bs=8 seek=9 count=1 conv=notrunc

La première commande échange l'en-tête actuel et les autres adresses d'en-tête. Désolé d'avoir remplacé chaque octet séparément, mais je ne connaissais pas de moyen plus simple. La deuxième commande écrit la nouvelle adresse des données d'entrée. La valeur 2 que j'ai utilisée suppose que ii était de 1 et jj par le biais de qq S'ils ont d'autres valeurs, augmentez-les d'une unité et utilisez-les à la place. La seule chose dont nous avons besoin maintenant est le bon MBR, qui n'est pas sur votre disque puisqu'il ne fait pas partie de la table de partition. Heureusement, vous pouvez utiliser celui de votre disque interne, vous devez donc le copier dans un fichier.

sudo dd if=/dev/disk0 of=drive_mbr.hex bs=512 count=1

Maintenant que nous avons toutes les données, nous pouvons les écrire. Tout d'abord, démontez le volume Fedora s'il est monté.

diskutil unmountDisk disk1

Ensuite, copiez chaque pièce au début du lecteur. Assurez-vous de faire les substitutions appropriées dans ces commandes, écrire sur le mauvais disque ne serait pas bon.

sudo dd if=partition_entry.hex of=/dev/disk1 bs=S seek=2 count=nnnn
sudo dd if=partition_header.hex of=/dev/disk1 bs=S seek=1 count=1
sudo dd if=drive_mbr.hex of=/dev/disk1 bs=512 count=1

Les valeurs recherchées sont basées sur l'hypothèse que ii par le biais de qq correspondaient aux valeurs probables. Si ce n'est pas le cas, utilisez $((0xqqppoommllkkjjii)) pour la deuxième commande et $((0xqqppoommllkkjjii+1)) pour le premier.

Après avoir exécuté ces commandes, OS X va probablement recharger le disque automatiquement et charger les partitions. Si ce n'est pas le cas, déconnectez-le et reconnectez-le. La partition Linux ne pourra probablement pas être montée, puisque son en-tête a été écrasé, mais les deux autres devraient fonctionner correctement. Malgré cela, je vous suggère de copier vos données de la partition Linux.


Si votre table de partition est corrompue :

L'option qui a le plus de chance de réussir est de rechercher manuellement les en-têtes HFS au début de votre partition de sauvegarde. Le format d'un volume HFS est décrit ici . Fondamentalement, vous devrez calculer le décalage approximatif de la partition dans le lecteur en utilisant la carte de partition que vous avez, puis rechercher chaque secteur dans la zone à la recherche de l'en-tête de volume. Vous pourriez probablement écrire un script pour rechercher pour vous.

Une autre option serait d'utiliser un logiciel de récupération de fichiers. Je ne sais pas quel logiciel est disponible pour gérer cette situation, je ne peux donc pas dire grand-chose à ce sujet.

2voto

Jon Cahill Points 2516

Je l'ai fait moi-même :

# dd if=freebsd.img of=/dev/hda

à un moment donné dans le passé (oops ! Je voulais dire fd0 !) Je peux à peu près garantir que le contenu de disk1s1 y disk1s2 sont mis à la poubelle.

Mais disk1s3 y disk1s4 sera très bien ! Vous devez juste trouver ce que la table de partition est censée être et la corriger.

Je suggère de récupérer la sauvegarde GPT à la fin du disque ou simplement de rechercher les marqueurs du système de fichiers pour déterminer où ils sont censés se trouver.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X