最初に、ドライブまたはパーティション、あるいはその両方が最初から最後まで線形アドレスを持っていると想定しています。そうでないと、dd
のようなプログラムがコピーメカニズムとして機能できなくなります。
ブートセクターは、ほとんど常にこのバイトの配列で0をアドレス指定しているだけですか?そのドライブで使用されているファイルシステムに依存すると思いますか?
申し訳ありませんが、これらの低レベルの事柄についてはあまり知識がなく、学びたいです!
はい、ブートセクターは常にMBRのセクター0にあります。ハードドライブは、従来は512バイトのセクターに分割されていますが、4TB以上のドライブは4096バイトのセクターを使用し始めています。
セクター全体を読み書きする必要があります。
現在、LBA(論理ブロック割り当て)には、セクターの標準的な進行があり、0からドライブの容量まであります。
古代のハードドライブは実際にはシリンダー、ヘッド、セクターを使用しています。各ヘッドは非常に多くのセクターを保持し、各シリンダーは非常に多くのヘッドを保持しました。
ファイルシステムはセクター0で開始せず、代わりにパーティションテーブルがパーティションの開始を示したため、ファイルシステムはこれに関与しません。
また、MBRには約2.2 TBの制限があり、4つ以上のプライマリパーティションを表す複雑な方法があるため、GPTはMBRに置き換わり始めました。論理パーティションが必要であり、各拡張パーティションには多数の論理パーティションを含めることができます。
GPTは、複雑さの多くをなくし、更新および簡略化しました。
詳細はこちらです。
最初に、使用するパーティション化スキームを指定する必要があります。 PCの古典的なものはMBRで、このパーティションスキームではディスクの最初のブロック(論理ブロックアドレス#0)と名前を共有します マスターブートレコード 。したがって、MBRパーティショニングの質問タイトルに対する答えはyesです。
マスターブートレコードには、最大446バイトのブートコード、プライマリパーティションのパーティションテーブル(パーティションあたり16バイトのみ)、およびブートシグネチャ(2バイト)が含まれています。各16バイトパーティションエントリのうち、最近のディスクのパーティションの最初のブロックを指定するために実際に使用できるのは4バイトのみであり、パーティション内のブロック数を指定するために使用できるのは4バイトのみです。その結果、MBRパーティションの開始点はディスクの先頭から(2 ^ 32-1)ブロック以内である必要があり、MBRパーティションのサイズは(2 ^ 32-1)ブロック以下である必要があります。実際には、これはMBRパーティショニングの有用性を2 TB以下のディスクに制限します。
従来、MBRブートコードはアクティブなプライマリパーティションを識別し、そのパーティションの最初のブロック(パーティションブートレコードまたはPBRと呼ばれることもあります)をロードして実行します。 PBRには、オペレーティングシステム固有のブートプログラムが含まれます。しかし、GRUB、または一部のフルディスク暗号化ソリューション)のような最新のブートローダーは、より複雑なことを実行したい場合があるため、1つのブロックに収まりません。
古いディスクでは、Cylinder/Head/Sectorジオメトリ値が実際に何らかの意味を持っていたときに、ディスクの最初のヘッドの最初のトラック全体がMBRブロックのみのために予約されていました。規則は各パーティションを最初から開始することでした。そのため、トラック#0の最初のブロックがMBRによって占有されていたため、トラック全体がスキップされ、代わりに最初のパーティションがトラック#1から始まります。その結果、MBRブロックの後のトラック#0のセクターは、より高度なブートローダーで使用できるようになりました。 MBRでパーティション化されたディスクでは、GRUBブートローダーは通常、そこに自身の少なくとも一部を埋め込みます。
LBAアドレッシングが標準である最近のディスクでは、新しい規則が確立されました。最初のパーティションは、通常、論理ブロックアドレス#2048、またはディスクの先頭からちょうど1 MiBで始まります。これにより、ディスクが2のべき乗のグループのブロックを内部で処理する場合でも、最初のパーティションの開始がそのようなブロックグループの開始に揃えられることが保証されます。 RAIDアレイやその他の大規模なストレージシステムでは、このようなデータ配置は、ストレージから最大限のパフォーマンスを引き出すための重要な部分になります。副作用として、この新しい規則により、MBRブロックと最初のパーティションの先頭との間にさらに「無駄な」スペースが生じる可能性がありました。
2011年にIntel Sandy Bridgeマイクロアーキテクチャがリリースされたとき、新しいUEFIファームウェアが大衆に導入され、最終的には従来のBIOSに置き換わりました。それと一緒に、新しいパーティション分割スキームが登場しました: GUIDパーティションテーブル または略してGPT。 MBRにはかなり基本的な最大サイズの制限が2テラバイト(標準ブロックサイズが512バイトであると想定)であったため、新しいスキームが必要でした。
GPTパーティションスキームには、実際には「保護MBR」が含まれています。GPTパーティションディスクの最初のブロック(LBA#0)には、「このディスクは、使用していないパーティションタイプに完全に割り当てられていますMBRスタイルのパーティショニングのみを理解するシステムについては、知って、触れないでください。 LBA#1から始まり、GPTの実際のパーティションテーブルデータです。これにより、パーティションのサイズをゼタバイトの範囲に拡大できます。これは、近い将来に十分なはずです。
GPTパーティションスキームは、MBRの制限を排除します。
UEFIファームウェアは、新しいブートローダースキームも指定します。ブートローダーのディスク上の固定された場所はなくなりました。代わりに、ファームウェアにはFAT32タイプのファイルシステムからファイルを読み取るための組み込み容量があり、ブートローダーは、特定のパーティションタイプGUIDでマークされたFAT32パーティション上の通常のファイルになります。このようなパーティションは、ESPまたはEFIシステムパーティションと呼ばれます。 (UEFIファームウェア標準は、主にIntel Itaniumシステムに存在するEFIファームウェアから開発され、ブートローダーパーティションの名前と構造はそこから継承されました。)
したがって、GPTを含む他のパーティション分割スキームでは、ブートセクターがドライブの最初のブロックであると想定することはできません。実際、ブートセクターの概念が存在するとは想定できません。
そのドライブで使用されているファイルシステムに依存すると思いますか?
いいえ。少なくともPC互換のコンピュータでは、使用するファイルシステムに依存することはできません。
どうして?
BIOSは、ハードディスクからブートセクターをロードします。使用されているファイルシステムを認識していないため、常に同じことが行われます。つまり、セクター#0をロードしています。
PCと互換性のないシステムでは、ブートセクターが別の場所にある場合があります。
UEFIを備えたシステムでは、ブートも異なる動作をします。
ところで:
CD-ROMから起動する場合、BIOSはセクター#16の後のどこかにある特別なセクターを検索します(100%確実ではありません)。このセクターには、実際のブートセクターの場所に関する情報が含まれます。 BIOSは、CD-ROMからブートセクターをロードできるように、この情報を理解する必要があります。
したがって、CD-ROMでは、ブートセクターの場所は実際にはCD-ROMのセクター#0ではありません。
ドライブは、通常512バイトの論理セクター(物理セクターとは異なる場合があります)に分割されます。一部のAPIはドライブをバイトの線形シーケンスとして提示する場合がありますが、実際のインターフェースプロトコルはセクター全体で機能します。
従来のPC BIOSでは、ドライブの0はマスターブートレコードとして知られていた/知られていて、初期ブートコードとパーティションテーブルの両方が含まれています。個々のパーティションには、ブートセクターとしてセクター0もありました。従来、dos/windowsでは、MBRのコードはアクティブパーティションを識別し、コードをアクティブパーティションのブートセクターに渡していました。
従来のPC生物で実行されているLinuxシステムは、通常、少し異なる動作をします。通常、GBRの「ステージ1」はMBRにインストールされます。これにより、MBRと最初のパーティションの間の空きスペースから「ステージ1.5」がロードされます。ステージ1.5には、ファイルシステムを理解し、いずれかのパーティションのファイルシステムから「ステージ2」をロードするのに十分な機能があります。次にステージ2に進み、ブートメニューを表示してカーネルをロードします。
UEFIとそのパーティションテーブルタイプGPTでは、処理がかなり異なります。セクター0には、保護されていないMBRが含まれています。これにより、efiに対応していないツールが誤ってGPTパーティション構造を破壊するリスクを軽減できます。 GPTパーティションテーブル自体はセクター1から保存されます。ファームウェアはファイルシステムに対応しており、パーティションからブートローダーをロードします。
PC以外のシステムもまた異なる可能性があります。特にArmシステムは、起動プロセスの点でマップ全体に及ぶ可能性があります。 IIRC imx6は、セクター1からブートコードを読み取ることによりハードドライブからブートし、セクター0をパーティションテーブル用に空けたままにします。一方、Raspberry Piは、ブートコードを含むFATパーティションを持つMBRスタイルのパーティションテーブルを見つけることを期待しています。