
シリンダーヘッドセクター(CHS )は、ハードディスクドライブ上の各物理データブロックにアドレスを割り当てる初期の方法です。
これは、垂直座標ヘッド、水平(または半径方向)座標シリンダー、および角度座標セクターから構成される 3D 座標系です。ヘッドは円形の表面、つまりディスク内のプラッタ(およびその 2 つの側面のうちの 1 つ)を選択します。シリンダーは、ディスクのスピンドルを中心として、ディスク内のプラッタのスタックを通る円筒状の交点です。シリンダーとヘッドが組み合わさって、円形の線、より正確には、トラックと呼ばれる物理的なデータ ブロックの円形の帯で交差します。セクターは、トラック内のどのデータ ブロックにアドレス指定するかを最終的に選択します。トラックは、それぞれ (360/n) 度の円弧であるいくつかの等しいサイズの部分に分割され、n はトラック内のセクターの数です。
初期のハードドライブには物理的なレイアウトを隠す組み込みディスクコントローラが搭載されていなかったため、単純な線形アドレス(ディスク上のブロック総数から1を引いた数まで0から始まる)ではなく、CHSアドレスが公開されていました。別の汎用コントローラカードが使用されていたため、オペレーティングシステムはデータブロックを正しくアドレス指定するために、コントローラに接続された特定のドライブの正確な物理的「ジオメトリ」を知る必要がありました。従来の制限は、512バイト/セクタ × 63セクタ/トラック × 255ヘッド(トラック/シリンダ) × 1024シリンダで、ディスクの総容量は8032.5 MiBに制限されていました。
ジオメトリが複雑化するにつれて(例えば、ゾーンビット記録の導入など)、ドライブのサイズが時間とともに大きくなるにつれて、CHS アドレス指定方式は制約を受けるようになりました。1980 年代後半以降、ハードドライブには物理的なジオメトリに関する十分な知識を持つ組み込みディスクコントローラ[ 1 ]が搭載されるようになりました。しかし、より多くのアドレス指定可能な領域を確保するために、コンピュータに対して、実際よりも多くのヘッド数など、偽のジオメトリを報告するようになりました。これらの論理 CHS 値はコントローラによって変換されるため、CHS アドレス指定はドライブの物理的な属性に対応しなくなりました。[ 2 ]
1990年代半ばまでに、ハードドライブのインターフェースはCHS方式を論理ブロックアドレッシング(LBA)に置き換えたが、マスターブートレコード(MBR)パーティションテーブルを操作する多くのツールは依然としてパーティションをシリンダ境界にアラインメントしていたため、2000年代後半になってもパーティショニングソフトウェアにはCHSアドレッシングの痕跡が残っていた。[ 2 ]
2010年代初頭、MBRによるディスク容量制限が問題となり、代替手段としてGUIDパーティションテーブル(GPT)が設計されました。GPTは、保護MBRを除き、CHSを使用しなくなりました。

