4K byte sector向けのReed Solomon Code

Hard DiskのError CorrectionにはReed Solomon符号が使用されていました。Reed Solomon符号は、1シンボル当りのbit数に応じて最長符号長が決まる符号ですが、HDDへデータを記録する際の最小単位である「セクタ」のサイズに応じて、使用するReed Solomon符号の1シンボルのbit数を最適化する必要があります。セクタサイズが512byteの場合は1シンボル当り10bit, セクタが4k byteの場合には1シンボル当り12bitのReed Solomon符号が使われています。
IDEMA, Reed-Solomon codes for long data sectorshttp://d.hatena.ne.jp/toshi532/edit#
Reed Solomon符号では、1シンボルをm bitとするとGF(2^m)の拡大ガロア体を使って定義されます。この時の最大符号長(ユーザデータ+パリティ)は

    • 2^m-1 シンボル
    • (2^m-1)*m ビット

となります。具体的には

m 最大符号長 (シンボル) 最大符号長 (ビット)
9 511 4599
10 1023 10230
11 2047 22517
12 4095 49140

どのmの値を用いるかの決め方は、最大符号長(ビット)がビットで換算したセクタサイズよりも大きくなるようにします。512 byteセクタの場合は、m=9以上とすれば良いですが、何故かm=10が選ばれているようです。4k byteセクタの場合には、m=12が用いられるようです。

セクタサイズ(バイト) セクタサイズ(ビット)
512 4096
4096 32768

ただし、上の表のセクタサイズはユーザデータの大きさのみです。本当は、ユーザデータ+パリティの大きさを最大符号長でカバーできる必要があります。逆にいうと、最大符号長とユーザデータのサイズの「差」が、パリティの個数の限界になります。

    • 512 byteセクタの場合
m 最大符号長 (ビット) ユーザデータ(ビット) 最大パリティ個数(ビット) 最大パリティ個数(シンボル)
9 4599 4096 503 55
10 10230 4096 6134 681
    • 4k byteセクタの場合
m 最大符号長 (ビット) ユーザデータ(ビット) 最大パリティ個数(ビット) 最大パリティ個数(シンボル)
12 49140 32768 16372 1364