無用の用無 失敗の記録帳、こうすりゃよかったのね。

webは失敗回避の知恵でいっぱい。他人には無用の用ですら無い自己中心的な備忘録です。口頭だけでまだ無形な話もあります。

フラッシュメモリーを長寿命にするためのfdiskの使い方 geometryには何がよいか色々調べた

2012年05月24日 | Weblog
追記の追記の追記
以下の記述はSLC,MLC,M=2の場合。TLC,8LCでは3層、多層の構造になるのでerase block sizeの計算が違ってくる。さてどうすればいいのか分からない?
追記の追記の追記のおわり
追記の追記
ここによると
linuxでSDカードのパーテション切り、フォーマット、アライメントを行う手順は
SDカードをアダプターを介してさして認識させる
そこで繋がれているSDをみつける(間違えるとやばいので十分確認する)
 df -h
以下のように表示されている(一例)
/dev/sdx /media/xxxx/IDyyyy/mmcblk0
それらしきものをみつけたらマウント解除
 umount /media/IDyyyy/mmcblk0 (tab補完を使う)
つぎにfdiskをかけてジオメトリーを変更するが、権限がないのでsuper userで行う。head sector数は255,63からあまり違わないものを選んで設定
su (then press enter, this enables super user mode, or admin)
fdisk -H 224 -S 56 /dev/sdx
 224=32x7, 56=8x7と(2の累乗)x7にとってある例
つぎにfdiskでパーティション境界を決まった位置に設定するためのコマンド
p (現在値を表示Print)
d (既存のパーティションを削除Delete、どのパーティションか聞かれるので1を、アライメントのためには最初から切り直す)
n (新しい New パーティションの作成, 基本Primalyパーティションをつくるのでpを選ぶ).
x (エキスパートモードにするeXpert)
b (データ領域の最初のパーティション1を選びセクター1から始める)
r (もとのモードに戻るreturn)
t (パーティションタイプをFAT32にするため,cを選ぶ)
x (またエキスパートモードにする)
b (データ領域をパーティション1の256セクター=1Mibからに設定する)
r (もとのモードにもどる)
w (変更をディスクに書き込む) 中止はquit

さらにデータ領域の開始をerase blockの整数倍にアライメントするには
mkfs.vfat -F 32 -s 32 -v /dev/mmcblk0p1 (パーティション1が対象)
表示される結果をみて FAT sizeを確認して
FAT size x FAT数(2が既定値) x 512(セクターサイズ) / erase block size =" erase block 数 小数部を繰り上げて整数にする。
(上のerase block 数が奇数なら+1、として偶数にする) x erase block" size=" データ領域の開始をアライメント境界に合わせるバイト数
FAT領域の最終値とのずれを予約領域としてとる。バイト数なので次のように予約領域セクター数Rにする 
( 境界に合わせるバイト数ーFAT領域の最終値)/512 = 予約領域sector数(R)
mkfs.vfat -F 32 -s 32 -R 256(一例) -v /dev/mmcblk0p1 (Rの値は上の式から計算したものにする)
WEBで見かけたものは
a SanDisk "Ultra" 64GB SDxC Class 10 "UHS-1"でR=50
追記の追記おわり
追記
easeusを使うのが一番楽かも(使いこなせてないので不明)
Partitioned to FAT32 using Easeus
追記終わり

ここからがもとの記述
webで調べると消去サイズ(erase block size)より小さい書き込みブロックサイズで書き込むと書き込み倍率=消去サイズ÷書き込みサイズの回数だけ既に書き込まれている領域に消去のための書き込みが追加して行われるので書き込み回数で表現されている寿命は実質短くなるということだ。さらに初めて書き込む場合にはこの事前の消去が不要なので書き込み速度は一番速いが、既存の書き込みデータを保存するために一度別の領域に書き込んでから新しいデータを追加して書き込むということが行われるので書き込み速度が低下する.フラッシュメモリの寿命をできるだけ保ちながら使うためには書き込み倍率をできるだけ小さくしてやればよい。そののgeometryがいくつかある。しかし消去ブロックサイズは公表されていないのでwebで最適といわれる書き込みブロックサイズは色々違っている。古い情報ではイレーズブロックサイズは128kなので、そうしたときの書き込みブロックサイズを決めるgeometryつまりhead sector (cylinder)数は以下のようになる。
Header Sector WEB
イレーズブロックサイズを128Kとして
 -S 56 -H 224 (128K) TEDさん
