msdosパーティションテーブルMBRが55 AA(16進数)で終わるので、この問題は簡単だと思うかもしれません。ただし、パーティションテーブルなしでFAT32でフォーマットされたディスクも55 AAで終わるためではありません。
次のようにディスクをフォーマットします。
mkfs.vfat -F32 /dev/sdX
これらのディスクにはパーティションテーブルがなく、LinuxとWindowsの両方で認識されます。最初の512バイトは55AAで終わります。
Linuxは55 AAで終わっても、そのようなディスクに有効なパーティションテーブルがないことをどうやって知ることができますか?
ベストアンサー1
これがブロックデバイスの最初のセクタであり、0x55 0xAAで終わっても、LinuxカーネルはこれがMBRではないことをどうやって知ることができますか?
答えはコードにあります:https://elixir.bootlin.com/linux/latest/source/block/partitions/msdos.c#L616
まず、そのセクタのデータをパーティションテーブルとして解釈し、次にFATメタデータとして解釈しようとします。 2番目のケースでは、ブロックデバイス用のパーティションは作成されません。これは経験的な方法であるため、PBRに存在しないパーティションテーブルが誤って検出されるいくつかの極端なケースがあります。
元のDOSブートプロセスは次のように動作します。
最初のセクタには、マスターブートレコード、パーティションテーブル、および小さなコードフラグメントが含まれています。最新システムのこのコードは、より複雑なブートローダを呼び出します。この時点で、パーティションテーブルエントリを見て、最初のアクティブ(起動可能)パーティションの最初のセクタの実行を開始します。
最初のセクターはFATパーティションのブートレコードです(https://wiki.osdev.org/FAT#Boot_Record)には小さなコードスニペットも含まれています。これはDOSに必要なフルブートローダです(これはIO.SYSファイルとMSDOS.SYSファイルをロードすることです)。
パーティションブートレコードとマスターブートレコードの署名は両方とも0x55 0xAAです。フロッピーディスクなどのリムーバブルドライブでは、スペースを無駄にするためにパーティションテーブルを持つことは意味がないため、ディスクはFATパーティションとそのブートレコードで始まります。ローダーコードはMBRのようにオフセット0から始まり、BIOSには影響しません。そこにあるすべてを実行するだけです。
もちろん、PBRはMBRと構造が異なり、FATファイルシステムの特性を説明しています。