やみくもにデフラグしていませんか? SDカードではご法度です

2016062001

PCには、デフラグ (defrag) 機能があります。デフラグは、フラグメンテーション (fragmentation) を減らす処理を意味します。フラグメンテーションとは、日本語では断片化と言います。

ではフラグメンテーション(断片化)とは何か。
ユーザがファイルを書いたときに、メディアに記録する内容としては、ファイル名・ファイルサイズ・ファイルの更新日時などがあります。さらに一番大きい情報量としては、ファイルの中身です。
写真やビデオなどではファイルの大きさがかなり大きくなります。ファイル本体は複数のブロックに記録されます。(ブロックはそのメディアの記録単位です)
一般的には、複数のブロックは連続していると思いますが、ファイルの削除や、コピーなどを何度も繰り返していると、中途半端な連続サイズしかなくなり、連続したブロックを割りあてられなくなり、飛び飛びのブロックを使ってしまうことが発生します。これがフラグメンテーション状態です。

本当のところ、ファイルの本体だけでははなく、FATファイルシステムではファイル名の部分でもそのようなことが起きます。例えばディレクトリにもサイズが表示されますが、そのディレクトリの下のファイルを作ったり削除したりを繰り返すと、ファイルが1つもなくても、そのディレクトリのサイズは普通よりもかなり大きいことがあると思います。これもある意味、断片化しています。

先の話に戻り、ファイル本体を飛び飛びのブロックを使うことで何が問題なのかというのを説明します。
ストレージメディア(HDD、SSD、フラッシュメモリと呼ばれるすべて、光ディスクと呼ばれるものもすべて)は連続ブロックを読むのはいいのですが、不連続なブロックを読むとき、どうしても少し時間がかかることになります。それを感じない程度の時間か、または感じないように工夫しているかはそれぞれの機器に依存します。
フラッシュメモリなどの、SDカード・USBメモリも、不連続なブロックを読むとどうしても時間がかかってしまうことになります。メモリだから速いのでそんなことは光ディスクと比べて時間がかからないのではと思うかもしれません。しかし、実はフラッシュメモリは容量が多くなってきて、いろいろな機能(ウェアレベリングとよばれる平準化、MLC、TLCなどによる、ブロックサイズが大きくなってきていること)により遅くなってきています。SSDはこれを発生しないようにしています。しかしながら、SDカードやUSBメモリなど、電力容量が少なく、抜き差しされ易いメディアではフラッシュメモリが遅くなってしまうところを穴埋めできません。
どうしてもこれらSDカードやUSBメモリのメディアで断片化すると遅くなってしまいます。
したがって、SDカードやUSBメモリでは断片化が起きないように使うのがもっとも良いことになります。

どうやったら断片化が起きにくいか。
書いたファイルを削除しない、容量がいっぱいになったらバックアップをとってクイックフォーマットして必要なファイルだけ戻せばほぼ断片化も起きない状態となります。
カメラなどでは、細かく写真を消すことをしないで、いっぱいになる前までにバックアップを取りクイックフォーマットをする、という方がメディアにとって良いはずです。

デフラグは、不連続なブロックとなっているファイルを連続になるように再配置する処理です。一時的に空いている領域にファイルをコピーして、再配置となるので、少なくともファイル1回分の書き込みが多く発生します。場合によってはその数倍以上の書き込みが発生することがあります。

フラッシュメモリは、書き込み回数の上限(P/Eサイクル)があり、書き込みが増えると使えなくなるメモリが出てきます。
この使えないメモリが増えてしまうと、フラッシュメモリの寿命が来てしますます。
本題のやみくもにデフラグをしないほうが良い理由は、フラッシュメモリの寿命を遅らせるためです。

SSDなどはいろいろな機能が入っていますのでこの程度でどうのということはないように作られていると思ってください。通常はフラッシュメモリではデフラグはご法度です。