本記事は、日経WinPC2012年5月号に掲載した連載「PC技術興亡史」を再掲したものです。社名や肩書などは掲載時のものです。

 IDE(Integrated Drive Electronics)のHDDでは、C/H/S(Cylinder/Head/Sector)方式でデータを管理していた。より正確に言えば、IDEのコントローラーは、C/H/Sをしばらく利用していた。しかしHDD自体は比較的早い時期から、LBA(LogicalBlock Address)と呼ばれる方法に移行していた。C/H/Sが想定した記録方式と、実際の記憶領域の位置が合っていないためだ。

 HDDはディスク上に磁気でデータを記録する。記録を保持するには一定の面積が必要である。面積はトラックの幅×セクターの長さで決まる。トラックの幅は一定なので、セクターの長さが問題になる。C/H/S方式が仮定しているように、セクター数がディスクの最外周と最内周で同じだとすると、長さがまるっきり違ってしまう(図1左)。最外周の長さに合わせると最内周のセクターは記録を保持する面積が無いし、最内周に合わせると最外周のセクターは無駄だらけになる。

 そこで実際のHDDは、セクターの面積が一定になるように、外周には多くのセクターを配し、内周のセクターは少なくする(図1右)。ただこうすると、セクターの位置を管理するのが難しくなる。この解決策がLBAで、最外周にある先頭セクターを0番とし、そこから1、2、3…と順に番号を振っていく。

図1 C/H/S方式で想定しているセクターのレイアウトは、現実のHDDのレイアウトと異なる。C/H/S方式では各トラックに共通する個数のセクターが存在すると仮定している。しかし内周と外周で取れる区画の大きさが異なる(左)。内周に大きさを合わせれば外周が無駄になるし、外周に大きさを合わせると内周のスペースを確保できない。これでは無駄が多いため、実際には内周のセクター数を減らしている(右

 HDDのコントローラーはトラックごとに先頭のセクターの番号を記録しておく。IDEコントローラーはC/H/S方式でアクセスするので、この情報に基づいてリクエストをLBA方式に変換する。元々C/H/SはFDDの管理のために作られた仕組み。そのままHDDに持ち込んでも無理があったということだ。