2008-10-11 16 views
1

IOKit et le framework DiskArbitration peuvent me dire beaucoup de choses sur les volumes montés sur un mac, mais ils ne semblent pas pouvoir différencier les volumes HFS + et HFS Standard.Distinction entre les volumes standard HFS + et HFS

Les clés IOKit/DA Content, DAVolumeKind et DAMediaContent sont toujours Apple_HFS et hfs pour les volumes HFS Standard et HFS +. Diskutilite et DiskUtility.app peut peut faire la différence, mais moi, ils ne semblent pas avoir été open source par Apple.

p.s. statfs (2) ne fait aucune différence

Répondre

7

Il y a deux façons de le faire:

  1. Utilisez getattrlist() pour récupérer l'attribut ATTR_VOL_SIGNATURE pour le chemin de montage du volume.
  2. Utilisez l'appel Carbon FSGetVolumeInfo() et recherchez dans le champ signature de la structure renvoyée.

La signature d'un volume est une valeur de 16 bits, généralement interprétée comme deux caractères ASCII. La signature pour HFS est «BD», HFS + est «H +», et HFS + sensible à la casse est «HX». La page de manuel pour getattrlist indique que le champ est un u_int32, mais le champ équivalent dans la structure FSVolumeInfo est seulement 16 bits, donc je ne suis pas sûr que les 16 bits du 32 sont remplis avec la signature lors de l'utilisation getattrlist , vous devrez probablement expérimenter un peu si vous voulez suivre la voie non-carbone.

getattrlist man page

HFS Plus Volume Format reference

FSGetVolumeInfo

+0

Je suis allé avec getattrlist parce que je n'ai pas envie de relier en carbone, et peut signaler ce qui suit: les 16 bits inférieurs sont remplis et HFS Standard -> BD, HFS + -> H + BUT, étonnamment, ntfs, fat32 - > BD et HFSX -> H + (pas HX). Bizarre, hein? Toujours, couvre mon cas. Merci. –

+0

Dans la structure FSVolumeInfo, il existe également un ID de système de fichiers 16 bits dont la valeur est 0 pour HFS + et 18771 pour DOS FAT. Je cherche toujours quelque chose comme une énumération dans un fichier d'en-tête qui donnerait toutes les valeurs pertinentes. – mouviciel

1

en plus du carbone FSGetVolumeInfo() qui renvoie un FSVolumeInfo contenant signature et filesystemID domaines, il y a la méthode de cacao -getFileSystemInfoForPath: de classe NSWorkspace qui renvoie une représentation de chaîne de système de fichiers type: par exemple, hfs pour HFS + et msdos pour DOS FAT.

0

L'autre problème que vous pouvez rencontrer si vous essayez de lire des partitions directement est que, historiquement, les volumes HFS + étaient imbriqués dans des wrappers HFS. Cela a été fait pour que quiconque essayant d'utiliser un disque HFS + avec un ancien système d'exploitation verrait un seul fichier sur le disque expliquant où se trouvait tout le reste de leurs données.

Questions connexes