
シリンダー ヘッド セクタ( CHS ) は、ハード ディスク ドライブ上の各物理データ ブロックにアドレスを割り当てる初期の方法です。
これは、垂直座標ヘッド、水平(または放射状)座標シリンダ、および角度座標セクタから構成される 3D 座標系です。ヘッドは円形面、つまりディスク内のプラッタ(およびその 2 つの面のいずれか)を選択します。シリンダは、ディスクのスピンドルを中心とする、ディスク内のプラッタ スタックを通る円筒形の交差です。シリンダとヘッドを組み合わせると、円形の線、より正確には、トラックと呼ばれる物理データ ブロックの円形ストリップに交差します。セクタは最終的に、このトラック内のどのデータ ブロックをアドレス指定するかを選択します。トラックは複数の均等サイズの部分に分割され、各部分は (360/n) 度の円弧になります。ここで、n はトラック内のセクタ数です。
初期のハードドライブには物理的なレイアウトを隠すディスクコントローラが内蔵されていなかったため、単純な線形アドレス(0からディスク上のブロック総数- 1 )ではなく、CHSアドレスが公開されていました。独立した汎用コントローラカードが使用されていたため、オペレーティングシステムはコントローラに接続された特定のドライブの正確な物理的な「ジオメトリ」を把握し、データブロックを正しくアドレス指定する必要がありました。従来の制限は512バイト/セクター × 63セクター/トラック × 255ヘッド(トラック/シリンダー) × 1024シリンダーであり、結果としてディスクの総容量は8032.5MiBに制限されていました。
ジオメトリがより複雑になり(例えば、ゾーンビット記録の導入)、ドライブサイズが大きくなるにつれて、CHSアドレス指定方式は制約的になっていった。1980年代後半から、ハードディスクドライブには物理的なジオメトリに関する優れた情報を持つ組み込みディスクコントローラ[ 1 ]が搭載されるようになった。しかし、これらのコントローラは、アドレス可能な空間を増やすために、コンピュータに誤ったジオメトリ(例えば、実際よりも多くのヘッド数)を報告することがあった。これらの論理CHS値はコントローラによって変換されるため、CHSアドレス指定はもはやドライブの物理的な属性とは対応しなくなった。[ 2 ]
1990年代半ばまでに、ハードドライブのインターフェースはCHS方式を論理ブロックアドレス(LBA)に置き換えましたが、マスターブートレコード(MBR)パーティションテーブルを操作する多くのツールは依然としてパーティションをシリンダ境界に合わせていました。そのため、2000年代後半までパーティションソフトウェアにはCHSアドレスの痕跡が残っていました。[ 2 ]
2010 年代初頭、MBR によるディスク サイズの制限が問題となり、代替としてGUID パーティション テーブル(GPT) が設計されました。MBR をサポートしていないUEFIファームウェアを使用する最新のコンピューターでは、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は存在しません。[1]
物理ディスクジオメトリの場合、最大セクター数はディスクのローレベルフォーマットによって決まります。しかし、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枚につき、片面に1つずつ、計2つのヘッドが搭載されています。(フロッピーディスクドライブのリムーバブルメディアのように、プラッタがヘッドアセンブリから分離されることがあるため、「ヘッド」の代わりに「サイド」という用語が使用されることもあります。)
IBM PC互換機のBIOSコードでサポートされているアドレス指定は、8ビットで最大256ヘッド(ヘッド0から255まで)までカウントされていました( )。しかし、 MS-DOS / IBM PC DOS 7.10までのすべてのバージョンに存在するバグにより、これらのオペレーティングシステムは256ヘッドのボリュームを検出すると起動時にクラッシュします[2] 。そのため、すべての互換BIOSは、仮想ジオメトリを含め、最大255ヘッド( )までのマッピングのみを使用します。この歴史的な特異性は、最大ディスクサイズに影響を与える可能性があります。
CHSFFh00h..FEh255×63
(512 bytes/sector)×(63 sectors/track)×(255 heads (tracks/cylinder))×(1024 cylinders)=8032.5 MiBですが、実際には512×63×256×1024=8064 MiBは8GB 制限と呼ばれるものを生み出します。[ 7 ]この文脈では、 8GiB = 8192MiB という定義は 、512×64×256トラックあたり64セクターの
CHSを必要とするため、別の誤った制限です。
トラックとシリンダは0から数えられます。つまり、フロッピーディスクなどの円筒形ディスクでは、トラック0が最初の(最も外側の)トラックとなります。古いBIOSコードは、CHSアドレス指定で10ビットをサポートし、最大1024シリンダをサポートしていました( )。セクター用に6ビット、ヘッド用に8ビットを加えると、BIOS割り込み13hでサポートされる24ビットになります。トラックから禁止されているセクター番号0を引くと、セクターサイズが512バイトの場合、128 MiBに相当します ( )。これは(おおよそ)8 GBの制限を裏付けています。[ 8 ]1024=2101024×256128 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×S16065=255×63
28ビットのCHSアドレス指定(EIDEおよびATA-2)では、1から始まるセクター(セクター1…255)に8ビット、ヘッド0…15に4ビット、シリンダ0…65535に16ビットが割り当てられます。[ 9 ]これにより、約128GB の制限が発生します。実際には、セクターサイズが512バイトの場合、65536×16×255=267386880セクターは130560MiBに相当します 。[ 7 ] ATA-228=16+4+8仕様のビットは、 Ralf Brownの割り込みリストでもカバーされており、この現在は期限切れの標準の古いワーキングドラフトが公開されています。[ 10 ]
古いBIOSのシリンダ制限は1024個、ATAのヘッド制限は16個だったため[ 11 ]、その複合影響は1024×16×63=1032192セクター、つまりセクターサイズ512に対して504MiBの 制限だった。ECHSおよび改訂版ECHSとして知られるBIOS変換スキームは、16個のヘッドの代わりに128個または240個のヘッドを使用することでこの制限を緩和し、同時にディスク上のセクターの総数に対して(ECHS制限:4032MiB )または(改訂版ECHS制限:7560MiB )に収まるシリンダー数とセクター数を削減した。[ 7 ]1024/128/631024/240/63
ブロックとクラスター
[編集]Unixコミュニティでは、セクターまたはセクターのグループを指すために「ブロック」という用語を使用しています。例えば、Linuxのfdiskユーティリティのバージョン2.25より前[ 12 ]では、パーティションサイズを1024バイトのブロックで表示していました。
クラスタは、様々なファイルシステム( FAT、NTFSなど)におけるデータの割り当て単位です。これらのファイルシステムでは、データは主にファイルで構成されています。クラスタはディスクの物理的または仮想的なジオメトリに直接影響されません。つまり、クラスタは特定のトラックの末尾近くのセクターから始まり、物理的または論理的に次のトラックのセクターで終わることもあります。
CHCH
CHSからLBAへのマッピング
[編集]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 headsはディスク上のヘッドの数、N sectorsはトラックあたりの最大セクター数、( c、h、s )は CHS アドレスです。
FATファイルシステムのECMA -107 [ 3 ]およびISO / IEC 9293:1994 [ 15 ](ISO 9293:1987 [ 16 ]に取って代わる)標準の論理セクター番号の式は、上記の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 モデルで視覚化するには、次の点に注意してください。
- 最初の LBA セクターはセクター # 0 です。CHS モデル内の同じセクターはセクター # 1 と呼ばれます。
- 次のヘッド/トラックに進む前に、各ヘッド/トラックのすべてのセクターがカウントされます。
- 次のシリンダーに進む前に、同じシリンダーのすべてのヘッド/トラックがカウントされます。
- ハードドライブ全体の外側の半分が、ドライブの最初の半分になります。
歴史
[編集]シリンダーヘッドレコード形式は、少なくとも1960年代からIBMメインフレームのカウントキーデータ(CKD)ハードディスクで使用されてきました。これはPCで使用されているシリンダーヘッドセクター形式とほぼ同等ですが、セクターサイズが固定ではなく、各アプリケーションのニーズに応じてトラックごとに変更できるという点が異なります。現在では、メインフレームに提示されるディスクジオメトリはストレージファームウェアによってエミュレートされており、物理的なディスクジオメトリとは無関係になっています。[要出典]
PCで使用されていた初期のハードドライブ(MFMドライブやRLLドライブなど)では、各シリンダーを均等な数のセクターに分割していたため、CHS値はドライブの物理的特性と一致していました。CHSタプルが のドライブは500 4 32、各プラッターの片面あたり500トラック、プラッター2枚(ヘッド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 ]
参照
[編集]参考文献
[編集]- ^ 「IDE/ATAインターフェースの概要と歴史」。The PC Guide。2001年4月17日。2019年2月4日時点のオリジナルよりアーカイブ。
- ^ a b Jonathan de Boyne Pollard (2011). 「The gen on disc partition alignment」 . 2022年11月21日閲覧。
- ^ a b c 「情報交換用ディスクカートリッジのボリュームとファイル構造」規格ECMA-107(第2版、1995年6月) ECMA 1995 2011年7月30日閲覧。
- ^ 「MS-DOSでサポートされている標準フロッピーディスク形式」。KB75131。Microsoft Knowledge Base 。2003年5月12日。2009年1月31日時点のオリジナルよりアーカイブ。 2023年6月4日閲覧。
- ^ 「Western Digitalの高度なフォーマット:4Kセクターへの移行が始まる」 AnandTech 、 2009年12月18日。 2010年4月4日時点のオリジナルよりアーカイブ。2011年7月29日閲覧。
- ^ 「Advanced Format Technology Brief」(PDF) .日立. 2010. p. 1. 2011年9月27日時点のオリジナル(PDF)からアーカイブ。2011年8月1日閲覧。512
バイトエミュレーションは512eと呼ばれることもある。
- ^ a b c Andries Brouwer (2004年11月1日). 「BIOSとIDEの制限の歴史」 . Large Disk HOWTO v2.5 . 2011年7月30日閲覧。
- ^ 「Windows NT 4.0は最大7.8GBのシステムパーティションをサポートします」 Microsoft 2007年2月23日2011年7月30日閲覧。
- ^ 「5K500.B SATA OEM仕様改訂1.2」(PDF) .日立. 2009年3月17日 . p. 51. 2011年9月27日時点のオリジナル(PDF)からのアーカイブ。
- ^ "ATA-2" (PDF) . X3T10/0948D . INCITS技術委員会T13 AT添付文書. 1996年3月18日. 2011年7月28日時点のオリジナル(PDF)からアーカイブ。
- ^ "ATA-1" (PDF) . X3T10/791D . INCITS Technical Committee T10 SCSI Storage Interfaces. 1994. 2012年3月21日時点のオリジナル(PDF)からのアーカイブ。
- ^ 「Util-linux 2.25 リリースノート」 . Linuxカーネルアーカイブ. 2016年3月24日閲覧。
- ^ "ATA-6" (PDF) . T13/1410D . INCITS Technical Committee T13 ATA Storage Interface. 2002. p. 22.オリジナル(PDF)から2011年7月28日時点のアーカイブ。 2011年7月30日閲覧。ATA
/ATAPI-5以前の規格では、CHS変換が定義されていました。この変換は廃止されていますが、ATA/ATAPI-5の定義に従って実装できます。
- ^ "ATA-5" (PDF) . T13/1321D . INCITS Technical Committee T13 ATA Storage Interface. 2000. p. 19.オリジナル(PDF)から2011年7月28日にアーカイブ。 2011年7月30日閲覧。
デバイスの容量が1セクター以上16,514,064セクター以下の場合、デバイスはCHS変換をサポートしなければならない。
- ^ a b 「情報技術 - 情報交換用ディスクカートリッジのボリュームとファイル構造」 ISO /IEC 9293:1994ISOカタログ1994年。2012年1月6日閲覧。
- ^ a b 「情報処理 - 情報交換用フレキシブルディスクカートリッジのボリュームとファイル構造」 ISO 9293:1987 . ISOカタログ. 1987. 2012年1月6日閲覧。
- ^ "KB931760" . Microsoft Windows XP サポート. Microsoft サポート技術情報. 2009年7月23日. 2011年7月30日閲覧。
注記
[編集]- 1. ^このルールは、物理セクターが1から始まる名前が付けられるすべてのフォーマットに当てはまります。ただし、一部の特殊なフロッピーフォーマット(例:DOS Plus 2.1でBBC Master 512が使用する640KB フォーマット)では、トラックの先頭セクターが「1」ではなく「0」と命名されます。
- 2. ^コンピュータは0からカウントを開始しますが、DOSは1からカウントを開始します。これを実現するために、DOSは画面に表示する前にヘッドカウントに1を加算します。しかし、DOSは8ビットの符号なし整数をより大きなサイズ(例えば16ビット整数)に変換するのではなく、単に1を加算します。そのため、ヘッドカウント255()は、本来予想される256ではなく、0()にオーバーフローします。これはDOS 8で修正されましたが、その頃にはヘッド値255を使用しないことが事実上の標準となっていました。
0xFF0x100 & 0xFF = 0x00