IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    Hybrid bootable USB stick for legacy BIOS & UEFI

    发表于 2015-04-26 20:00:00
    love 0

    This is a simple note for people who are googling this topic right now, and you are welcome.

    Backgrounds

    • Legacy BIOS needs bootloaders to be installed into MBR and the reserved space after it.

    • UEFI only needs bootloaders in ESP(EFI System Partition).

    • There is no resource competition between legacy BIOS and UEFI requirements.

    Preparations

    • grub-pc-bin and grub-efi-amd64-bin packages for Debian users.

    • An USB storage stick, MBR or GPT. Some unallocated space(1MB is enough) at the beginning of disk if you are using GPT.

    • A vfat partition with the “boot” flag.

    Cooking

    # mount /dev/sdb1 /media/sdb1
    
    # grub-install --target=i386-pc --boot-directory=/media/sdb1/boot /dev/sdb
    
    # grub-install --target=x86_64-efi --efi-directory=/media/sdb1/ --boot-directory=/media/sdb1/boot --removable /dev/sdb
    

    Configuration(just a template)

    # /media/sdb1/boot/grub/grub.cfg
    set root=(hd0,1)
    
    menuentry "FreeDOS" {
            linux16  /boot/freedos/memdisk
            initrd16 /boot/freedos/balder10.img
    }
    menuentry "Memtest86+" {
            loopback loop /boot/systemrescuecd-x86-x.y.z.iso
            linux16 (loop)/bootdisk/memtestp
    }
    menuentry "Ubuntu xx.yy" {
            set isofile="/boot/ubuntu-xx.yy-desktop-amd64.iso"
            loopback loop $isofile
            linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isofile noprompt noeject
            initrd (loop)/casper/initrd.lz
    }
    menuentry "SystemRescueCd" {
            set isofile="/boot/systemrescuecd-x86-x.y.z.iso"
            loopback loop $isofile
            linux   (loop)/isolinux/rescue64 docache isoloop=$isofile
            initrd  (loop)/isolinux/initram.igz
    }
    menuentry "Install Debian GNU/Linux" {
            linux   /boot/debian/vmlinuz priority=low recommends=false
            initrd  /boot/debian/initrd.gz
    }
    menuentry "Debian GNU/Linux Rescue Mode" {
            linux   /boot/debian/vmlinuz priority=low recommends=false rescue/enable=true
            initrd  /boot/debian/initrd.gz
    }
    

    Done, enjoy fixing others’ computers then, which I already quit :D



沪ICP备19023445号-2号
友情链接