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)の拡大ガロア体を使って定義されます。この時の最大符号長(ユーザデータ+パリティ)は
となります。具体的には
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 |