web-dev-qa-db-ja.com

Grub2のboot.imgをMBRに入れて、別のブートパーティションからcore.imgをロードすることは可能ですか?

Grubを使用して管理したいマルチブートシステムがあります。 Linuxディストリビューションに同梱されているGrubのバージョンはGrub2であり、ステージ1.5-2に相当するcore.imgを、MBRの後、最初のパーティションの前の最初のトラックの残りのセクターにインストールします。残念ながら、これらのセクターは別のプログラムで必要とされています。

別のプライマリ/ bootパーティションがあります。 boot.imgをMBRとして保持することしかできず、MBRの直後のセクターに埋め込まれているものではなくcore.imgの/ bootパーティションを検索するようにすると、すべてが正常に機能します。これはgrub2で可能ですか?

3
wesley

BIOSモードでGRUB2を構成して、MBRの後の領域に埋め込まずにパーティションから起動することは可能ですが、いくつかの問題があります。

  1. プレーンパーティションには/bootが必要です(プライマリパーティションまたは論理パーティションの場合がありますが、ソフトウェアRAID(md)またはLVMを使用しないでください)。 /bootの個別のパーティションは絶対に必要というわけではありませんが、/bootがルートファイルシステムに保存されている場合、同じパーティション制限がルートファイルシステムパーティションに適用されます。

  2. /bootに使用されるファイルシステムは、ブロックリストインストールモードをサポートしている必要があります。最も一般的に使用されるLinuxファイルシステムはこれをサポートしています。重要な例外はbtrfsxfsです(ただし、btrfsにはcore.imgを埋め込むのに十分な大きさのブートローダー領域があるため、GRUB2をそこにインストールしても機能する可能性があります)。繰り返しますが、/bootに個別のパーティションがない場合、これらの制限はルートファイルシステムに適用されます。

    ブロックリストインストールモードは、GRUB2開発者には推奨されません。このモードでは、core.imgはプレーンファイルとして/bootファイルシステムに保存されますが、実際には、生成されたパーティションブートセクターに保存されているセクター番号を使用してアクセスされます。 by GRUB(およびcore.img自体)であるため、このファイルでファイル操作を行うと、起動が中断する可能性があります。これを使用する場合は、別の/bootパーティションを使用するもう1つの理由です。モード— core.imgに影響を与えるファイルシステム操作を行う可能性は低くなります。

  3. /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のバイトからブートパーティション番号を取得します。コンピュータ上にあるオペレーティングシステムは、アクティブとしてマークされた論理パーティションによって混乱することはありません。

1
Sergey Vlasov

私が見る限り、MBRのコードがそのcore.imgの次のセクター以外の場所を探すようにGrub2を構成することはできません。

ただし、すべてのGrubを/ bootパーティションにロードすることはできます。これにより、ディスクの先頭に保存されているデータをいじる必要がなくなります。デフォルトでは、MBRのコードはアクティブなパーティションを見つけ、そのパーティションの最初のセクターに制御を移します。適切なMBRが必要な場合は、 Syslinux に付属しています。

これは、/ bootパーティションが通常のプライマリパーティションであることを前提としています。

0
Martin Hilton