デフラグメンテーション

出典: フリー百科事典『ウィキペディア(Wikipedia)』

デフラグ から転送)

デフラグメンテーション (defragmentation、しばしば略してデフラグ)とは、コンピュータファイルシステムにおけるフラグメンテーションを解消すること。

目次

[編集] HDDでの断片化

HDDのようなディスク式記憶装置でファイルの生成と削除を繰り返していると、ファイルが占める領域がだんだんと分断化されてゆく。これをフラグメンテーション(断片化)という。ファイルが断片化すると、ひとつのデータがディスクのあちこちに点在している状態になり、余分にディスクヘッドを多く動かさなければならないため、ファイルアクセスが遅くなり、またディスク装置の寿命を縮める恐れもある。空き領域が断片化すると、大きなファイルを生成するときに断片化しやすくなる。元々は、ファイルシステムがあえて断片化を許容することでデータの柔軟な管理を可能としているため、断片化は宿命といえる。

デフラグはこのような断片化された状態を整理し、ファイルや空き領域を記憶装置中で連続的に配置し直すことによってファイルアクセスの速度を向上させる可能性がある。

デフラグメンテーション処理自体も連続的な読み書き動作をディスク装置に求めるため、ディスク装置の寿命を縮める可能性があり、どの程度の断片化でデフラグを行うべきで、行うべきでないのかといった点で信頼できる実験データなどは知られておらず、おおむね経験則に基づいて実行されている。

[編集] 断片化の仕組み

[編集] フラグメンテーションの起きる概略図

以下は解説の為に簡略化してある。ファイルシステムによってはフラグメンテーションが起こらないようファイルの配置が工夫されたものも多い。

凡例: □ = 空き領域、■・◆・★・● = ファイル

1. 初期状態 ■■■■■◆◆◆◆◆★★★★★□□□□□
2. ファイル◆を削除する ■■■■■□□□□□★★★★★□□□□□
3. ファイル●を生成する ■■■■■●●●●●★★★★★●●●□□

ファイル●の占めるサイズが■に続く空きに合わないため2つに分断された。これを●の断片化という。 すると、両方の場所へアクセスしないといけないため、動作が遅くなる原因になる。

[編集] HDDのアクセス時間

ハードディスクへのアクセス時間は以下の式により求めることができる。

アクセス時間 = 平均位置決め時間 + 平均回転待ち時間 + データ転送待ち時間

平均位置決め時間と平均回転待ち時間は、ファイルの断片数に比例している。 データ転送待ち時間は、ファイルサイズに比例している。

記憶装置全体でのファイルの断片化を少なくすれば、総体としてのファイルアクセスでの平均位置決め動作と平均回転待ち動作を減らせるため、読み書きの高速化が期待出来る。ただしデータ転送待ち時間は変化しない。

そのため断片化の解消は、容量の小さいファイルには効果があるが、容量の大きなファイルには効果はない。

[編集] デフラグソフトでの高速化の手法

デフラグソフトでのファイルの読み書きの高速化の手法をいくつか示す。

[編集] ディスク外周部への配置

ハードディスクはZCAV形式で記録されているため、ディスクの回転速度と記録密度が一定である。

ハードディスクの外周部のデータ転送速度は、内周部のデータ転送速度に比べ、3倍程度高速である[要出典]

読み込み頻度の高いファイルをハードディスクの外周部に配置すると、データ転送待ち時間を短くすることができる。

[編集] 空き領域の最適化

ファイルをすき間なく配置することにより、ファイルを全体的にディスク外周部に移動させることができる。 そのため読み込み速度が高速化される。また大容量のファイルを書き込む場合に断片化しにくくなる。

しかしファイルの直後に空き領域が存在しない場合は、ファイルへの追記を行うときにファイルの断片化が発生しやすくなる。

[編集] 断片化の悪影響の軽減技術

ファイル断片化の悪影響の軽減技術をいくつか示す。 現在ではこれらの技術により通常の使用では、断片化によるパフォーマンスの低下はない。

[編集] OSのディスクキャッシュの利用

ハードディスクより読み込まれたデータは、メモリのキャッシュ領域に保存されている。 そのため同じデータを再度読み込むときは、メモリのキャッシュ領域より読み込む。 すると2回目以降の読み込みでは断片化の影響を受けない。 しかも近年ではメモリが大容量化していることにより、キャッシュミスする確率は低くなっている。

