論理ブロックアドレッシング(LBA )は、コンピュータの記憶装置、一般的にはハードディスクドライブなどの二次記憶装置に格納されているデータブロックの位置を指定するために使用される一般的な方式です。LBAは特に単純な線形アドレッシング方式であり、ブロックは整数インデックスによって位置付けられ、最初のブロックはLBA 0、2番目のブロックはLBA 1、といった具合になります。[ 1 ]
IDE規格では、オプションとして22ビットLBAが採用されていましたが、ATA-1(1994年)のリリースで28ビットに、ATA-6(2003年)のリリースで48ビットに拡張されました。一方、アドレスを保持するディスク上およびメモリ上のデータ構造のエントリサイズは、通常32ビットまたは64ビットです。1996年以降にリリースされたほとんどのハードディスクドライブは、論理ブロックアドレッシングを実装しています。
論理ブロックアドレッシングでは、データのアドレス指定には1つの数値のみが使用され、各線形ベースアドレスは1つのブロックを表します。
LBA方式は、ストレージデバイスの物理的な詳細をオペレーティングシステムのソフトウェアに公開していた以前の方式に取って代わるものです。これらの方式の中で最も重要なのがシリンダ・ヘッド・セクタ(CHS)方式で、ブロックは、ハードディスク上のシリンダ、ヘッド、セクタを定義するタプルによってアドレス指定されていました。CHSはハードディスク以外のデバイス(テープやネットワークストレージなど)にはうまく対応せず、一般的には使用されませんでした。CHSは初期のMFMおよびRLLドライブで使用され、CHSとその後継である拡張シリンダ・ヘッド・セクタ(ECHS)は最初のATAドライブで使用されました。しかし、現在のディスクドライブはゾーンビット記録を使用しており、トラックあたりのセクタ数はトラック番号に依存します。ディスクドライブは、トラックあたりのセクタ数(SPT)やシリンダあたりのヘッド数(HPC)としてCHS値を報告しますが、これらはディスクドライブの実際のジオメトリとはほとんど関係がありません。
LBAは、 SCSIの前身であるSASIによって1981年に抽象化として初めて導入されました。ドライブコントローラは依然としてCHSアドレスによってデータブロックをアドレス指定しますが、この情報は通常、SCSIデバイスドライバ、OS、ファイルシステムコード、または「生」ディスクにアクセスするアプリケーション(データベースなど)では使用されません。ブロックレベルのI/Oを必要とするシステムコールは、LBA定義をストレージデバイスドライバに渡します。単純なケース(1つのボリュームが1つの物理ドライブにマッピングされる場合)では、このLBAはドライブコントローラに直接渡されます。
冗長アレイ独立ディスク(RAID)デバイスおよびストレージエリアネットワーク(SAN)において、論理ドライブ(論理ユニット番号、LUN)がLUN仮想化および集約によって構成される場合、個々のディスクのLBAアドレス指定は、ストレージデバイス全体に統一されたLBAアドレス指定を提供するために、ソフトウェア層によって変換される必要があります。
Western Digitalの初期のIDE規格では22ビットLBAが導入されましたが、1994年のATA-1規格ではLBAモードとCHSモードの両方で28ビットアドレスが使用可能になりました。CHS方式では、シリンダに16ビット、ヘッドに4ビット、セクタに8ビットを使用し、セクタ数は1から255までカウントされます。つまり、報告されるヘッド数は16(0~15)を超えることはなく、セクタ数は255(1~255、ただし最大63がよく使用される)まで、シリンダ数は最大65,536(0~65,535)までとなり、512バイトセクタを想定するとディスクサイズは128 GiB(約137.4 GB)に制限されます。これらの値は、ECドライブに対してATAコマンド「Identify Device」(h)を発行することで確認できます。[ 2 ]:87
しかし、INT 13hディスクアクセスルーチンで定義されたIBM BIOS の実装では、CHS アドレッシングにまったく異なる 24 ビット方式が使用されており、シリンダに 10 ビット、ヘッドに 8 ビット、セクタに 6 ビット、つまり 1024 シリンダ、256 ヘッド、63 セクタでした。[ 3 ]この INT 13h の実装は、 IBM PC がフロッピー ディスクストレージしか持っていなかったときに導入されたため、ATA 規格より前に存在しており、 IBM PC/XTにハードディスク ドライブが導入されたとき、後方互換性の問題により、INT 13h インターフェイスを実際に再設計することはできませんでした。 ATA CHSマッピングとBIOS CHSマッピングを重複させることで、最小公倍数である10:4:6ビット、つまり1024シリンダ、16ヘッド、63セクタが得られ、512バイトセクタを仮定すると、実用的な限界は1024×16×63セクタ、528MB (504MiB)となった。
BIOS がこの制限を克服し、より大きなハードドライブを正常に動作させるためには、BIOS のディスク I/O ルーチンに CHS 変換スキームを実装する必要がありました。このスキームは、INT 13h で使用される 24 ビット CHS と ATA で使用される 28 ビット CHS 番号の間で変換を行います。この変換スキームは、ラージ変換またはビットシフト変換と呼ばれていました。この方法では、16:4:8 ビットの ATA シリンダとヘッドを INT 13h で使用される 10:8:6 ビットスキームに再マッピングし、物理ディスクが報告するよりもはるかに多くの「仮想」ドライブヘッドを生成します。これにより、実質的な制限は 1024×256×63 セクタ、つまり 8.4 GB (7.8 GiB ) に増加しました。
この制限をさらに克服するために、BIOS拡張ディスクドライブサービスとともにINT 13h拡張機能が導入されました。これにより、 Windows 95のDOS 7.0コンポーネントなど、この新しいインターフェイスを認識するオペレーティングシステムのディスクサイズの実質的な制限が解消されました。この拡張BIOSサブシステムは、 LBAまたはLBAアシスト方式によるLBAアドレッシングをサポートしており、ネイティブ28ビットLBAを使用してATAディスクをアドレッシングし、必要に応じてCHS変換を実行します。
通常または「なし」の方法を選択すると、以前の10:4:6ビットCHSモードに戻りますが、このモードでは528MBを超えるアドレス指定はサポートされません。

