【耐久テスト】SDカードの寿命を実際に壊して試す→結果は企画倒れ

Pocket

Nintendo Switch、ドライブレコーダー、スマートフォンなど身の回りの様々なものに使用するSDカード。

「SDカードには寿命がある」「安価なものは1,000回しか書き込めない」「ドライブレコーダーには高耐久タイプを使用する必要がある」など、耐久性に関する気になる情報を目にします。

弊社でもRaspberry Piを使用した製品を扱っているので、非常に気になるところです。

物理的には1,000回しか書き込めないけど、ウェアレベリングという同じ場所に書き込みが集中しない制御がなされているので実際の寿命はもっと長い、という情報も見ますが、いまいち何が正しいのかわかりません。

そこで今回は、SDカードを壊れるまで読み書きしてみて、耐久性を確認してみよう、という企画です。

実験対象


Transcend microSDHCカード 32GB 3D TLC UHS-I Class10 TS32GUSD300S
Transcend 高耐久 microSDHCカード MLCフラッシュ搭載 (ドライブレコーダー向けメモリ)32GB Class10 TS32GUSDHC10V
innowa Loop King microSDHC 32GB メモリーカード 超高耐久性 pSLC 専用ソフト ループ録画 ドラブレコーダーに最適 4K動画撮影対応

①からTLC(トリプルレベルセル)、MLC(マルチレベルセル)、SLC(シングルレベルセル)となっています。ひとつのセルに保存できるデータ量が3ビット、2ビット、1ビットとなっており、耐久性はTLC→MLC→SLCの順に高くなると言われています。価格はひとつのセルにたくさんのデータが保存できた方が安いため、TCLが一番安いです。

検証スクリプト

次のような感じにしてみました。
Windows上でBashから実行しました。SDカードはDドライブです。

$ cat write.sh
#!/bin/sh

echo "1234567890" > /d/text.txt
$ cat read.sh
#!/bin/sh

line=`cat /d/text.txt`
test $line -eq '1234567890'; echo $?
$ cat test.sh
#!/bin/sh

i=1;

./write.sh

while [ "`./read.sh`" = "0" ]
do
        echo $i
        i=$((i+1))
        ./write.sh
done

ウェアレベリングが有効だと永遠に終わらないんじゃないか、実際に壊れた時にどういう挙動になるか、壊れても気づけないんじゃないか、OSのキャッシュが有効だとテストの意味がないんじゃないか、などいろいろ懸念があります。ちゃんと壊れてくれるでしょうか。まあ気にせずやってみることにします。
まずはいちばん早く壊れるであろうTLCから実験します。

結果

3日間プログラム動かし続けたが壊れない!
(正確には表面上、壊れたようには見えない)

上のスクリプトで666,075回ループしたが壊れない!

それではと思い、ファイル上書きじゃなくて削除して新規作成するようにスクリプトを変更して196,564回ループしたが壊れない!

空き容量があるとウェアレベリングが効いて壊れにくいのかと思い、ディスクの大半にダミーファイルを書き込み、ddコマンドで残り容量をほぼ使い切るファイルを書き込むようにスクリプトを変更して1週間プログラムを動かし続けて26,014回ループ、約7TBのファイルの作成と削除を行いましたが壊れない!

いったん中断してベンチマークを走らせてみたところ、壊れてる?

Writeが異様に遅い気がします。少なくとも書き込み性能は大幅に劣化している気がします。
開始時の性能と比較しないといけないのですが、耐久テスト前にRead/Writeしたくないという余計な配慮のせいでベンチマークを行っていません。

これ以上の実験の継続はテストを実施しているPCへのダメージが心配になってきたので止めておきます。

まとめ

Read/Write時にスクリプトがエラーになるような壊れ方をするかと想像していましたが、それは起こりませんでした。しかし性能は大幅に劣化している気がします。既に壊れているのかもしれませんが、壊れているのかどうかの判断も出来ません。

おそらくSDの寿命は抜き差しを繰り返したり長時間給電しなかったりといった使用状況によっても変わると思われます。データが化けたりはあってはならないのですが、それが起きていた可能性もあります。しかしそれをチェックするようなちゃんとしたプログラムは組んでいないので真相は闇の中です。
ただ、データが正しいことをチェックするプログラムにしていたら、壊れるまで途方もない時間がかかる気がします。

教訓

耐久テストは奥が深い。ちゃんと考えてから行おう。



Pocket

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください