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