ファイルシステムのメンテナンスにおいて、デフラグとは断片化の程度を軽減するプロセスです。これは、ファイルを保存するために使用される大容量記憶装置の内容を、最小数の連続した領域(フラグメント、エクステント)に物理的に整理することによって行われます。また、断片化の再発生を防ぐために、 圧縮を使用してより大きな空き領域を作成しようとします
デフラグは、電気機械式ディスクドライブ(ハードディスクドライブ、フロッピーディスクドライブ、光ディスクメディア)上のファイルシステムに有利で関連性があります。断片化されたファイルにアクセスする際、ハードドライブの読み取り/書き込みヘッドがディスクのさまざまな領域を移動する速度は、読み取り/書き込みヘッドを移動させて他の断片を探すことなく、断片化されていないファイルの内容全体に順番にアクセスする場合と比較して遅くなります。
断片化は、ファイルシステムが完全なファイルを1つの単位として保存するのに十分な連続した領域を割り当てることができない、または割り当てようとせず、代わりに既存のファイル間の隙間にファイルの一部を配置するときに発生します(通常、これらの隙間は、ファイルシステムが以前にファイルを保持していたがその後削除されたか、ファイルシステムがそもそもファイルに過剰な領域を割り当てたために発生します)。頻繁に追加されるファイル(ログファイルなど)、頻繁なファイルの追加と削除(電子メールやWebブラウザのキャッシュなど)、大きなファイル(ビデオなど)、および多数のファイルは、断片化とそれに伴うパフォーマンスの低下の一因となります。デフラグはこれらの問題を軽減しようとします。

