区分HFS +和HFS标准卷

时间:2008-10-11 20:55:53

标签: macos iokit diskarbitration

IOKit和DiskArbitration框架可以告诉我关于mac上挂载卷的很多内容,但它们似乎无法区分HFS +和HFS标准卷。

对于HFS标准版和HFS +卷,IOKit / DA密钥ContentDAVolumeKindDAMediaContent始终为Apple_HFS和hfs。

diskutil和DiskUtility.app 可以分辨出来,但我似乎没有Apple开源。

P.S。 statfs(2)没有区分

3 个答案:

答案 0 :(得分:7)

有两种方法可以做到这一点:

  1. 使用getattrlist()检索卷的装载路径的ATTR_VOL_SIGNATURE属性。
  2. 使用Carbon调用FSGetVolumeInfo()并查看返回结构的signature字段。
  3. 卷的签名是16位值,通常解释为两个ASCII字符。 HFS的签名是“BD”,HFS +是“H +”,区分大小写的HFS +是“HX”。

    getattrlist的手册页说该字段是u_int32,但FSVolumeInfo结构中的等效字段只有16位,所以我不确定32中的哪些16位用签名填充使用getattrlist时,如果你想进入非碳路线,你可能只需要尝试一下。

    getattrlist man page

    HFS Plus Volume Format reference

    FSGetVolumeInfo

答案 1 :(得分:1)

除了返回包含FSGetVolumeInfo()FSVolumeInfo字段的signature的Carbon filesystemID之外,还有类-getFileSystemInfoForPath:的Cocoa NSWorkspace方法返回文件系统类型的字符串表示形式:例如,HFS +为hfs,DOS FAT为msdos

答案 2 :(得分:0)

如果您尝试直接读取分区映射,那么您可能遇到的另一个问题是,历史上,HFS +卷嵌套在HFS包装器中。这样做是为了让任何试图使用旧操作系统的HFS +磁盘的人都会在驱动器上看到一个文件,说明其他所有数据的位置。