これは、grub-pcバージョン1.98 + 20100804-5ubuntu3(Maverick Meerkat)のものです。
grub2インストーラーはループバックデバイスにインストールできますが、デバイスマッパーを使用してマウントすると混乱し、LVMスキームがあると信じてしまい、抽象化の欠如に関する不満で不思議に失敗します。
代わりに、パターン「/ dev / loop [0-9]」に一致する必要がある名前で、つまり最後にパーティション指定子を付けずに、パーティションのループバックデバイスを自分でセットアップする必要があります。
kpartx -v -a /dev/loop0
losetup /dev/loop1 /dev/mapper/loop0p1
mount /dev/loop1 /mnt
(このボリュームでgrub-mkconfig / update-grubを動作させる場合、パーティションループバックは、イメージファイルに直接ではなく、/ devの下のディスクループバックに接続する必要があります)。
fdiskを使用してイメージのパーティションを作成したため、msdosスタイルのパーティションテーブル(ラベルとも呼ばれます)があり、BIOSを使用してブートします。MBRにstage1 / boot.imgを配置することに加えて、stage1.5 / core.imgは、直後に続くパーティション化されていないスペース(!)の埋め込み領域に配置されます。これにはスペースが必要です。
ここでのトリックは、デバイスマップを通じてgrub2インストーラーに、ループバックセットアップが仮想マシンのBIOSドライブにどのようにマップされるかを伝えることです。(grub1レガシーでは、これはシェルで直接行われました)。このイメージを最初のディスクとして起動することをおそらく考えているので、適切なマッピングは次のようになります。
mkdir -p /mnt/boot/grub
cat > /mnt/boot/grub/device.map <<EOF
(hd0) /dev/loop0
(hd0,1) /dev/loop1
EOF
ここでは、ブート構成ファイルgrub.cfgを生成できるように、ゲストマップにデバイスマップを配置しました。
mount --bind /dev /mnt/dev
chroot /mnt grub-mkconfig -o /boot/grub/grub.cfg
(GRUB-PCパッケージのポストインストーラはデバイスマップを(上書きされたプローブを実行することに注意してください!)、あなたはそれを記述する必要がありますので、後のインストールと実行のgrub-mkconfig /更新-grubの自分)。
ホストからインストーラーを実行しますし、ゲストインストールを指定します。
grub-install --no-floppy --grub-mkdevicemap=/mnt/boot/grub/device.map --root-directory=/mnt /dev/loop0
最後に、イメージでqemuを開始する前に、ここで設定したすべてをアンマウントします。
umount /mnt/dev
umount /mnt
losetup -d /dev/loop1
kpartx -v -d /dev/loop0