2009-09-05 5 views
3

J'ai récupéré un disque dur en utilisant dd_rescue, ce qui me fournit une liste de tous les secteurs de périphériques qu'il pouvait pas de copie en raison d'erreurs matérielles.Comment mapper des secteurs physiques d'un disque aux fichiers qui les contiennent sur un volume HFS + sur Mac OS X

Je voudrais prendre cette liste, et écrire un outil pour me donner tous les fichiers qui contiennent ces secteurs défectueux afin que je puisse les supprimer. Je ne suis pas sûr quelles APIs je peux utiliser pour faire ceci - essentiellement je veux obtenir une liste de tous les dossiers sur le disque et pour chaque dossier, une liste des secteurs de secteurs qu'il occupe sur le disque. Ma première supposition est que je vais itérer sur chaque entrée du répertoire sur le disque et vérifier si le fichier chevauche l'un de ces secteurs défectueux. Peut-être qu'il y a un meilleur moyen.

Répondre

2

Si vous souhaitez mapper l'emplacement des données d'un fichier sur un bloc physique (secteur), vous pouvez utiliser l'appel fcntl(2) avec la commande F_LOG2PHYS. Tous les systèmes de fichiers ne supportent pas cette commande, mais HFS + le fait. Utilisez simplement lseek pour choisir le décalage de fichier et vous pouvez récupérer le diskoffset à partir de F_LOG2PHYS (il est retourné dans une structure log2phys dans le champ l2p_devoffset). Voir fcntl.h pour plus de détails.

1

Aucune API n'est exposée pour l'arrachage via les systèmes de fichiers HFS +, mais le source for the filesystem est disponible auprès d'Apple dans le cadre du noyau XNU. Consultez également l'outil hfsdebug qui pourrait aider à comprendre le fs.

+0

Merci pour la réponse, Graham. J'ai découvert une fonctionnalité de hfsdebug qui va non seulement m'aider à comprendre le système de fichiers, mais aussi à implémenter une solution à ce problème. Il est possible d'écrire un (http://www.osxbook.com/blog/2008/07/23/extending-hfsdebug/ "Filter") pour hfsdebug. C'est à peu près un mécanisme de rappel qui sera appelé comme hfsdebug itère sur chaque nœud de répertoire. Je peux comparer les blocs pris par les extensions du fichier avec les blocs en question. –

1

Il est une question ancienne, mais comme il est toujours parmi les grands succès lors de la recherche du sujet, voici à tous ceux qui recherche:

Depuis Mac OS X 10.6 fsck_hfs(8) peut cartographier les secteurs physiques des fichiers (voir option -B). Une note sur l'utilisation: la correspondance ne sera réussie que si la vérification du catalogue a été effectuée. Vous devrez donc forcer la vérification avec les options -l ou -f. BT12, hfsdebug en tant que binaire PPC repose sur Rosetta et ne fonctionnera donc pas sur Lion ou plus tard.

Questions connexes