[編集] ファイルの利用履歴を利用した先読み

ファイルの利用頻度は局在化する。 そのため、よく使うファイルの履歴を保存しておき、バックグラウンドで先読みしておく。 するとユーザーが利用するときは、メモリから読み込むので、断片化の影響を受けない。 しかも近年ではメモリが大容量化していることにより、キャッシュミスする確率は低くなっている。

[編集] 遅延書き込み

書き込み時にはハードディスクに直接書き込むのではなく、まずメモリのキャッシュ領域に書き込む。 そしてメモリのキャッシュ領域に書き込みが終了した時点で、ユーザーに書き込み完了を通知する。 その後、バックグラウンドでメモリのキャッシュ領域からハードディスクに書き込む。 断片化により書き込み時間が増加したとしても、ユーザーから見ると書き込み時間は増加しない。

[編集] 読み込み順序の変更

ファイルが3個所に断片化しているとする。 ファイル断片A、ファイル断片B、ファイル断片Cとする。 それらがハードディスク上にファイル断片C、ファイル断片A、ファイル断片Bという順番で並んでいるとする。 この場合は、ファイル断片A、ファイル断片B、ファイル断片Cの順番で読み込むように思えるので、シーク時間が増加するように見える。

しかし実際にはファイル断片C、ファイル断片A、ファイル断片Bの順番で読み込む。 その後、OSやハードディスクが結合している。 そのためシーク時間はあまり増加しない。

[編集] ファイルに必要な速度

ファイルには最低限必要とされる速度がある。 CD音質のWaveファイルの場合、秒間150KBのデータが必要である。 しかし逆に言えば150KB以上のデータ転送速度は必要ない。 断片化でパフォーマンスが低下したとしても、最低限必要な速度を上回っている限り、実用上問題は全くない。

[編集] シーク時間の高速化

昔のフロッピーディスクはシーク時間が秒単位であった。しかし現在のハードディスクはm秒単位である。 シークにはそれほど時間がかからない。

[編集] ソフトウェア

おそらく最も有名なデフラグメンター(デフラグソフト)は、MS-DOSWindowsにバンドルされている「デフラグ」である。Windows2000以降はDiskeeperの基本的な機能だけを提供している。これは以前配布されていたDiskeeper Liteとほぼ同じものであり、古いデフラグと比べると大幅な改善がなされている(Windows2000以降ではデフラグのことを単に「(ディスクの)最適化」と呼んでいる)。 (完全に最適化できない、最適化してもパフォーマンスがあまり向上しない、最適化中に別の作業ができないなどの理由から市販ソフトを利用したほうが良いとの声が強い。詳しくはデフラグを参照。)

他の商用デフラグソフトにはDiskeeperPerfectDiskO&O Defrag(廉価版は驚速デフラグ)、Norton SpeedDiskTechTool Proなどがある。

ソフトウェアを使わずに断片化を解消する方法としては、記憶装置のバックアップをとり、データを消去してからバックアップからデータを再度読み込み直せばよい。

[編集] SSDでのデフラグ

Flash SSDというHDDに代わる二次記憶装置が登場しているが、これはHDDとは根本的に動作原理が異なり、デフラグと相性が悪い[1] 。半導体メモリに共通の特徴であるが、Flash SSDもHDDのシークに相当する動作が存在せず、ランダムアクセスでの遅延時間がそれほど掛からず、また、ウェアレベリングによって意図的に書き込みをページサイズ単位で分散配置するようにしているので、デフラグする必要は無く、反対にデフラグによってFlash SSD内のファイルの位置を移動させるだけのために書き換え動作を行なえば、フラッシュ・メモリの短所である10万回やそれ以下程度の書き換え可能回数を使うため寿命を縮めてしまう。ただしキャッシュ非搭載のSSDで空き領域の断片化により書き込み速度が低下している場合、デフラグの効果が現れることもある。

[編集] ファイルシステム

  • FAT - defrag.exe
  • ext2 - e2defrag
  • ext3 - デフラグ・ツールを持たない
  • ext4 - e4defrag
  • ReiserFS - デフラグ・ツールを持たない
  • XFS - xfs_fsr (マウント状態で使える)
  • HFS+ - iDefrag

[編集] 注釈

[ヘルプ]
  1. ^ http://journal.mycom.co.jp/news/2008/07/23/052/index.html 「Windows VistaはSSDに最適化されていない」--米SanDisk CEOがコメント