バグ/特異点がなく、セクタサイズが512で、LBA48アドレスが指定され、拡張ディスクドライブをサポートするかなり近代的なBIOS(2005-)を想定します。
要求する理由は、INT 13h 拡張読取り呼び出しによる単純読取りの場合、オフセットセクタが使用可能なディスクより 8ZiB 大きく、LBA48 アドレス指定範囲外であるためです。しかし、より小さな制限への参照だけが見つかりましたが、GRUBは実際に何をサポートできますか?
boot.img/diskboot.imgで使用されるブロックリストは、どのサイズフィールドで構成されていますか?
答え1
GNU GRUB(とも呼ばれるgrub2
)ブロックリストエントリには、LBA番号の64ビット()フィールドがあるため、uint64_t
8バイトの値を格納できます。ただし、ほとんどの場合、制限要因は BIOS INT13h 拡張読み取りルーチンが許可することです。デフォルトのハードウェア制限がLBA48の場合、制限は2 ^ 48ブロックになり、これは512バイトのブロックサイズから128PiBまで動作します。または約144ペタバイトです。
GRUBレガシー(GRUB 0.9x)について話している場合、そのブロックリストは32ビット(uint32_t
)LBA値のみを保持できます。
ファームウェアディスクアクセスAPIが9.4ZBに制限され、grubx64.efi
UUIDで識別されたGPTパーティションから特別に名前付きファイルのみをロードするようにファームウェアに指示できるUEFIシステムでは、GRUBの制限がまったく適用されない場合があります。もちろん、ファームウェアがサポートしていないファイルシステムタイプを使用している場合は、そのサイズのファイルシステムをサポートできるGRUBのファイルシステムドライバに頼る必要があります。 :-)