GWも過ぎて30度超えの日もチラホラ、という今日この頃。MacBook Proのパームレストも日に日に熱くなり、原稿書きもツラくなってきました。以前購入したノートPCスタンド「iFold」の出番到来というわけですが、OS X 10.5.3にアップデートしてからというもの、なぜかBluetoothデバイスが検出されず……というわけで、掌に汗してこの原稿を書いています。

さて、今回は「デフラグ」について。近頃、MacBook Proのブートが完了するまでの時間が購入時に比べ延びているような気がするので、以前から関心があった"近頃のデフラグ事情"をまとめようと思いついた次第。前後編の2回に分けお届けする予定だ。

HFS Plusに隠されたデフラグ機能

OS Xを使い始めたのは数年前、という読者も少なくないはずなので、まずは「デフラグ」とはなんぞや、というところから話を始めてみよう。デフラグ? ああ、昔はNorton Disk Doctorで(以下略) といういにしえの儀式を知る読者も、しばしお付き合いのほどお願いしたい。

デフラグとは、HDDを利用するうちに使用領域が不連続になる「断片化 (フラグメンテーション)」を解消する処理のこと。かつてのファイルシステムは、特に工夫することなくファイルを書き込んでいたため断片化が発生しやすく、使い続けるうちに読み書き速度が低下。時折デフラグを実行することが半ば常識、という時代があったのだ。

断片化が発生すると、そのぶんHDDの読み取り装置部分の移動量が増すため、読み取りが非効率になる。たとえば、1つのアプリケーションを構成する複数のファイルが"あちらこちらに"保存された場合、連続した領域に記録された場合に比べ起動に時間がかかる。全100巻のコミックがバラバラに並べられている状態を想像してもいいだろう (マンガは読むのに時間がかかるので、それほど苦はないだろうが)。

この問題を解消すべく、HFS Plusにはいろいろな機能が盛り込まれている。Appleは大々的にアナウンスしていない (Appleは見た目が派手な新機能しかアピールしない傾向がある) が、以前に比べ断片化の発生を大幅に抑制することに成功している。

その1つが、OS X 10.2 (Jaguar) で実装された「Delayed allocation」。遅延再配置という邦訳が適当と思われるこの機能は、ジャーナリングONのボリュームから読み込まれるファイルが20MB以上で、かつファイル構造の基本単位 (エクステント) が8つ以上の場合、連続した空き領域へ自動的に移動させる働きを持つ。連続した領域のほうがエクステントが少なくなり、物理的に連続しているのでI/O性能が向上する、というしくみだ。

もう1つが、OS X 10.3 (Panther) に追加された「Hot-File-Adaptive-Clustering」。HFS Plusでは、10MB以下のファイルを対象に利用状況を記録しているが、そのうち利用頻度の高いものについて、高速アクセスが可能な物理領域 (HDDの外周部分、メタデータゾーン) へ移動させるという機能だ。しかもDelayed allocationと同様に、エクステントが少なく済むよう再配置されるため、断片化解消とI/O向上に貢献する。こちらもジャーナリングONの状態で作用するが、Panther以降のシステムはデフォルトでONになっているため、誰もが知らぬ間にお世話になっているというありがたい機能だ。

デフラグ為すべきか、為さざるべきか

この2つの機能を考慮すると、現行の (Panther以降 / ジャーナリングONの) OS Xでは「デフラグは不要」という結論に到達する。実際Appleも、「About disk optimization with Mac OS X」というドキュメントを公開し、デフラグ不要論を説いている。

ただし、それにはいくつかの前提条件がある。その前提条件が崩れた場合には、デフラグがディスクI/O向上に有効な手段となるかもしれない。

1つは、ファイルシステムの制約。上記2つの機能はHFS Plus限定であり、FAT32などでフォーマットされた外付けHDDには適用されない。ディスク空き領域が残り少ない場合も、再配置は期待通り行われないものと考えられる。

もう1つは、機能的制約。Hot-File-Adaptive-Clusteringの対象となるファイルは最大5,000、かつ10MB以下という条件を満たしていなければならない。デジタルカメラのRAWファイル、動画ファイルなど、10MBを超すファイルの利用頻度が高くなった現在、少々厳しい制約といえる。

それでは、市販のデフラグツールを使用して効果のほどを検証……というところで紙幅が尽きたため、この続きは次回に。

Coriolis Systemsの「iDefrag」で断片化の状況を調べたところ