USBメモリーは書き込み時にエラーが発生しなくても正常に読み出せるとは限らない。
そんなのは当たり前のことのような気がするが、書き込みを繰り返すといずれは壊れる。USBメモリーが正常に認識されなくなったり、フォーマとできなくなったり、書き込み禁止状態になったり。書き込むときにエラーが発生したら新しいUSBメモリーに交換すればいいだけのことなのだが、読み出す際に正常に読み出せているかどうかはデータを照合しないとわからない。画像ファイルなら開いてみて画像が正常であるかどうか判断するしかない。Officeのファイルにしても実際に開いてみて正常に開けるか、中身に問題がないか確認するしかない。単なるテキストファイルだと文字化けしているような箇所を探し出すなどしないといけない。何かアプリケーションソフトから扱うようなバイナリファイルだとそのソフトが異常な動きをするまで気付けない。気付けたとしても原因不明な状況になっているだろう。
USBメモリーにファイルをバックアップしてもリストアできるかどうかはわからない。もちろんハードディスクにも同じことが当てはまる。しかし、経験的にそういう異常が発生する頻度には大きな違いがあるような印象を持っている。だからファイルを運ぶ際はUSBメモリー3本に同一内容をコピーして出かける。DVD-RやCD-Rもプラスするときがある。ひどい時はSSDも持っていく。状況次第ではクラウドにも保存しておく。もちろんノートPCごと持っていくこともある。まぁ、ちょっと病んでるのは自覚している。最近はかなりマシになってるけどね。
グリーンハウスのUSBメモリー PicoDrive L3で再実験
今回は、「USBメモリーは書き込めても安心できない」で行った失敗した実験をグリーンハウスのUSBメモリー PicoDrive L3で再実験する。
PicoDriveL3の容量は7.7GB、フォーマットはexFAT。
7.4GBのファイル1つと128MBのファイル2つを書き込む。
PicoDriveL3に7.4GBのファイル一つと128MBのファイル1つを書き込むと空き容量は0バイトとなる。
最初に7.4GBのファイルを書き込んでおき、
128MBのファイル(2種類)だけ削除と書き込みを繰り返す。
2種類の128MBのファイルは異なる内容で、
一つはランダムなデータで構成したファイル(A)、
もう片方はバイナリー値「00」で埋め尽くしたファイル(B)である。
ファイル(A)を書き込む → ファイル(A)を削除 → ファイル(B)を書き込む → ファイル(B)を削除
というサイクルを1サイクルとし、書き込み回数は2回とカウントした。書き込みは「copy」コマンドで行う。
7,151回の書き込みを終えて
書き込み回数は7,000回を超えた。途中、実際に128MBのファイルを読み出して内容の照合を行ってきたが(69回)、現在のところ正常に読み出せている。書き込み回数が6,200回ぐらいのときに7.4GBのファイルの照合も行ったが問題なかった。
8,153回の書き込み完了
読み出した128MBのファイルの内容に異常なし。そろそろエラーが発生するか?
12,161回の書き込み完了
読み出した128MBのファイルと7.4GBのファイルの内容に異常はなかった。以降は、128MBのファイルと7.4GBのファイルの両方の内容を確認する。
16,166回の書き込み完了
ファイルの内容に異常なし。2TBほど書き込んだことになる。どうなってるんだ?
21,171回の書き込み完了
異常なし。3TBが近づいてきた。
25,175回の書き込み完了
異常なし。3TBを超えてしまった。読み出したデータの不整合が起きる前に書き込み禁止になったりして。。。
31,182回の書き込み完了
異常なし。4TB突破。
(PicoDriveL3はグリーンハウス製だが、)トランセンドのWEBサイトによるとウェアレベリングにはダイナミック・ウェアレベリング、スタティック・ウェアレベリング、グローバル・ウェアレベリングのように3種類に分類できるらしい。
このPicoDriveL3にはスタティック・ウェアレベリングまたはグローバル・ウェアレベリングのような機能が導入されているとしか思えない。
39,190回の書き込み完了
異常なし。5TB突破。
もしウェアレベリングの機能を搭載しているとすると最低でも8TBは書き込む必要があるかもしれない。
46,197回の書き込み完了
異常なし。6TB突破。
この検体が当たりなのかもしれないが、ここまでやって壊れないなんて凄いのかもしれない。ただ、記録をとっていないのであくまでも感覚になってしまうのだが、読み取り速度は若干落ちてきているような気がする。
当初は75MB/sオーバーの読み取り速度が、現時点では70~74MB/sの範囲で推移している。
※ここで言う「読み取り速度」は7.4GBのファイルの内容を照合する際の読み取り速度である。照合する処理に時間が必要なので、単純に読み取る速度よりも遅くなる。
54,205回の書き込み完了
異常なし。7TB突破。読み取り速度は67.9~70.5MB/s。
明らかに読み取り速度が徐々に低下してきている。
62,213回の書き込み完了
異常なし。8TB突破。読み取り速度は66.3~69.7MB/s。
直近5,000回で読み取り速度は70MB/s以上出ることはなかった。確実にダメージは蓄積していると思われる。読み取り速度が低下傾向にあるということは、読み取り時のエラー訂正に必要な時間が増えてきているのだと推測している。最終的に、エラー訂正ができず読み取りデータの内容に不一致が発生するか。それともUSBメモリー自体が認識できなくなるだろうか。
70,221回の書き込み完了
異常なし。9TB突破。読み取り速度は64.8~67.5MB/s。明らかに読み取り速度の低下が進行している。この読み取り速度は「書き換えを行っていない7.4GBのファイル」の内容の照合を行っている際の速度である。この書き換えを行っていないファイルの読み取り速度が低下してきていること、書き換えを繰り返している128MBのファイルのその書き換え回数が2千回を優に超えていることからウェアレベリングの機能が搭載されているとしか思えない。
※以前の実験ではUSBメモリー全体に対し約1,000周の書き込みを行ったところでUSBメモリーが認識しなくなった。
ウェアレベリングの機能が搭載されていたとしても、既に9TBを突破している。そろそろこの実験の終了も近いのかもしれない。
77,228回の書き込み完了
異常なし。10TB突破。読み取り速度は64.5~67.2MB/s。読み取り速度は微減。
85,236回の書き込み完了
異常なし。11TB突破。読み取り速度は62.5~66.0MB/s。読み取り速度の低下は進行中。