1996年にATA-2規格がリリースされるまで、LBAアドレッシングをサポートしない大容量ハードドライブはごく少数しか存在しなかったため、ラージ方式またはノーマル方式しか使用できませんでした。しかし、ラージ方式を使用すると移植性の問題も発生しました。異なるBIOSでは互換性のない変換方式が使用されることが多く、特定のベンダーのBIOSを搭載したコンピュータでパーティション分割されたハードドライブは、異なるメーカーのBIOSを搭載したコンピュータでは読み取れないことがよくありました。解決策は、OnTrack Disk Manager、Micro House EZ-Drive/EZ-BIOSなどの変換ソフトウェアを使用することでした。これらのソフトウェアはディスクのOSローダーにインストールされ、起動時にINT 13hルーチンをカスタムコードに置き換えます。このソフトウェアは、LBAに準拠していないBIOSを搭載した古いコンピュータでも、LBAおよびINT 13h拡張機能のサポートを 有効にすることができました。
BIOSがLBAアシスト変換モードでディスクを使用するように構成されている場合、BIOSはLBAモードを使用してハードウェアにアクセスしますが、INT 13hインターフェースを介して変換されたCHSジオメトリも提示します。変換されたジオメトリのシリンダ、ヘッド、およびセクタの数は、次の表に示すように、ディスクの合計サイズによって異なります。[ 4 ]
現在の 48 ビット LBA 方式は、2002 年にATA-6規格とともに導入され[ 5 ]、アドレス指定の制限が 2 48 × 512 バイト、つまり正確には 128 PiB、または約 144 PBに引き上げられました。現在の PC 互換コンピュータは INT 13h 拡張機能をサポートしており、これは LBA アドレス指定に 64 ビット構造を使用し、将来の LBA アドレス指定の拡張を包含するはずですが、最新のオペレーティングシステムは直接ディスク アクセスを実装しており、ブート ロード時を除いてBIOSサブシステムを使用しません。MBR でパーティション分割されたディスクは、 32 ビット論理ブロック アドレス指定LBAを使用して、物理セクタまたは論理セクタの総数を処理します。つまり、合計で最大 4,294,967,296 セクタ (2^32) を処理できます。これは、従来、ハードディスクごとに最大 2テビバイトのデータ制限を保存できたことを意味します。これは、これらのハードディスクの物理セクタと論理セクタのサイズが 512 バイトであるためです。この制限は、4096バイトの物理セクタと論理セクタで最大16 TiBまで超えることができます。[ 6 ]
LBAアドレッシング方式では、セクターは整数インデックスとして番号付けされます。CHS(シリンダ-ヘッド-セクター)タプルにマッピングされると、LBA番号付けは最初のシリンダ、最初のヘッド、トラックの最初のセクターから始まります。トラックが使い果たされると、番号付けは最初のシリンダ内に留まりながら2番目のヘッドに続きます。最初のシリンダ内のすべてのヘッドが使い果たされると、番号付けは2番目のシリンダから続きます。このようにして、LBA値が低いほど、物理セクターはハードドライブの最初の(つまり、最も外側の[ 7 ])シリンダに近くなります。
CHSタプルは、次の式でLBAアドレスにマッピングできます。[ 8 ] [ 9 ]
どこ
LBAアドレスは、次の式を使用してCHSタプルにマッピングできます(「mod」は剰余演算、つまり余り、「÷」は整数除算、つまり小数部分を切り捨てた除算の商です)。
ATA仕様によれば、「ワード(61:60)の内容が16,514,064以上であれば、ワード1の内容[論理シリンダ数]は16,383でなければならない。」[ 2 ] : 20したがって、LBA 16450559の場合、ATAドライブは実際にCHSタプル(16319, 15, 63)で応答する可能性があり、この方式のシリンダ数はINT 13hで許可されている1024よりもはるかに大きくなければなりません。[ a ]
BIOS が報告するドライブ ジオメトリに影響を受けるオペレーティングシステムには、 Solaris、DOS、Windows NT ファミリーなどがあります。これらのシステムでは、 NTLDR ( NT、2000、XP、Server 2003 ) またはBOOTMGR ( Vista、Server 2008、Windows 7、Server 2008 R2 )が CHS を使用してディスクをアドレス指定するマスター ブート レコードを使用します。Windowsのx86-64およびItaniumバージョンでは、LBA アドレッシングを使用するGUID パーティション テーブルでドライブをパーティション分割できます。
一部のオペレーティングシステムは、ブートローダーでBIOSから報告されるジオメトリを使用しないため、変換を必要としません。これらのオペレーティングシステムには、BSD、Linux、macOS、OS/2、ReactOSなどがあります。
{{cite web}}: CS1メンテナンス: アーカイブサービスは非推奨になりました (リンク)トラック番号は0から始まり、トラック0はディスクの一番外側のトラックです。最も番号の大きいトラックはスピンドルの隣です。