Grubを使用して管理したいマルチブートシステムがあります。 Linuxディストリビューションに同梱されているGrubのバージョンはGrub2であり、ステージ1.5-2に相当するcore.imgを、MBRの後、最初のパーティションの前の最初のトラックの残りのセクターにインストールします。残念ながら、これらのセクターは別のプログラムで必要とされています。
別のプライマリ/ bootパーティションがあります。 boot.imgをMBRとして保持することしかできず、MBRの直後のセクターに埋め込まれているものではなくcore.imgの/ bootパーティションを検索するようにすると、すべてが正常に機能します。これはgrub2で可能ですか?
BIOSモードでGRUB2を構成して、MBRの後の領域に埋め込まずにパーティションから起動することは可能ですが、いくつかの問題があります。
プレーンパーティションには/boot
が必要です(プライマリパーティションまたは論理パーティションの場合がありますが、ソフトウェアRAID(md)またはLVMを使用しないでください)。 /boot
の個別のパーティションは絶対に必要というわけではありませんが、/boot
がルートファイルシステムに保存されている場合、同じパーティション制限がルートファイルシステムパーティションに適用されます。
/boot
に使用されるファイルシステムは、ブロックリストインストールモードをサポートしている必要があります。最も一般的に使用されるLinuxファイルシステムはこれをサポートしています。重要な例外はbtrfs
とxfs
です(ただし、btrfs
にはcore.img
を埋め込むのに十分な大きさのブートローダー領域があるため、GRUB2をそこにインストールしても機能する可能性があります)。繰り返しますが、/boot
に個別のパーティションがない場合、これらの制限はルートファイルシステムに適用されます。
ブロックリストインストールモードは、GRUB2開発者には推奨されません。このモードでは、core.img
はプレーンファイルとして/boot
ファイルシステムに保存されますが、実際には、生成されたパーティションブートセクターに保存されているセクター番号を使用してアクセスされます。 by GRUB(およびcore.img
自体)であるため、このファイルでファイル操作を行うと、起動が中断する可能性があります。これを使用する場合は、別の/boot
パーティションを使用するもう1つの理由です。モード— core.img
に影響を与えるファイルシステム操作を行う可能性は低くなります。
/boot
が論理パーティション上にある場合、パーティションブートセクターからブートローダーコードを開始するための何らかの手段が必要です。MBRコードの多くのバージョンは、プライマリパーティションからのブートのみをサポートしています。 1つの解決策は、 SyslinuxのMBRコード を使用することです。これは、論理パーティションからの起動もサポートします。
/boot
パーティションが/dev/sda2
であるとします。次に、次のコマンドを使用してGRUB2をインストールする必要があります。
grub-install --force /dev/sda2
最近のGRUB2バージョンでは、ブロックリストインストールモードを使用しないため、--force
オプションを使用する必要があります。
次に、fdisk /dev/sda
を使用して、パーティション2をアクティブとしてマークする必要があります。
最後に、MBRにデフォルト以外のブートコードがある場合(たとえば、古いGRUBインストール))、アクティブパーティションからブートセクターをロードするコードをインストールする必要があります。たとえば、 Syslinuxからmbr.bin
を取得できます:
dd bs=440 count=1 conv=notrunc if=mbr.bin of=/dev/sda
/boot
に論理パーティションを使用する場合は、Syslinuxのaltmbr.bin
を使用することも検討できます。これにより、アクティブなパーティションを探す代わりに、MBRのバイトからブートパーティション番号を取得します。コンピュータ上にあるオペレーティングシステムは、アクティブとしてマークされた論理パーティションによって混乱することはありません。
私が見る限り、MBRのコードがそのcore.imgの次のセクター以外の場所を探すようにGrub2を構成することはできません。
ただし、すべてのGrubを/ bootパーティションにロードすることはできます。これにより、ディスクの先頭に保存されているデータをいじる必要がなくなります。デフォルトでは、MBRのコードはアクティブなパーティションを見つけ、そのパーティションの最初のセクターに制御を移します。適切なMBRが必要な場合は、 Syslinux に付属しています。
これは、/ bootパーティションが通常のプライマリパーティションであることを前提としています。