90,241回の書き込み完了
ついにエラー発生。書き込み量は約11.7TB。読み取り速度は60.1~62.9MB/s。

内容の比較において不一致が発生したのは7.4GBのファイルである。このファイルは実験の最初に一度書き込んだきりである。書き込みと削除を繰り返した128MBのファイルにおいては今のところ内容の比較での不一致は発生していない。

縦軸:転送速度、横軸:書き込み回数
読み取り速度は書き込み量が6TBになった頃から記録を始めたが、その辺りから速度低下が顕著になり始めたと考えられる。
さらに書き込みを継続した結果
7.4GBのファイルを削除後、再度書き込むと、内容の不一致は解消されたので実験を継続した。この時の読み取り速度は68.1~69.3MB/sに回復。
書き込みが9,000回(およそ1.17TB)を超えたころ、USBメモリーは書き込み禁止状態となった。最後に正常に内容の照合が行えた時(書き込み9,009回)の読み取り速度は61.9~64.3MB/s。
USBメモリーの容量の300倍
以前の実験、新品USBメモリーが壊れるまで書き込んでみた(2)と今回の結果から、やはり300周程度(ざっと8GB×300=2.4TB程度)の書き込みで新しいUSBメモリーと交換するのが無難な気がする。TBWの値が容量の300倍程度のSSDを見かけるので、それほど外れた目安でもなさそうに思う。もちろん、このPicoDriveL3に限っての話であるし、同じPicoDriveL3でも生産ロットや生産工場の違い等で全く異なる傾向である可能性も十分にあるだろうが、容量の300倍というのは実用性と十分な安全が期待できる目安だと考えている。
USBメモリーって怖いな~
USBメモリーに保存してるファイルを別のメディアにコピーしたとき、そのファイルの中のデータが正常かどうかはわからない。ということが今回の実験で再認識することができた。そのファイルの中身を1バイトずつ(1ビットずつ)検証するまでは正常であるとは言えない。
サイレント・データ・コラプションと呼ばれる現象に当てはまるのかな。ウェアレベリング機能が搭載されているならサイレント・データ・コラプションには当てはまらないかもしれないが、見た目の現象からすると似たようなものか。
いずれにせよ、こんなもの怖くて使えない。300周で新しいUSBメモリーに交換するとしても、100周でデータの不一致が起きないとも限らない。はずれを引く可能性もあるのである。はずれを引いてもUSBメモリーの認識不良や書き込み禁止が起きるだけなら対処のしようもあるが、買ってすぐにデータの不一致が発生するようなハズレが万一あり得るのだとすると対処に困る。これまでに、数十本の新品USBメモリーにおいて初期不良を確認するためにCheckFlashで読み書きテスト(概ね1周~2周のテスト)を行ってきた中でデータの不一致が発生したことはないが、たかだか数十本(100本未満)の経験。
解決策を考える
ファイルを圧縮または暗号化した上でUSBメモリーに保存する。そうすると、展開時や復号時にデータの不一致を察知できる可能性が出てくる。完全無欠とまではいかなくても十分に実用的な方法であると思う。
複数のファイルがあってもZipなどで1つにまとめてからUSBメモリーに保存しておけば手間はさらに増えるということもない。Windowsのバージョンにもよるが、WindowsのエクスプローラでZipを開くことができるし、そこでファイルやフォルダーをドラッグドロップしたり削除もできるので使いやすい。
USBメモリーに対してBitLockerを有効にするというのもありだと思う。環境によっては書き込み速度が半減したりすることがあるようだが、操作は簡単だと思う。パスワード入力は面倒だが、USBメモリーを挿した時に1回だけなので個人的には許容範囲。Windowsのバージョンやエディションによっては使えないのが難点。
BitLockerは使えなかった。USBメモリー内のファイルのデータが破損していても別媒体にコピーする際にエラーは検出されなかった。普通にコピーできてしまう。
USBメモリーに付属している暗号化機能を使う。USBメモリーによって様々なので使い勝手が良いかどうかは実際に試す以外にない。
圧縮機能やベリファイ機能(バックアップ後のファイル単独で正常性を確認)の付いているバックアップソフトを使用する。使い勝手は別としてWindowsに付属している「バックアップと復元(Windows 7)」も使える。
2本のUSBメモリーに同一内容を加工無しに書き込み、そのうちの1本からコピーしたファイルの内容と、もう1本に格納しているそのファイルの内容を照合する方法。複数のファイルがあると手間がかかる。
ハッシュ値を比較する方法は複数のファイルを扱う場合は手間がかかり過ぎる。
USBメモリーをNTFSでフォーマットしているならWindowsの「ドライブの圧縮」機能を使う手も考えられるが、小さいファイル等、圧縮後にサイズが大きくなるファイルは圧縮されないかもしれない。