HFS Plusのジャーナリングは、Mac OS X 10.2(以下、Jaguar)にて実装され、サーバOSであるMac OS X Serverで用いられるようになった。クライアント版である通常のMac OS Xでは機能的には存在したものの、GUI上からジャーナリングを有効にできず、一種の隠し機能的に扱われていた。その次のメジャーリリースであるMac OS X 10.3(以下、Panther)ではクライアント版でも使用可能になり、以降デフォルトでジャーナリングが有効になっている。
すでにご存じの方も多いだろうが、ジャーナリング(ロギング)とはディスクへの書き込みを安全に行うための仕組みで、仮に書き込み最中にOSがクラッシュしてディスクI/Oが中途半端で終わっても被害を最小限におさえられる。
具体的には、書き込むべき情報をまずジャーナリング用領域に書き出す。次に実際の書き込みを行い、最後にジャーナリング用領域に書いたデータをクリアする。ジャーナリング用領域は一時的なデータのため、ここへの書き込み中にOSがクラッシュしても、実際のファイルシステムには何の被害もない。実際の書き込み中にクラッシュした場合は再起動時にジャーナリング用領域の内容を基に中断された書き込みを再実行できる。つまり、いつクラッシュしても「書き込む前」か「書き込んだ後」のどちらかに状態が確定し、中途半端な状態が残らないことが保証されている(図2)。
HFS Plusは、ファイルシステムの管理にB-Treeという比較的複雑なデータ構造が用いられており、中途半端な書き込みでファイルが消失したり壊れてしまいやすい(図3-A)。実際、古いMac OSではそうした障害が頻繁に発生しており、ファイルの消失は爆弾マークと並んでMac OSの象徴だった。しかしMac OS Xでは、UNIXを受け入れることでそもそもOSが強固になり、クラッシュする可能性は格段に低くなった。さらにジャーナリングが採用されデフォルトで有効になったことで、HFS Plusのそうした弱点はもはや完全に過去のものとなっている(図3-B)。
ジャーナリングを行うと、書き込むべきデータをジャーナリング用領域と本来の領域の2つにそれぞれ書き込まなければならないため、単純に考えると書き込むデータ量が2倍になってしまう。データ量が増えると、I/O負荷が上がり性能が低下する恐れがある。当初Mac OS X Serverでのみジャーナリングが有効となったのも、こうした安全性のための性能低下をサーバ管理者なら理解するだろうが、一般のMacユーザーには受け入れられにくいという面があったためであろう。
一方、ジャーナリングが有効ならばファイルの破損や消失といったリスクが低下する。万が一のデータの整合性はジャーナリングが保証してくれるのを良いことに、よりアグレッシブなアクセスの高速化処理を施せるようになる。次に述べる遅延再配置とHot File Adaptive Clusteringは、そうした高速化の仕組みだ。これらの高速化の結果、ジャーナリングによる性能の低下分を補ってあまりあるパフォーマンスの向上が得られるようになった。そのためPanther以降ではサーバ版のみならず通常のMac OS Xでもジャーナリングが標準で有効になっている。
本記事は、オープンソースマガジン2006年4月号「Undocumented Mac OS X」を再構成したものです。
Copyright © ITmedia, Inc. All Rights Reserved.