web-dev-qa-db-ja.com

grub-mkrescueが起動可能なイメージを生成しない

grub-mkrescueコマンドを使用してレスキューディスクを作成しようとしています。私はそれを次のように呼び出します:

grub-mkrescue -o grub.iso

これにより.isoファイルが生成されますが、VirtualBoxを使用してそこから起動しようとすると、起動メディアを読み取れないと表示されます。アーカイバでファイルを開くと、.isoには空の/ boot/grubディレクトリしかないことがわかります。

また、次のようなコマンドを使用している人もいます。

grub-mkrescue -o grub.iso /boot/grub

しかし、それはそのディレクトリが存在しないことについて不平を言います。 (現在、実際のLinux PCにアクセスできないため、Debian VPSでこれを作成していることが関係している可能性があります。)

この問題の原因は何ですか?起動可能なイメージに保存するGRUBファイルがありませんか、それともコマンドを間違った方法で使用していますか?

3
Overv

実は、これは、このコマンドを実行しているシステムに(アクセス可能な)/boot/grubディレクトリがない場合に発生します。サイレントに失敗し、空のISOファイルを生成します。

Linuxの通常のデスクトップインストールで同じコマンドを実行すると、コマンドは動作するブート可能イメージを生成します。

2
Overv

次の手順で、作業イメージが作成されます。

  • multiboot hello world main.elfファイルを作成します。 GRUBはそれらのファイルを起動する方法を知っています(GRUBはマルチブートではありませんがLinuxカーネルを起動する方法も知っています)

  • 以下を含むiso/boot/grub/grub.cfgファイルを作成します。

    menuentry "main" {
        multiboot /boot/main.elf
    }
    

    main.elfiso/boot/の下に配置します

  • Ubuntu 17.10、UEFIマシンの場合:

    Sudo apt-get install grub-pc-bin
    

    https://wiki.osdev.org/Bare_Bones で述べたように、それ以外の場合は単に機能せず、方法がわかりません。

    TODO OMG本当に?!この狂気のタイプを取り除くには、ソースからGRUBを構築することを学ぶ必要があります。

  • 画像を生成して実行します。

    grub-mkrescue -o main.img iso
    qemu-system-x86_64 -hda main.img
    

この例の正確なコードを次の場所に投稿しました: https://github.com/cirosantilli/x86-bare-metal-examples/tree/d217b180be4220a0b4a453f31275d38e697a99e0/multiboot/hello-world