4KiBセクタアライメント問題とアライメントオフセット

2TBを超えろ! ATAディスクの4Kセクタ問題とは? - @IT

ハードディスクの容量はここ20年ぐらいで100万倍ぐらいに増えましたが、物理的なサイズは大きくなっていません(むしろ減っています)。ドライブの大きさが変わらないのに容量が増えているということは、内部的にプラッタの記憶密度を上げることにより容量を増やしているということです。これは、1セクタ当たりの物理サイズは小さくなるということであり、セクタ読み書き時の電気信号のS/N比が悪化するということを意味します。
 
HDDメーカーは従来、ヘッドの仕組みを改善して読み取り精度を上げたり、セクタにECCを付加してエラー訂正をしたりして、このエラー問題に対応してきました。しかし、それもそろそろ限界と、HDD業界は悲鳴を上げ始めているようです。
 
現在ATAのセクタサイズは512bytes固定であり、通常、1セクタにつき40bytesのECCが付加されています。これで約1割の容量ロスが生じます(さらに40bytesのリードイン/セクタギャップがあるので、実際には2割のロスになります)。そろそろECCを80bytesに増やさないとこれ以上の高密度化は無理、という声が聞こえ始めていますが、合計3割ものロスは許容できないというのです。(中略)
 
そこでHDD業界は、物理セクタ長は4Kに変更するが、ソフトウェアから見える論理セクタ長は512bytesに据え置き、HDDのファームウェアでエミュレーションするという対策を取ることにしました(注6)。
 
もし、ドライバが「LBA2048から64セクタ分読み込む」ことを要求したならば、内部的には「物理LBA256から8物理セクタの読み込み」に変換するのです(対応アプリケーションが最適化を行えるように、物理セクタ長を取得できるコマンドも新設されています)。

てっきり論理セクタ長も4Kにするもんだと思っていたんですが、やっぱり互換性重視なんですね。
WDのWD10EARSやWD15EARS、WD20EARSは、既に4K物理セクタ(WDは「Advanced Format」と呼んでいます)になっているそうです。

セクタ長を増やすのは、2TiBを超える容量を実現するためかと思っていたんですが、エラー訂正(ECC)強化という意味合いもあるのですね。

とはいえPCのなかで最もレガシーに縛られているHDDです。 それで解決するなら苦労はしません。

昔のハードディスクはLBA(Logical Block Address)ではなく、CHSアドレッシング(注7)を採用していました。その影響で、いまとなっては時代遅れの制約がいくつか残っており、その1つに「パーティション境界はシリンダ境界に一致しなければならない」という制約があります。厳密にいうと、パーティション境界をシリンダ境界ではない場所に設定すること自体は、対応ツールさえあれば可能でした。でもそれではWindowsがブートしないので、誰もそんなことはしませんでした。
 
またLBA導入時には、互換性に関するさまざまなゴタゴタがあり、現在はHDDの内部構造にかかわらず、セクタ63個=シリンダ1個として取り扱うことがデファクトスタンダードになっています(注8)。つまり、LBAが63 の倍数ならばシリンダ境界ということです。これは、パーティションは63の倍数のLBAから始まるということを意味します。
 
しかし63は8の倍数ではありません。この結果、少なくとも第1パーティション(開始アドレスはLBA63)は4KiB境界に合っておらず、第2パーティション以降も8分の7という高確率で境界が合わないということが問題になります。これでは、ほぼすべてのケースでI/O性能が劣化してしまいます。
 
これが4KiBセクタアライメント問題です。(中略)
 
誰がいい出したのか分かりませんが、これを解決するために、ATA規格には「アライメントオフセット」という概念が導入されています。
 
どういうコンセプトの機能かというと「どうせ論理セクタはHDD内ファームウェアで作られた仮想的な概念なのだから、物理セクタで使わない場所があってもいいではないか」という発想の下、物理セクタ0に論理セクタを7個しか入れず、LBAを1つずつずらすのです。これにより、LBAの物理セクタ境界は「8、16、24、32、40、48、56、64」のような8×nのLBAかから、「7、15、23、31、39、47、55、63」のような(8×n)-1のLBAとなり、LBA63は物理セクタ境界にピタリと収まります。(中略)
 
問題は4KiBセクタ対応ソフトウェアがパーティション境界(つまりI/O開始LBA)を8の倍数に合わせると、逆にアライメントがずれてしまい、性能が落ちてしまうことです。誰が考えたんだこれ。(中略)
 
驚くべきことにWindowsはVistaにおいて過去の互換性を完全に捨て(注9)、パーティションを1MiB境界にそろえるよう仕様を変更しました。またアライメントオフセットがあるHDDの場合は、1MiB+アライメントオフセット(普通は3584bytes(=512×7))をパーティション境界にします。
 
つまり、Vista以降でパーティションを切った場合、XPを直接インストールすることはできませんし、HDDによって最適なアライメント位置が異なるので、ディスククローンツールでOSイメージをコピーすると性能が大幅に劣化する可能性があるということです(注10)。

はぁ。 Windowsがさっさと過去を切り捨てて、OSSが途方に暮れているというのが面白いですね。
で、今後はどうしたらいいのでしょうか?

口火を切ったのはJames Bottomley(SCSIメンテナ)です。彼によると、
 
 1. そもそも512bytesセクタと2TiB制限には本来何の関係もない。DOSパーティションがLBAを32bitで管理しているのが原因なので、GPT(GUID Partition Table)に移行するべきだ
 2. 論理4KiBセクタは完全にうまく動作するが、BIOSとブートローダの対応は不完全だ
 3. 論理512bytesには、Tejunがいったような問題が存在する
 4. アライメントオフセットはもっと複雑な問題を引き起こすので、むしろ抹殺するべき
 
と述べ、結論として非ブートパーティションではGPT+4KiB論理セクタを勧める、と結びました。(中略)
 
Jim Meyering(Partedの開発者)は、「Partedの変更点のニュースはここから取れるよ」とURLを提示した後、「でも僕はGPTを強く勧めるよ。2^32を超えるオフセットに対してよりよいプロテクション(checksum、ディスク末尾のbackup table)を提供するし、アナクロなプライマリ/エクステンド・パーティションの概念がない(すべてプライマリ)。Windows XP縛りがないなら、新規インストールでDOSパーティションを選ぶ理由がないよ」と補足しました。(中略)
 
結論としては、4KiB論理セクタ長のブートローダ対応は終わっていないけれども、512bytes論理セクタ長のときの各種ツールの対応はほぼ完了といった状況のようです。いやはや、こんな大きな非互換を導入してしまうHDD業界はホント罪深いですね。

HDD業界が悪いんじゃなくて、ソフトウェア業界がポンコツなんだと思うけどな。

我が家のファイルサーバーは、WHSからFreeNASに移行してしまいましたんで、ディスク管理はMBRではなくGPTになっています。 ブートデバイスは2GBのUSBメモリなんで、DOSパーテションでもOKです。

ところで 2TB HDDですが、既に WD20EARS や Samsung HD203WI は12,000円を切っているんですね。 昨年末の2/3です。
現在 1TBと1.5TBが3台ずつなんですが、1TBを2TBで置き換えて台数を減らしたいですね。