2015年3月20日金曜日

スマホでSD Formatterは使ってはいけない

スマホデータのバックアップでハマったのでメモ。
なまじ中途半端にいらんもん知ってるせいで損してた。

■まず結論

スマホ用microSDは、FAT32 or FATのクラスタサイズ16KBで
フォーマットしよう。
よくわからない場合はスマホでフォーマットして
気にしないようにしよう。


■そのメリットは?
メリットというより、デメリットの回避。

SDフォーマッタを使用するとFAT形式、クラスタサイズ
(アロケーションユニットサイズ)32KBで手持ちのSDカード(2GB)が
フォーマットされてしまっていた。
これをFAT32にすることで、4~16KBまでクラスタサイズを
選択することが可能に。

・クラスタギャップの低減
LINEのデータやスマホゲームのキャラデータ(「チェイン
クロニクル」みたいなの)は数KB~10数KB程度のデータが
山ほどあり、クラスタサイズ32KBだとクラスタギャップで
無駄な領域が発生する。
しかしこれはメインじゃない。
今日び数KBのクラスタギャップなんて1万個かかってきても
0.1GBもありゃしないので痛くも痒くも無い。

・外部記憶装置として
動画など、2GBを超える大きなファイルを運ぶ手段として
スマホの記憶領域を使用することが可能になる。
が、今時通常は当たり前に大容量のSDカードを使用し、
FAT32でフォーマットいているもんだと思うけども。

また、極端に大容量のmicroSDカードを使用すると
必然的にクラスタサイズを大きく取らざるを得なくなるので
書き込みが遅くなる恐れがあるともいえる。

・速度改善
を、今回のメインにすえて次項以降で説明。
ひらたく言えば、PCで半分常識だった「クラスタサイズは大きく」
というものはここではあてはまらないということ。



■速度比較
手持ちのSDカードのファイル個数は次の通り

0~4KB:2909個
0~8KB:4658個
0~16KB:6619個
17KB~ :4261個
(フォルダ含まず)

それぞれのフォーマットツールで初期化した
SDカードへのファイル転送レート(最遅時)

SDフォーマッタ(FAT 32KB):280KB台/s
Windows標準(FAT32 16KB):780KB台/s
速度読みはExplorer表示なのでリアルタイム値ではない。

実に約3倍。
ここでマジックで赤く塗ったんでしょとかいうのが
おっさんの言うこと。


■なぜ?
16KBのファイルを書き込む場合で考える。
以下御幣を恐れないおおざっぱな説明。

・クラスタサイズが32KBの場合
512Bの領域を64回確保します ←ここの作業が容量的にも時間的にも無駄

確保した領域に1回書き込みます

・クラスタサイズが16KBの場合
512Bの領域を32回確保します ←半分に減らせた

確保した領域に1回書き込みます

と、16KB以下のファイルを書き込む際の手順が
減らせたおかげ。
じゃあクラスタサイズが小さければ小さいほどいいか
ってーとそうでもない。
逆に大きなファイルを書き込むときに遅くなる。

つぎは4MBのファイルを書き込む場合。

・クラスタサイズが32KBの場合
1.512Bの領域を64回確保します
2.確保した領域に1回書き込みます

1、2の作業を128回繰り返します

・クラスタサイズが16KBの場合
1.512Bの領域を32回確保します
2.確保した領域に1回書き込みます

1、2の作業を256回繰り返します

とまあ、今度はくりかえしの回数が倍になった。
通常はこの繰り返しが多くなるとテキメンに遅くなるので
クラスタサイズを大きくすることで繰り返しをなるたけ
減らそうとしていた。
が、あまりにこまいファイルがあまりに多い場合は逆効果に
なってしまう。


■要するに
収めるファイルの大きさと個数で相談。
ファイル全体の容量やディスクサイズではない。

デジカメなど、大きな写真データしか収めない
場合はFATで問題ないのだけど、むしろクラスタサイズは
大きめにとっておいたほうがよろしいのだけど、
スマホではこのちまちましたファイルがいるもんだから
面倒くさい。

さらに、同じカードの中にこのちんまいデータから
写真、撮影したムービーまでいろんなサイズのファイルが
あるからさらにややこしい。

今回は、
0~16KB:6619個
17KB~ :4261個
と、16KB未満のファイルが若干上回っていたので
16KB未満のファイルによりメリットがあるようにした。
しかしこれは同時に

大きいファイルの書き込み速度を犠牲にした

ゆえのこと。
実際、FAT32のクラスタサイズ8KBのときは
最遅時540KB/sと最悪レベルではなかったものの
大きなファイルを転送する際のトップスピードが
でなかったせいでトータルでの平均速度は
あがらず、却って16KBよりも時間がかかった。

なので、個人的にはこまごましたデータが多い場合でも
16KB程度がベストと思う。
もちろん、スマホゲームしないよ、音楽を転送したり
写真を撮ることが多いよ、という人は32KBや64KBでも
なんでもいいかもしれない。


■ちなみに
ここで書いたことは書き込み時にのみ影響するので
通常は読み込み速度の改善に寄与することはない。