空のディスクにAからEまでの5つのファイルがあり、それぞれが10ブロックの領域を使用しています(このセクションでは、ブロックはファイルシステムの割り当て単位です。ブロックサイズはディスクのフォーマット時に設定され、ファイルシステムでサポートされている任意のサイズになります)。空のディスクでは、これらのファイルはすべて順に割り当てられます (画像の例 1 を参照)。ファイル B を削除する場合、2 つのオプションがあります。ファイル B の領域を後で再利用できるように空としてマークするか、すべてのファイルを B の後に移動して空き領域が末尾になるようにします。移動する必要のあるファイルが多い場合はファイルの移動に時間がかかる可能性があるため、通常は空き領域をそのまま残し、テーブルで新しいファイル用に使用可能としてマークします (画像の例 2 を参照)。[注 1] 6 ブロックの領域を必要とする新しいファイル F が割り当てられた場合、以前にファイル B が格納されていた領域の最初の 6 ブロックに配置することができ、それに続く 4 ブロックは使用可能なままになります (画像の例 3 を参照)。別の新しいファイル G が追加され、4 ブロックしか必要としない場合は、F の後、C の前の領域を占有できます (画像の例 4)。各ファイル セクションはドライブ全体で別々のパケットに保存されるので、これを削除すると空き領域が残り、断片化されたディスクが作成されます。
ただし、ファイルFを拡張する必要がある場合、その直後のスペースが利用できなくなるため、3つの選択肢があります。
さらに、「断片化」の概念は、ディスク上に複数のエクステントを持つ個々のファイルに限定されません。例えば、通常特定の順序で読み取られるファイル群(プログラムの読み込み時にアクセスするファイルなど。特定のDLL、様々なリソースファイル、ゲーム内のオーディオ/ビジュアルメディアファイルなど)は、個々のファイルが断片化されていなくても、ディスク上で順番に読み込まれていない場合は断片化されていると見なすことができます。読み取り/書き込みヘッドは、これらの(断片化されていない)ファイルに順番にアクセスするためにランダムにシークする必要があります。一部のファイル群は、元々正しい順序でインストールされていたとしても、グループ内の特定のファイルが削除されるにつれて、時間の経過とともに順序がばらばらになる可能性があります。更新は、この一般的な原因です。ファイルを更新するために、ほとんどのアップデータは通常、最初に古いファイルを削除し、代わりに新しい更新されたファイルを書き込むためです。ただし、ほとんどのファイルシステムは、新しいファイルをディスク上の同じ物理的な場所に書き込みません。そのため、無関係なファイルが残った空きスペースを埋めることができます。
デフラグとは、ファイルエクステント(物理アロケーションブロック)を移動して、最終的に1つに統合する操作です。これを行うには通常、少なくとも2つのコピー操作が必要です。1つは、ブロックをディスク上の空きスクラッチ領域に移動して、より多くの移動を可能にする操作、もう1つは、ブロックを最終的に目的の場所に移動するための操作です。このようなパラダイムでは、ディスクからデータが削除されることはないため、停電が発生した場合でも操作を安全に停止できます。記事の写真はその一例です
ディスクをデフラグする場合、デフラグソフトウェア(「デフラグツール」とも呼ばれます)は、利用可能な空き領域内でのみファイルを移動できます。これは負荷の高い操作であり、空き領域がほとんどないか全くないファイルシステムでは実行できません。デフラグ中はシステムパフォーマンスが低下するため、ファイルシステムへの予期しない変更によってデフラグツールが混乱しないように、処理中はコンピューターをそのままにしておくことをお勧めします。使用するアルゴリズムによっては、複数回のパスを実行することが有利な場合と不利な場合があります。デフラグに伴う再編成によって、ファイルの論理的な位置(ディレクトリ構造内の位置として定義されます)は変更されません。
プログラムファイルのデフラグに加えて、デフラグツールはプログラムの読み込みやファイルを開くのにかかる時間を短縮することもできます。たとえば、Windows 9xのデフラグツールにはIntel Application Launch Acceleratorが搭載されており、デフラグされたプログラムファイルとその依存関係をプログラムの読み込み順に並べて配置することで、ディスク上のプログラムを最適化し、プログラムの読み込みを高速化しました。[1] Windowsでは、優れたデフラグツールはプリフェッチファイルを読み取り、これらのファイルグループをできるだけ多く識別し、アクセス順に配置します。
ハードドライブの先頭では、外側のトラックの方が内側のトラックよりもデータ転送速度が速いです。頻繁にアクセスされるファイルを外側のトラックに配置すると、パフォーマンスが向上します。[2] MyDefragなどのサードパーティ製デフラグツールは、頻繁にアクセスされるファイルを外側のトラックに移動し、これらのファイルをデフラグします。[3]
RAMキャッシュ、プラッタ回転速度の高速化、コマンドキューイング(SCSI / ATA TCQまたはSATA NCQ )、データ密度の向上など、現代のハードドライブの改良により、断片化がシステムパフォーマンスに与える悪影響はある程度軽減されますが、一般的に使用されるデータ量の増加がこれらの利点を相殺します。しかし、現代のシステムは現在利用可能な巨大なディスク容量から大きな利益を得ています。これは、部分的に使用されているディスクは、完全に使用されているディスクよりも断片化がはるかに少なく、[4]大容量HDDでは、同じパーティションが占めるシリンダーの範囲が狭いため、シークが高速になるためです。ただし、平均アクセス時間はプラッタの半回転よりも遅くなることはなく、プラッタ回転数(rpmで測定)はHDDの速度特性であり、データ転送速度とシーク時間と比較して、ここ数十年で最もゆっくりとした成長を遂げてきました。そのため、シーク回数を最小限に抑えることは、ほとんどのストレージを多用するアプリケーションにおいて依然として有益ですデフラグとは、ファイルごとに最大1つのシークがあり、隣接していないトラックへのシークのみをカウントすることを保証することです。
デフラグを最適化し、断片化の影響を軽減するための一般的な戦略は、書き込みよりも読み取りの方がはるかに多いファイル システムのパーティションを、ファイルが頻繁に作成および削除されるより不安定な領域から分離するようにハード ディスクをパーティション分割することです。ユーザー プロファイルを含むディレクトリは絶えず変更されます (特に、Temp ディレクトリと Web ブラウザー キャッシュによって、数日で削除される数千のファイルが作成されます)。ユーザー プロファイルのファイルが専用のパーティションに保存されている場合 ( UNIX推奨ファイル システムでは一般的に行われ、通常は /var パーティションに保存されます)、デフラグ ツールは他のディレクトリのすべての静的ファイルを処理する必要がないため、より効率的に動作します (または、デフラグ ツールに特定のファイル パスを除外するように指示することもできます)。書き込みアクティビティが比較的少ないパーティションの場合、デフラグ ツールはその後少数の新規ファイルのみをデフラグすればよいため、最初のデフラグの後のデフラグ時間が大幅に改善されます。
移動できないシステムファイル、特にスワップファイルの存在は、デフラグを妨げる可能性があります。これらのファイルは、オペレーティングシステムが使用されていないときに安全に移動できます。たとえば、ntfsresizeはこれらのファイルを移動してNTFSパーティションのサイズを変更します。Pag eDefragツールは、GUIが読み込まれる前の起動時に実行することで、スワップファイルやWindowsレジストリを保存するファイルなどのWindowsシステムファイルをデフラグできます。Windows Vista以降、この機能は完全にはサポートされておらず、更新されていません
NTFSでは、ファイルがディスクに追加されると、新しいファイルの情報を格納するためにマスターファイルテーブル(MFT)が拡張する必要があります。何らかのファイルが邪魔をしてMFTを拡張できない場合は、MFTにフラグメントが発生します。Windowsの初期バージョンでは、パーティションがマウントされている間は安全にデフラグすることができなかったため、MicrosoftはデフラグAPIにハードブロックを書き込みましたしかし、 Windows XP以降、WindowsのデフラグAPIが改善され、移動操作をサポートするようになったため、MFTをデフラグできるデフラグツールが増えています。[5]改善されたにもかかわらず、MFTの最初の4つのクラスターはWindowsのデフラグAPIでは移動できないため、一部のデフラグツールはMFTを2つのフラグメントに保存します。最初の4つのクラスターはディスクがフォーマットされたときに配置された場所に、残りのMFTはディスクの先頭(またはデフラグツールの戦略が最適な場所と判断した場所)に保存されます。
従来の電気機械式ハードディスクドライブからデータを読み取る際、ディスクコントローラはまず、比較的ゆっくりとヘッドを特定のフラグメントが存在するトラックに位置決めし、次にディスクプラッタが回転してフラグメントがヘッドに到達するまで待機する必要があります。ソリッドステートドライブ(SSD)は可動部品のないフラッシュメモリをベースとしているため、フラッシュメモリ上のファイルフラグメントへのランダムアクセスではこの遅延が発生しないため、アクセス速度を最適化するためのデフラグは不要です。さらに、フラッシュメモリは故障するまでに書き込み回数が限られているため、デフラグは実際には有害です(壊滅的な障害の緩和を除く)。ただし、Windowsは、ファイルシステムが最大断片化許容値(メタデータがそれ以上のファイルフラグメントを表現できなくなる場合)に達するのを防ぐために、SSDを自動的に(ただしそれほど強力ではありませんが)デフラグします。最大断片化の制限に達すると、その後のディスクへの書き込みは失敗します。[6]

e2defragが、これは後継のext3では動作しません。ただし、他のプログラム、または[17]defragfsなどのファイルシステムに依存しないプログラムを使用して、ext3ファイルシステムをデフラグすることができます。ext4はext3とある程度の下位互換性があるため、デフラグプログラムからのサポートは概ね同程度です。現在、e4defragを使用して、オンラインデフラグを含むext4ファイルシステムをデフラグできます。fsadmは、デフラグ操作を含むユーティリティがありますdefragfs。[18]reallocateには、大きなファイルをデフラグするために設計されたというコマンドがあります。xfs_fsr。ほとんどのハードディスクでは、ハードディスクの先頭の方が末尾よりもかなり高速で、場合によっては200%も高速です。HD Tuneなどのユーティリティを使えば、自分で測定できます。そのため、MyDefragはすべてのファイルをディスクの先頭に移動するように設計されています。
これまで見てきたように、HFS+ボリュームはMac OS X 10.3.xでは断片化にかなり耐性があるようで、断片化が積極的な解決策(デフラグツールなど)を必要とするほど深刻な問題になるとは考えていません