HDD の 4KB セクタ化による影響 †HDD のセクタサイズの変更は私としてはかなりショッキングな話だったのでチャットで話題にしてみたんだけど,どうも反応が薄い. 「自分の手の届かない所なので,ジタバタしてもしょうがない」と諦めてるのか,それとも「何がどうなるのか想像もつかない」のか. で,「想像がつかない」人のためのドキュメントがこちら. Hard Disk Drive Long Data Sector White Paper 例によって http://bigsector.org/ 上のもの. ざっと目を通してもらえばわかるけど,「上へ下への大騒ぎ」になっちまうわけである. エミュレーションモードとネイティブモードのセクタ対応 †はっきりとは書いてないようだけど,おそらくはもっとも単純な
こんな対応なのだろう. CHS パラメータの呪い †Windows Vista では違うようだけど,それより前の Windows では,シリンダ数・ヘッド数・セクタ/トラック数のいわゆる CHS パラメータでのシリンダ境界に合わせてパーティションを切っている. 現代の HDD ではトラックあたりのセクタ数を外周と内周で変えていたりするので(MO の記録面を想像してみるといいだろう),CHS パラメータは HDD の物理的な値とは別物である. ここで思い出してほしいのは,(ATA HDD では)ヘッド数・セクタ/トラック数はそれぞれ最大値が 255, 63 という値だということ. たとえばこんな感じ. # fdisk -l /dev/hda Disk /dev/hda: 250.0 GB, 250059350016 bytes 255 heads, 63 sectors/track, 30401 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes Disk identifier: 0x6f08c061 Device Boot Start End Blocks Id System /dev/hda1 1 30401 244196001 83 Linux ということは,シリンダ境界は,512B セクタの世界では
単位になることになり,8 で割り切れる数にはなりにくそうである. ということは,512B セクタの世界で何も考えずにパーティションを切ると,4KBセクタの途中からパーティションが始まってしまうかもしれない(4KB セクタ先頭と一致するのは 8 の倍数のシリンダのみ). 4KB セクタの一部書き換え †エミュレーションモードで 4KB セクタの中の一部の 512B セクタを書き換えるような場合,内部ではきっと
ような操作を行う必要があるはずである. ということは,たとえエミュレーションであったとしても,このような書き込みが極力発生しないようなアクセスであることが望ましいわけである. で,先の 4KB セクタとパーティション先頭が合わない状態は,このような中途書き込みが発生しやすい状況だったりする. ネイティブモードでは †今まではエミュレーションモードでの話だったのだけど,4KB セクタネイティブのモードの場合,
というあたりからして謎だらけ,というか未定だったりするわけで. 一番単純なのは
というところなんだろうけど. あと
も対応できるのかなぁ? ATA コマンドとは別に DMA 転送長も設定できるようなデバイスならいいんだけど,ATA コマンドをスヌープして勝手に転送長を決めてたりすると,セクタ長が替わったときにドライバ側で違いを吸収できなかったりするわけで. まとめると †
ってなところかなぁ? |