Macintosh のフロッピーディスクを除く全ての記憶デバイスは 1 つまたは 複数のボリュームにパーティション分割されています.ボリュームは 4 つの 要素を持つことができます.すなわちファイル,ディレクトリ, ディレクトリスレッド,ファイルスレッドです.各要素は,UNIX の i-ノード に似たカタログレコードによって記述されます.カタログレコードは ディスク上のカタログ B-ツリーにまとめられています.ディレクトリの内容 はカタログ B-ツリーを検索して得られます.カタログレコードの外部に場所 を取るのはファイルだけです.
Macintosh の「ファイル」は 2 つの要素,すなわちフォークを持ちます. リソースフォークはコードセグメント,メニュー要素,ダイアログボックス等 を持つインデックス付けされたファイルで,データフォークは UNIX のファイ ルの内容と同じセマンティクスを持つ「バイトストリーム」です.それぞれの フォークは 1 つまたは複数の範囲か,あるいは連続した範囲を持つブロックか らなります.範囲指示子(extent descriptor)は範囲の開始ブロックと長さを 32 ビット長に エンコードしたものです.それぞれのフォークの最初の範囲レコード (領域指示子 3 つ)はファイルのカタログレコードの一部です.それ以降の 範囲レコードは全て範囲オーバーフロー B-ツリーに保存されます.
ファイルと B-ツリーが持つ範囲に加えて,ボリュームには 2 つの起動ブロック, 1 つのボリューム情報ブロック,1 つの空き容量ビットマップも含まれていま す.ディスクのデータ構造にはかなりの量の冗長性があるので,クラッシュから の復帰もより頑健に行えます.これは厳密にはファイルシステムの一部ではな いのですが,いくつかのカタログレコードのフィールドがファインダー(ユーザ からのファイルシステムへのアクセスを処理し,アプリケーションとデータ ファイルの関係を自動的に管理するプログラム)と排他的に使われるように 予約されていることは覚えておくべきです.したがって,HFS はファインダー の情報も管理しなければなりません.
HFS ボリューム上のそれぞれのファイルとディレクトリは,UNIX ファイルシステムの i-ノード番号に似た識別番号を持っています.しかし, ファイルまたはディレクトリを指示するのには,それらの親の識別番号とそれ ら自身の名前(NULL を含んでもよい 32 文字の文字列)を使います. この組み合わせはボリュームのカタログ B-ツリーを検索するための検索キー となります.カタログ B-ツリーは,B-ツリーの各レベルの全てのノードが 二重リンクリストの形になるように互いにリンクされている点と,全ての レコードは葉ノードにある点が伝統的な B-ツリーとは異なります. この変形 B-ツリーを用いると,リンクリストを使って葉ノードを調べること で同じディレクトリのたくさんの要素にアクセスできるようになります. 厳密に言うと,HFS の B-ツリーは B+-ツリーの変形ですが,Apple の 技術文書ではこれを B*-ツリーと呼んでいます.
ルートディレクトリを含むそれぞれのディレクトリはディレクトリスレッドを 持っています.ディレクトリスレッドは空のファイル名を持っています. ディレクトリスレッドレコードはディレクトリ名とそのディレクトリの親の ID を持っています.同様に,ファイルスレッドはファイルの名前とファイル が置かれているディレクトリの ID を持っています.全てのディレクトリは ディレクトリスレッドを持たなければなりませんが,ファイルスレッドはほと んど使われていません.実際にはどちらも HFS の冗長性の例になりますが―― 障害のないツリーの場合はスレッドは厳密には必要ありません.ファイルレコード とディレクトリレコードはどちらもファインダーが使う 32 バイトの情報を持っ ています.カタログ B-ツリーに対する最初の 3 つの範囲指示子はボリューム 情報ブロックに保存されます.もしカタログ B-ツリーファイルがこの 3 つの範囲 よりも大きくなったら,残りの範囲指示子は範囲オーバーフローに保存されま す.
HFS と HFS+ (Sequoia とも呼ばれます)ファイルシステムに関する文書はよく整備 されています.HFS について最も役に立つ技術情報は書籍の Inside Mactosh シリーズに載っています. http://developer.apple.com/techpubs/mac/Files/Files-99.html を見てください.HFS+ ファイルシステムは Technote 1150 で説明 されています.これは http://developer.apple.com/technotes/tn/tn1150.html からオンラインで入手できます.他の技術文書にもたくさんの情報があります. Paul H. Hargrove が集めたリンクを以下に示します:
HFS/2 を使うと OS/2 のユーザは HFS でフォーマットされたディスク上のファ イルの読み書きを透過的に行えます. HFS/2 を使うと Macintosh のフロッピーディスクは単に普通の フロッピーディスクのように使えます.
このプログラムの開発はもう止まっています.なぜなら,作者が OS/2 を使わ なくなったからです.このプログラムのメンテナンスをするつもりがあれば,作者に連 絡してください.
hfsutils パッケージは hformat, hmount, hdir, hcopy 等のコマンドライン ユーティリティ群を含むパッケージです.このユーティリティを使うと HFS ボリューム上にあるファイルやディレクトリを読み書きできます.