第11回 HFS Plus独自の機能【後編】:Undocumented Mac OS X(2/2 ページ)
Mac OS Xになってから拡張されたHFS Plus独自の機能について、Jaguarでジャーナリングと同時に搭載された遅延再配置、Pantherでひそかに追加されたHot-File-Adaptive-Clustering、そしてTigerで追加された、拡張属性とアクセスコントロールリストについて解説する。
拡張属性(EA)とアクセスコントロールリスト(ACL)
Tigerで追加されたのが、拡張属性(Extended Attribute)とアクセスコントロールリスト(Access Control List)だ。この2つの概念自体はすでに商用UNIXではお馴染みのものだろう。
簡単に説明すると、ファイル名やパーミッション、作成日時や更新日時、所有者とグループといった、あらかじめ決められた属性以外に、ファイルの内容により即した属性をユーザーやアプリケーションが自由に割り振れるようにするというのがEAである。また、これまでの所有者、グループ、それ以外に読み、書き、実行を割り振るという大雑把なパーミッションに対して、指定ユーザーやグループに対して個々にアクセス権を割り振るという、より詳細なアクセスコントロールを実現するのがACLだ(実行例1)。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
EAは、Tigerではデフォルトで有効になっており*、listxattr(2)、getxattr(2)といった関数で属性を取得、setxattr(2)で設定できる。リスト2はファイルの属性を取得し、表示する簡単なサンプルで図1はその実行結果だ。
EAとACLの実装には、HFS独特のフォークの仕組みが流用されている。前回説明したとおり、HFS Plusでは、データフォークとリソースフォーク以外にもより多くのフォークを持てるように設計されていた。旧来のMac OSではそれを活用するだけの能力がOSになかったため使われることがなかった領域だが、ここを活用しEAやACLの情報をそれぞれ小さなフォークとして格納している(図2)。
EAの活用
一方、従来リソースフォークやFinder情報へのアクセスは、CarbonフレームワークがMac OS X独自のシステムコールを呼び出したり、パスを流用することで実現していたが、EAの実装に伴いリソースフォークやFinder情報も拡張属性の1つとしてとらえ直され、リソースフォークはcom.apple.ResourceFork、Finder情報はcom.apple.FinderInfoという名称のEAとして標準的なシステムコールでアクセスできるようになった。このため、EAに対応したソフトウェアならばHFS独自のそうした属性を正しく扱えるようになった。Tigerからはmv、cpといったコマンドでリソースフォークやカスタムアイコン、ラベルの色などを正しく扱えるようになったのはこのおかげである。
HFS Plusの今後
これまでMac OS Xで行われたHFS Plusの改善は性能的なものにとどめられ、互換性を損なう改善は控えられてきた。HFS Plusとしての後方互換性が保たれているため、Tigerで作成された、EAやACLが使用されているジャーナリングを有効にしたHFS Plusボリュームであっても、旧来のMac OS 8.1でマウントできる*。
ただ、この互換性維持のために、HFSに由来する大文字小文字を区別しないなどの仕様もそのまま保たざるを得なかった。パーソナル用途ではともかく、エンタープライズ用途ではそうした時代遅れの仕様があだになることもある。UNIXユーザーとしては、HFS PlusではMakefileとmakefileが共存できない、cvsコマンドをソースからビルドできない*などちょっとした問題がある。
HFS Plusのそうした後方互換性の制約を超えてさらに機能を強化したものが、HFS Xだ。HFS XはHFS Plusとほぼ同様の構造を持つが、ボリュームヘッダに記録される署名やバージョンが異なるため、もはやMac OS 9ではマウントできない。互換性を捨てた代わりにHFS Xはさまざまなオプションの追加が可能となっている。
そして現在のところ、HFS Xでは大文字小文字を区別するCase sensitiveオプションのみ定義されており、ディスクユーティリティからフォーマットとして「Mac OS 拡張(大文字小文字を区別)」もしくは「Mac OS 拡張(大文字小文字を区別、ジャーナリング)」を選んだときのみ使用される。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
このページで出てきた専門用語
EAはTigerではデフォルトで有効になっており
正確には、ACLと異なり無効化できない。
Mac OS 8.1でマウントできる
ただし、Jaguar以前のOSではジャーナリングが有効にならず、ただのHFS Plusボリュームとして扱われるなどの制限はある。
cvsコマンドをソースからビルドできない
CVSディレクトリとビルドの結果生成されるcvsコマンドの名前が大文字小文字で衝突するため。
本記事は、オープンソースマガジン2006年4月号「Undocumented Mac OS X」を再構成したものです。
関連記事
- 連載第1回 initを置き換えるlaunchd【前編】
UNIX使いに真のMACPOWERを! 本連載では、UNIX使いに向け、UNIX系OSとしてのMac OS Xを解説していく。記念すべき第1回では、initに代わるものとしてMac OS X Tigerで採用された、launchdを紹介しよう。 - 連載第2回 initを置き換えるlaunchd【後編】
- 連載第3回:plist(プロパティリスト)とFoundation【前編】
- 連載第4回:plist(プロパティリスト)とFoundation【後編】
- 連載第5回:OpenDirectory
- 連載第6回:迷走の痕跡を抱えるMac OS XのOpenDirectory
- 連載第7回:HFS、HFS Plusの基本的概念【前編】
- 連載第8回:HFS、HFS Plusの基本的概念【中編】
- 連載第9回:HFS、HFS Plusの基本的概念【後編】
- 連載第10回:HFS Plus独自の機能【前編】
Copyright © ITmedia, Inc. All Rights Reserved.