1

IOKit と DiskArbitration フレームワークは、Mac にマウントされたボリュームについて多くのことを教えてくれますが、HFS+ ボリュームと HFS 標準ボリュームを区別できないようです。

IOKit/DA キーContentとはDAVolumeKindDAMediaContentHFS Standard ボリュームと HFS+ ボリュームの両方で常に Apple_HFS と hfs です。

diskutil と DiskUtility.appは違いを見分けることができますが、Apple によってオープンソース化されていないようです。

ps statfs (2) は区別しません

4

3 に答える 3

7

これを行うには、次の 2 つの方法があります。

  1. ボリュームのマウント パスの属性 getattrlist()を取得するために使用します。ATTR_VOL_SIGNATURE
  2. Carbon 呼び出し FSGetVolumeInfo() を使用してsignature、返された構造体のフィールドを調べます。

ボリュームの署名は 16 ビット値で、通常は 2 つの ASCII 文字として解釈されます。HFS の署名は「BD」、HFS+ は「H+」、大文字と小文字を区別する HFS+ は「HX」です。

のマニュアル ページにgetattrlistは、フィールドが u_int32 であると書かれていますが、FSVolumeInfo 構造体の同等のフィールドは 16 ビットしかないため、32 のどの 16 ビットが署名で埋められているかはわかりませんgetattrlist。非炭素ルートに行きたい場合は、少し実験してください。

getattrlist のマニュアルページ

HFS Plus ボリューム フォーマットのリファレンス

FSGetVolumeInfo

于 2008-10-11T22:09:37.927 に答える
1

含むフィールドを返す Carbon に加えて、ファイルシステム タイプの文字列表現を返すクラスの CocoaメソッドFSGetVolumeInfo()があります。たとえば、HFS + やDOS FAT の場合です。FSVolumeInfosignaturefilesystemID-getFileSystemInfoForPath:NSWorkspacehfsmsdos

于 2009-02-15T09:13:51.717 に答える
0

パーティション マップを直接読み取ろうとする場合に遭遇する可能性のあるもう 1 つの問題は、歴史的に、HFS+ ボリュームが HFS ラッパー内にネストされていたことです。これは、古い OS で HFS+ ディスクを使用しようとする人が、残りのすべてのデータがどこにあるかを説明するドライブ上の単一のファイルを表示できるようにするためです。

于 2009-10-13T23:45:25.493 に答える