効率の良いエクステントの利用を考慮すると、HFS Plusではできるだけ連続領域が確保されるようにアロケーションブロックを割り当てることが望ましい。このためMac OS XのHFS Plusファイルシステムの実装では新しくエクステントを確保する際にはほかのエクステントの使用している領域ときっちり詰めて配置するのではなく、エクステントの伸張が可能なようにわざとすき間を空けて配置するようになっている。この、どれぐらい余白を作るかを指定する数値がボリュームヘッダにあるクランプ値だ。
なお、クランプ値を用いて余白を作るのはあくまでMac OS X(およびMac OS 9)のHFS Plusファイルシステムの実装における挙動で、HFS Plusというファイルシステムの仕様ではないことに注意。
これまでのMac OSではパスという概念が希薄であった。GUIからファイルを操作するとき、そこには「すでに見えているファイルかフォルダ」しかなく、ファイルをクリックされると「現在のフォルダのCNID」と「指定のファイル名」からカタログノードを検索、ファイルに関する情報を取得でき、一方フォルダを指定された場合は「そのフォルダのCNID」と「ファイル名をワイルドカード」にすることでそのフォルダに含まれるファイルを一覧取得する、それだけができれば良かったからだ。しかし、ユーザーの操作ではなくプログラム上からの処理などで複数のフォルダをまたがる操作をする場合には、UNIXやWindowsと同じパスによる指定が可能であった。
このMac OSにおけるパスは「/」や「\」ではなく、「:」が区切り文字で、
:書類:Microsoft ユーザー データ:MSN Messenger 履歴
といった感じで表現される。なお、こうしたパスによる表現はできるだけユーザーに見せないというのが古いMac OSの推奨事項だったため、この表記はMac版のMicrosoft Officeの「最近使ったファイル」など少数の場面でしか見ることがない。
こうした事由から、HFS Plusにおける区切り文字は「:」となっており、一方「/」や「\」は使用可能文字となっている。これはUNIXの標準的な仕様とは異なる。
Mac OS Xでは、HFS PlusファイルシステムレイヤーからVFSを通じてより上位のBSDレイヤーにつながるところで、「:」と「/」の文字の置き換えを行っている。つまりUNIXのシステムコールからは「/」が区切り文字だが、HFS Plusのファイルシステムレイヤーでは「/」が「:」に置き換えられ、「:」が区切り文字になる。
一方、旧来からMacを使っているユーザーには、例えば「原稿 1995/12/05」といった、「/」をファイル名に使う習慣がある。Mac OSではこれまで「/」を通常文字として扱っていたためだが、Mac OS Xへの移行で「/」が使えなくなると、そうしたユーザーから苦情が発生しうることが予想された。
このため、CarbonおよびFinderではさらに「:」を「/」に置き換える処理を行っている。つまり、Finder上において「原稿 1995/12/05」となっているファイルは、UNIX的なパスでは「原稿 1995:12:05」となっており、システムコールへはこの文字列が渡される。そしてHFS Plusのレイヤーではもう一度「:」が「/」に直され「原稿 1995/12/05」というファイル名で検索がなされるのだ(図3)。
かなりややこしい事態になっているが、GUIしか使わないユーザーには「/」は相変わらず使用可能文字であり、UNIXユーザーで「/」をファイル名に使う人はいないので、これが問題となることは極めて少ない。
これは、やや美しさに欠けるが現実的な、いかにもMac OS X的な対処であるといえよう。
本文中にもあるように、HFS PlusではHFSにはないファイルのオーナーやパーミッションといった情報がつけ加えられている。それ以外にも各種管理情報のデータ長が長くなっており、より多く、より大きなファイルを管理できるようになっている。加えて、アトリビュートファイルによって、データフォークとリソースフォーク以外のフォークや属性を格納できるようになった。この機能は、TigerでサポートされたEA*やACL*に利用されている。
しかし利用者にとっての最大の違いは、おそらくファイル名についてだろう。HFSではカタログノードにおけるファイル名の領域が32バイト固定であった。HFS PlusではUnicodeを用いてファイル名を記録するが、HFSでは各国ごとに別個の文字コードを使用しており、文字コード種別はボリュームヘッダに格納される。ファイル名はこの文字コードで解釈される。
しかし、Mac OS自身にはこの文字コードを鑑みない処理が散見され、特に大文字小文字を区別せず(Case Insensitive)、ファイル名を検索する処理にそうした文字コードを無視してバイト列ごとに行うという、もはやバグといえるような仕様があり、「レモン」と「メロン」など本来異なるファイル名が同一視されるという問題があったことは有名である。
HFS Plusではファイル名のための領域は255バイトまで拡張された上、そのファイル名はUCS2*で記録されることになっている。もちろん大文字小文字に関する処理も文字を正しく把握して行われ、過去のHFSのようなバグはない。
Mac OS XにおいてはHFSはあくまで以前のMac OSとの互換性のためだけに存在する。名前こそ「Mac OS 拡張」ではあるが、実質的にHFS Plusがマックの標準フォーマットなのだ。
Copyright © ITmedia, Inc. All Rights Reserved.