CHSアドレッシングとは、ヘッド番号とシリンダ番号によって決定されるトラック内の位置に基づいて、ディスク上の個々のセクタ(物理データブロックとも呼ばれる)を識別するプロセスです。用語は下から順に説明され、ディスクアドレッシングではセクタが最小単位となります。ディスクコントローラは、論理位置を物理位置にマッピングするアドレス変換を導入できます。たとえば、ゾーンビット記録では、より短い(内側の)トラックに少数のセクタが格納されます。また、物理ディスクフォーマットは必ずしも円筒形ではなく、トラック内のセクタ番号は偏っている場合があります。
フロッピーディスクとコントローラは、128、256、512、1024バイトの物理セクタサイズを使用していたが(例:PC/AX)、1980年代には物理セクタあたり512バイトのフォーマットが主流となった。[ 3 ] [ 4 ]
現在、ハードディスクの最も一般的な物理セクタサイズは512バイトですが、IBM互換機以外の機種向けには、セクタサイズが520バイトのハードディスクも存在しました。2005年には、Seagateの一部のカスタムハードディスクがセクタサイズ1024バイトを採用していました。
アドバンストフォーマットのハードディスクは、2010年以降、物理セクターあたり4096バイト(4Kn)[ 5 ]を使用していますが、移行期間中は512バイトセクター( 512e )をエミュレートすることもできます。 [ 6 ]
光磁気ドライブは、 5.25インチドライブでは512バイトと1024バイトのセクターサイズを、3.5インチドライブでは512バイトと2048バイトのセクターサイズを使用します。
CHSでは、セクター番号は常に1から始まります。セクター0は存在しません。
物理ディスクのジオメトリの場合、最大セクター数はディスクの低レベルフォーマットによって決まります。しかし、IBM PC互換機のBIOSによるディスクアクセスでは、セクター数は6ビットでエンコードされ、トラックあたり最大111111(63)セクターとなりました。この最大値は、仮想CHSジオメトリでも現在も使用されています。
トラックとは、セクターが同心円状に並んだ細い帯状の領域です。1つのトラックを読み取るには、少なくとも1つのヘッドが必要です。ディスクの形状に関して言えば、トラックとシリンダーという用語は密接に関連しています。片面または両面フロッピーディスクの場合、トラックが一般的な用語であり、2つ以上のヘッドを使用する場合はシリンダーが一般的な用語です。厳密に言えば、トラックはセクターの特定の組み合わせであり、シリンダーはセクターの集合です。CHSPTSPT×H
シリンダとは、ディスクドライブ内のデータの分割単位であり、固定ブロックアーキテクチャ(FBA)ディスクのCHSアドレッシングモード、またはCKDディスクのシリンダ・ヘッド・レコード(CCHHR)アドレッシングモードで使用される。
このコンセプトは、物理的なディスク(プラッタ)を同心円状の中空の円筒形スライスで貫通し、プラッタのスタック全体に沿って並んだそれぞれの円形トラックを収集するというものです。ディスクドライブのシリンダーの数は、ドライブの単一表面上のトラックの数と正確に等しくなります。各プラッタ上の同じトラック番号で構成され、データを保存できる各プラッタ表面上のすべてのトラックにまたがります(トラックが「不良」かどうかは関係ありません)。シリンダーはトラックによって垂直方向に形成されます。つまり、プラッタ0のトラック12とプラッタ1のトラック12などがシリンダー12になります。
ドラムメモリ装置やIBM 2321データセルなどの他の形式の直接アクセス記憶装置(DASD)では、シリンダーアドレスを含むブロックアドレスが付与される場合があるが、シリンダーアドレスは装置の(幾何学的な)円筒状のスライスを選択するものではない。
ヘッドと呼ばれる装置は、関連するディスクプラッタの表面を構成する磁気媒体を操作することで、ハードドライブ内のデータを読み書きします。当然ながら、プラッタには2つの面があり、データ操作可能な表面も2つあります。通常、プラッタ1枚につき2つのヘッドがあり、各面に1つずつ配置されています。(フロッピーディスクドライブのリムーバブルメディアのように、プラッタがヘッドアセンブリから分離されている場合があるため、ヘッドの代わりに「面」という用語が使われることもあります。)
IBM-PC互換BIOSコードでサポートされているアドレッシングは、最大256ヘッド(ヘッド0から255まで)に8ビットを使用していました( )。しかし、 MS-DOS / IBM PC DOSのバージョン7.10までのすべてのバージョンに存在するバグにより、256ヘッドのボリュームに遭遇すると、これらのオペレーティングシステムは起動時にクラッシュします。CHSFFh00h..FEhしたがって、互換性のあるすべてのBIOSは、仮想ジオメトリを含め、最大255ヘッド()のマッピングのみを使用します255×63。この歴史的な特異性は、最大ディスクサイズに影響を与える可能性があります。
(512 bytes/sector)×(63 sectors/track)×(255 heads (tracks/cylinder))×(1024 cylinders)=8032.5 MiBですが、実際にはMiBは8 GB の制限として知られています。[ 7 ]この文脈では、8 GiB = 8192 MiBという定義も別の誤った制限です。なぜなら、トラックごとに 64 セクターの CHS が必要になるからです。512×63×256×1024=8064 512×64×256
トラックとシリンダは 0 から数えられます。つまり、トラック 0 はフロッピーディスクやその他の円筒形ディスクの最初の (最も外側の) トラックです。古いBIOSコードは、最大 1024 シリンダ ( ) で 10 ビットの CHS アドレス指定をサポートしていました。セクタ用に 6 ビット、ヘッド用に 8 ビットを追加すると、 BIOS 割り込み 13hでサポートされる 24 ビットになります。トラックで許可されていないセクタ番号 0 を減算すると、セクタサイズが 512 バイトの場合128 MiBに相当し ( )、 (おおよそ) 8 GB の制限が確認できます。[ 8 ]1024=2101024×256 128 MiB=1024×256×(512 byte/sector)8192-128=8064
CHS アドレス指定は、ビットの場合は0/0/1最大値、24 ビットの場合は 255ヘッドに制限された値から始まります。ディスクのジオメトリを指定するために使用される CHS 値は、シリンダ 0 とヘッド 0 をカウントする必要があり、その結果、24 ビットの場合は最大値 (または )となり、(256 または ) 255 ヘッドになります。ジオメトリを指定する CHS タプルでは、S は実際にはトラックあたりのセクタを意味し、(仮想) ジオメトリがディスクの容量と一致する場合、セクタが含まれます。より大きなハードディスクが使用されるようになると、シリンダも論理ディスク構造になり、16,065 セクタ ( )に標準化されました。1023/255/6324=10+8+61023/254/631024/256/631024/255/63C×H×S 16065=255×63
28 ビットの CHS アドレス指定 ( EIDE および ATA-2 ) では、セクターが 1 から始まる 8 ビット (セクター 1〜255)、ヘッド 0〜15 に 4 ビット、シリンダ 0〜65535 に 16 ビットが割り当てられます。[ 9 ]これにより、約128 GB の 制限が生じます。実際には、セクター サイズが 512 バイトの場合、65536×16×255=267386880セクターは 130560 MiBに相当します。 [ 7 ] ATA-2仕様のビットは、Ralf Brown の割り込みリストでもカバーされており、現在では期限切れとなっているこの標準の古い作業草案が公開されています。[ 10 ] 28=16+4+8
古いBIOSの制限は1024シリンダ、ATAの制限は16ヘッド[ 11 ]であったため、その複合効果は1024×16×63=1032192セクタ数、つまりセクタサイズ512の場合の504MiBの制限 でした。ECHSおよび改訂ECHSとして知られるBIOS変換方式は、16ヘッドの代わりに128または240ヘッドを使用することでこの制限を緩和し、ディスク上の指定されたセクタ総数に対して、収まるシリンダ数とセクタ数を同時に削減しました(ECHS制限:4032MiB )または(改訂ECHS制限:7560MiB )。[ 7 ]1024/128/63 1024/240/63
Unixコミュニティでは、ブロックという用語はセクターまたはセクターのグループを指すために使用されています。たとえば、Linuxのfdiskユーティリティは、バージョン2.25より前は、1024バイトのブロックを使用してパーティションサイズを表示していました。[ 12 ]
クラスタは、さまざまなファイルシステム( FAT、NTFSなど)におけるデータの割り当て単位であり、データは主にファイルで構成されます。クラスタはディスクの物理的または仮想的な形状に直接影響されないため、クラスタは特定のトラックの末尾付近のセクターから始まり、物理的または論理的に次のトラックのセクターで終了することができます。CHCH
2002年にATA-6仕様ではオプションの48ビット論理ブロックアドレッシングが導入され、CHSアドレッシングは廃止されましたが、ATA-5変換の実装は引き続き許可されました。[ 13 ]当然のことながら、以下に示すCHSからLBAへの変換式も、最後のATA-5 CHS変換と一致します。ATA-5仕様では、CHSサポートは最大16,514,064 セクタ まで必須で、より大きなディスクではオプションでした。ATA-5の制限はCHS16383 16 63または同等のディスク容量(16514064 = 16383 × 16 × 63 = 1032 × 254 × 63)に対応し、24 = 14 + 4 + 6ビット(16383 + 1 = 2 14)が必要です。[ 14 ]
CHSタプルは、以下の式を使用してLBAアドレスにマッピングできます。
ここで、 AはLBAアドレス、Nヘッドはディスク上のヘッド数、Nセクターはトラックあたりの最大セクター数、( c、h、s )はCHSアドレスです。
ECMA -107 [ 3 ]およびISO / IEC 9293:1994 [ 15 ] (ISO 9293:1987 [ 16 ]に取って代わる) 規格のFATファイルシステムの論理セクタ番号の式は、上記の LBA 式と完全に一致します。論理ブロック アドレスと論理セクタ番号(LSN) は同義語です。[ 3 ] [ 15 ] [ 16 ]この式ではシリンダ数は使用しませんが、ディスク ジオメトリ内のヘッド数とトラックあたりのセクタ数が必要です。これは、同じ CHS タプルがジオメトリに応じて異なる論理セクタ番号をアドレス指定するためです。
例:
1020 16 631028160セクタのディスクのジオメトリの場合、CHS3 2 1はLBA 3150 = ((3 × 16) + 2) × 63 + (1 – 1)です。1008 4 2551028160セクタのディスクのジオメトリの場合、CHS3 2 1はLBA 3570 = ((3 × 4) + 2) × 255 + (1 – 1)です。 64 255 631028160セクタのディスクのジオメトリの場合、CHS3 2 1はLBA 48321=((3 × 255) + 2) × 63 + (1 – 1)です。2142 15 321028160セクターのディスクのジオメトリの場合、CHS3 2 1はLBA 1504 = ((3 × 15) + 2) × 32 + (1 – 1)です。セクターの順序を線形LBAモデルに視覚化するために、以下の点に注意してください。
シリンダーヘッドレコード(CHR)フォーマットは、少なくとも1960年代からIBMメインフレームのカウントキーデータ(CKD)ハードディスクで使用されてきました。これは、PCで使用されていたシリンダーヘッドセクタ(CHR)フォーマットとほぼ同等ですが、セクタサイズが固定ではなく、アプリケーションのニーズに応じてトラックごとに変化する点が異なります。現代の使用においては、メインフレームに提示されるディスクジオメトリはストレージファームウェアによってエミュレートされ、物理的なディスクジオメトリとは一切関係がありません。
PCで使用されていた初期のハードドライブ(MFMやRLLドライブなど)は、各シリンダを均等な数のセクタに分割していたため、CHS値はドライブの物理的特性と一致していました。CHSタプルが のドライブは、各プラッタの片面に500トラック、2枚のプラッタ(4つのヘッド)、1トラックあたり32セクタを500 4 32持ち、合計32,768,000 バイト (31.25 MiB)になります。
ATA/IDEドライブはデータ保存効率が格段に向上し、現在では旧式となったMFMおよびRLLドライブに取って代わりました。これらのドライブはゾーンビット記録(ZBR)方式を採用しており、各トラックを分割するセクタ数はプラッタ表面上のトラック群の位置によって変化します。プラッタの端に近いトラックは、スピンドルに近いトラックよりも多くのデータブロックを格納できます。これは、プラッタの端付近では、特定のトラック内に物理的な空間がより多く存在するためです。そのため、プラッタ上の異なる領域でトラックあたりのセクタ数が異なるため、CHSアドレッシング方式はこれらのドライブの物理的な形状と直接対応させることはできません。このため、セクタの総数がシリンダ境界で終わることはほとんどないため、多くのドライブではドライブの最後にセクタの余剰(シリンダ1個分以下のサイズ)が生じます。
ATA/IDEドライブは、ドライブ(またはBIOS)の容量を超えない限り、システムBIOSで任意のシリンダー、ヘッド、セクター構成を設定できます。これは、ドライブが指定されたCHS値を、そのハードウェア構成に応じた実際のアドレスに変換するためです。ただし、これにより互換性の問題が発生する可能性があります。
Microsoft DOSや古いバージョンのWindowsなどのオペレーティングシステムでは、各パーティションはシリンダー境界で開始および終了する必要があります。比較的新しいオペレーティングシステム(Windows XP を含む)の一部のみがこのルールを無視できますが、そうすると、特にユーザーが同じドライブでデュアルブートを実行したい場合、互換性の問題が発生する可能性があります。Microsoft は、 Windows Vista以降、内蔵ディスクパーティションツールでこのルールに従っていません。[ 17 ]
バイトエミュレーションは、512eと呼ばれることもある。
ATA/ATAPI-5 以前の規格では、CHS 変換が定義されていました。この変換は廃止されていますが、ATA/ATAPI-5 で定義されているとおりに実装できます。
デバイスの容量が 1 セクター以上 16,514,064 セクター以下の場合、デバイスは CHS 変換をサポートする必要があります。
0xFF0x100 & 0xFF = 0x00