LinuxはMBRパーティションテーブルがあるかどうかをどうやって知ることができますか?

LinuxはMBRパーティションテーブルがあるかどうかをどうやって知ることができますか?

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ファイルシステムの特性を説明しています。

おすすめ記事