ハードディスクの内部は同心円状に区切られた「トラック」と呼ばれるドーナツ状に区分けされた領域と、さらにそれを細かく分割した「セクタ」と呼ばれる領域が存在します。
ハードディスクにデータを保存する際には、セクタ単位でファイルが格納されます。
一般的なハードディスクは1セクタあたりの容量が512バイト(0.5KB)、もしくは4,096バイト(4KB)となっています。一般的に、OSはセクタ単位でデータを取り扱わず、さらに複数のセクタをひとまとめにした「クラスタ」でデータが管理されます。
Windowsで扱っているNTFSフォーマットで一般的な設定の場合は、クラスタのサイズは4KBとなっています。1セクタ512バイトの場合、8セクタで1クラスタとなります。
クラスタがWindows上でのファイルの最小単位なので、どんなに小さな容量のデータでもハードディスク上では4KBの容量を使用することになります。たとえば10KBのファイルは3クラスタに分割され、12KB分のデータ領域を使用することになります。
また、1つのファイルが連続したクラスタに書き込まれているとは限らず、すでに別のファイルが存在していて、空き領域が分散している場合はバラバラの状態で書き込まれることもあります。
USBメモリやSDカード、SSDにはデータを保存する半導体チップであるフラッシュメモリが搭載されています。
フラッシュメモリにはNAND型とNOR型があり、一般向けのデータ記録媒体としては安価で大容量のNAND型フラッシュメモリが使用されています。
フラッシュメモリには1ビット~数ビットのデータを記録できる「セル」が多数搭載されていて、さらにセルが複数セットになった「ページ」がデータ記録および読み取り時の最小単位となります。
フラッシュメモリには「データの書き込みや消去はできるが、書き換えはできない」という特徴があります。さらに、複数のページが構成される「ブロック」という単位でしかデータを消去することができません。このブロックは1つで数KBから数十KBの容量があります。
書き換えができないのであれば、どうやってデータを上書きするのかというと、書き換える対象のブロックのデータを全部削除したうえで、修正後のデータを新規に書き込むという仕組みになっています。そのため、例えば10KBの文章の中の1文字、たった1万分の一の修正をするだけでもブロック単位でまるごと書き換える必要があります。
ハードディスクにおけるデータの記録は、磁性体の磁気の状態を変化させるだけなので同じ個所にデータの書き込みや消去を行っても機械的な故障がない限り劣化することはありません。一方、フラッシュメモリは、電子の移動によりデータを記録する方式のため、絶縁体の劣化などの要因により同じセルに対して書き込みや消去を繰り返すと、一部のセルが読めなくなることがあります。そのため、フラッシュメモリには書き換え回数に上限が存在します。
データの書き換えがブロック単位で行われることから、頻繁な編集をすると何度もブロックごとの消去と書き込みが発生することになり、同じブロックが繰り返し使われると書き換えの上限に達して故障するリスクが高まることになります。
そのようなことが発生しないようにするために、「ウェアレベリング」という技術で、データの書き込みの際にブロックごとの使用回数の均等化を行ってフラッシュメモリの寿命を延ばしています。
ウェアレベリングはUSBメモリやSSDに搭載されたコントロールチップで実施されていて、OSから指定されたブロックのアドレスと、実際の書き込みブロックのアドレスを置き換えるなどの処理をすることで実現しています。そうすることで、同じセルを連続使用させずに、使用頻度の低いセルにデータを書き込むよう誘導します。そのため、OS側で連続したデータを連続したブロックに書き込んだつもりでも、実際にはコントロールチップでアドレスを変更されてバラバラに書き込まれていることもあります。
そのため、コントロールチップが破損した場合に、記録チップのデータを直接読み取っても複数のブロックに分散したデータを、1つのファイルとして一本化することができないことになります。データレスキューセンターではコントローラチップの制御情報を解析し、再現する技術を用いて、分散したデータの復旧、復元を行っています。