Adding and Using Files To/From the GRUB Memdisk (GRUB Standalone)
TLDR: GRUB can reference internal files via the volume specifier (memdisk), similar to external drives (hd0).
GRUB has an undocumented but really convenient feature to include files/images (e.g., bootable kernels) directly into the GRUB installation itself. If you use $ grub-mkstandalone to store GRUB on a USB stick or a QEMU volume for example, you can bundle GRUB as EFI-application together with a configuration and payload/files. These files can be stored in the internal volume (memdisk), that is built-in into the GRUB EFI application. There is no official documentation link I found, but it allows you to reference and boot files without having to access a real file system (like on a HDD or SSD). Let’s take a look at the following command, which creates a GRUB standalone application in the local directory ./volume-out. This directory could then be copied to a bootable USB stick.
grub-mkstandalone \ -O x86_64-efi \ -o ".volume-out/EFI/BOOT/BOOTX64.EFI" \ "/boot/grub/grub.cfg=./grub.cfg" \ "/boot/multiboot2-binary.elf=./multiboot2-kernel.elf"
All arguments in the form /path/inside/grub/memdisk=/path/in/host/filesystem will be bundled into the (memdisk). From the GRUB man page ($ man grub-mkstandalone) we can find grub-mkstandalone [OPTION…] [OPTION] SOURCE…. The man page tells about SOURCE, that Graft point syntax (E.g. /boot/grub/grub.cfg=./grub.cfg) is accepted. (I never heart of Graft Point Syntax before :D) To reference files from there, a minimal GRUB configuration file might look like this:
set timeout=0
set default=0
# if on GRUB shell, this might be useful
# set root=(memdisk)
menuentry "My Multiboot2-kernel" {
    # Test if the file supports Multiboot2 and loads the file into GRUB
    # It gets booted automatically
    # "/" automatically references the (memdisk)-volume
    # for other volumes, the path would be "(hd0)/boot/..." for example
    multiboot2 /boot/multiboot2-binary.elf
    # if on GRUB shell, this is required
    # boot
}
This way you can easily boot your Multiboot2 kernel for example during develoment in QEMU or your personal PC from GRUB.
0 Comments