プラッタ単位でパーティションを分けることはできませんか?
このような質問をよくいただくのですが,結論からいえば,現在のHDDでは不可能です。
以前のHDDは,ディスクの記録管理にCHS(Clinder/Head/Sector)と呼ばれる方式を利用していました。このため,HDD上のどのプラッタのどのセクタにアクセスするかを,OSから直接管理することが(技術的には)可能でした。ところが,このCHS方式の場合「8GBの壁」と呼ばれる容量の限界があるため,これを超えるサイズのHDDにはアクセスできないという問題が発生しました。
これを回避するため,現在はLBA(Logical Block Address)と呼ばれるインデックスを利用してアクセスする方式を利用することが一般的になっています。ところがこのLBA方式の場合,あるセクタがどのプラッタ(正確には,この場合シリンダ/ヘッド)に該当するかということは,HDD上のコントローラが独自に管理していて,外部からこれを参照したり指定することができません。
ちなみに,パーティションを分けるときには,容量で分けるのが最も簡単です。例えば3プラッタ,3ヘッドのHDDを考えてみます(普通は,1枚のプラッタの両面を使うのでこういう構成にはなりませんが,説明の便宜上こう仮定します)。この場合,LBAは3枚のプラッタに交互に割り振られる形態になるのが一般的です。すなわち,プラッタ1から3にかけて1,2,3と振り,ここでまたプラッタ1に戻り4,5,6……と続く形態です(図)。
なぜこのような割り振り方をするのかというと,アクセスを高速化するためです。各プラッタごとにヘッドがありますから,データを読むときにはまず1〜3がまとめて読み出せ,次いで4〜6がまとめて読み出せ,という具合に,単位時間あたりの読み出し速度が大幅に向上するためです。また,相対的にシークタイムが減るというメリットもあります。
これをプラッタ別に分けた場合,まず読み出し速度が(複数のヘッドで同時アクセスできなくなるため)遅くなるうえ,データがプラッタ上に広く分散することになり,シークタイムが増えるというデメリットもあります。
このような理由から,プラッタごとにパーティションを分けることは技術的に不可能ですし,性能面で見ても意味はないのです。
(大原雄介)
図 VoIPを利用した内線電話の接続イメージ
LBAはプラッタをまたいで割り振られる。これにより,1〜3,4〜6,7〜9はそれぞれヘッドを動かすことなく読み出せ,効率がいい