-S 4 -H 16 flash memoryにダメージ
-S 64 -H 32 disklessfun
-S 32 -H 32 DSL
-S 62 -H 248 もどこかでみた

イレーズブロックサイズ(erase block size)とは、何かと調べると
flash memory ではビット毎に書き込むのではなくそれを集めたブロック単位で書き込むために、そこに既に書き込まれている情報は一旦は消去する必要がある。その消去のサイズは技術進歩により一定の値に止まっていない。ブロックサイズは一括して書き込むための単位でこれが消去サイズより小さいと、1ブロックを書き込む毎に 書き込み倍率=(消去サイズ)÷(書き込みブロックサイズ)回だけ書き込みが行われるのでフラッシュメモリーの寿命が短くなる。この対策が上のようなwhite or black listがある理由である。しかしflash memory毎のerase sizeは公開されてはいない。

HDDに書き込む時、バイト単位で書き込むと効率がわるいので512バイトを1セクターにまとめて一度に書き込む。これは書き込まれる側のHDDでアクセス時間がかかるので書き込む側のOSが対応してきた処理だ。
最近になりHDDの書き込み密度が高くなり、一度に書き込むセクターのバイト数を4Kに拡大したのがAFTだ。OSが今まで通り1セクタが512バイトでは効率が悪いのでwindows7からはAFTを効率よく使うことができるようになった。したがってNTFSで使うならM$まかせでよい。(フラッシュメモリーではNTFSをつかうメリットはない。データ圧縮ぐらいだがフラッシュコントローラが行ってくれているはず)
SSDではコントローラが入っているので意識しなくてもよいが、USBメモリやSDカードなどをFAT32で長寿命で使うためにはMBR、BPBやFATとRDEが固定されたサイズなのでこれの終わりをerase block sizeの整数倍にする。これらの領域のあとのユーザーが書き込むデータの実体部分はerase block sizeの境界をまたがないように設定できる。FAT32ならファイル構造がすべて公開されているので、mkfs.vfatをつかってerase block sizeと境界とを合わせることができる。

formatのパラメータは FAT32 なら F 32 (、 FAT16 なら F 16)

いつもお世話になるまりもさんのところにあるCHS変更プログラムを使えばerase sizeさえ分かればwindowsが一律で決めるよりは寿命を長くすることができるだろう。

linuxのfdiskのexpert modeでH Sの変更
寿命を長くするlinuxのファイルシステムについて勉強しておこう
またファイルシステムのブロックサイズが4kBならusb memoryのread-modify-writeのerase block sizeにアライメントをとるようにfdiskで切り直すと書き込み速度が向上する.

erase block sizeがわからないときblock sizeはどの値が最適か?調べるには書き込みスピードの変化を見ればよいだろう。block sizeがerase sizeより小さくなると遅くなるはずだ。そして書き込み倍率も最小値より大きくなるので、寿命が早まることになる。block sizeを大きくするとファイルの末尾に平均でblock sizeの半分の未使用分がでるので、つかえる容量が減ってしまうペナルティが生じる。
 
fdiskのパラメータでさらに大きな消去ブロックサイズもある。最近の最近の大容量のSDにはerase block sizeが4Mibもあるらしい
容量が4G以下のSDなら書き込みブロックサイズには以下のものが選べるだろう
Cylinder size(シリンダーサイズ)x sector size(セクタサイズ 512)x倍率
2048k (512 x 4k)
-S 32 -H 128
1024k (256x4k)
-S 16 -H 128
-S 32 -H 64
512k (128x4k)
-S 8 -H 128
-S 16 -H 64
-S 32 -H 32
256k (64x4k)
-S 4 -H 128
-S 8 -H 64
-S 16 -H 32
-S 32 -H 16
古いSDは以下のパラメータ
128k (32x4k)
-S 2 -H 128
-S 4 -H 64
-S 8 -H 32
-S 16 -H 16
-S 32 -H 8



コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする