支持UEFI和LEGACY的多系统安装U盘

base

# https://www.v2ex.com/t/466839
Hybrid MBR(MBR 混合分区表)
MBR 分区方案中,磁盘的第一个扇区( 512 字节),存放磁盘引导代码和 4 个分区表项。这 512 个字节被称为 MBR
GPT 分区方案中,分区表放在第 2~33 扇区,共 33 个扇区( 512 * 33 字节),另外在磁盘最末尾 33 个扇区,备份一个分区表。
因为第一个扇区已被 MBR 分区方案使用,GPT 分区方案保留第一扇区,被称为 protective MBR。 protective MBR 上只有一个分区项,并标记为特殊的"EE"类型,尽可能大的覆盖整个磁盘。防止只识别 MBR 的系统操作磁盘。
Hybrid MBR 就是利用这个 protective MBR,重新开辟出分区表,并和 GPT 分区表的分区区块位置保持一致。从而激活 MBR 系统识别分区。

bootloader

# https://www.slant.co/topics/4820/~linux-bootloaders
1. GNU GRUB
2. Syslinux
3. rEFInd
4. Clover Bootloader
5. BURG
6. systemd-boot (Gummiboot)
7. LILO

1. x86_64

disk partion

1. gparted
设置分区表GPT,新建主分区FAT32,格式化分区FAT32,设置分区flag为boot

2. gdisk
剩余1M空间创建分区, GUID设置为ef02(BIOS boot partition),不需要格式化

3. 分区信息
sudo parted /dev/sdd print
Number  Start   End     Size    File system  Name                 Flags
 1      1049kB  61.5GB  61.5GB  fat32                             boot, esp
 2      61.5GB  61.5GB  1032kB               BIOS boot partition  bios_grub

install grub

# 挂载分区
sudo mount /dev/sdd1 /mnt -o uid=$USER,gid=$USER

# x86_64: grub-efi-amd64-bin
sudo grub-install --target=i386-pc --boot-directory=/mnt/boot /dev/sdd --recheck
sudo grub-install --target=x86_64-efi --efi-directory=/mnt --boot-directory=/mnt/boot /dev/sdd --removable

/boot/grub/grub.cfg

# https://github.com/Jimmy-Z/grub-iso-boot/blob/master/grub.cfg
# http://www.jinbuguo.com/linux/grub.cfg.html

insmod part_gpt
insmod part_msdos
insmod fat
insmod ntfs
insmod iso9660
insmod udf

search --no-floppy --label --set isopart DATA

menuentry "Ubuntu Desktop 64bit ISO" {
 set isofile=/boot/iso/ubuntu-14.04.3-desktop-amd64+mac.iso
 loopback loop ($isopart)$isofile
 linux (loop)/casper/vmlinuz file=/cdrom/preseed/ubuntu.seed boot=casper iso-scan/filename=$isofile noeject noprompt splash locale=zh_CN.UTF-8 --
 initrd (loop)/casper/initrd.lz
}

menuentry "Ubuntu Server 64bit ISO" {
 set isofile=/boot/iso/ubuntu-14.04.3-server-amd64+mac.iso
 loopback loop ($isopart)$isofile
 set gfxpayload=keep
 linux (loop)/install/vmlinuz file=/cdrom/preseed/ubuntu-server.seed iso-scan/filename=$isofile quiet --
 initrd (loop)/install/initrd.gz
}

2. arm64

分区

分区表msdos,一个fat32分区,标签DATA,标志boot

install grub

# 挂载分区
sudo mount /dev/sdd1 /mnt -o uid=$USER,gid=$USER

# arm64: grub-efi-arm64-bin
sudo grub-install --target=arm64-efi --efi-directory=/mnt --boot-directory=/mnt/boot /dev/sdd  --recheck --removable

/boot/grub/grub.cfg

insmod part_gpt
insmod part_msdos
insmod fat
insmod ntfs
insmod iso9660
insmod udf

search --no-floppy --label --set isopart DATA

set timeout=3

if loadfont /boot/grub/fonts/unicode.pf2 ; then
    set gfxmode=auto
    insmod efi_gop
    insmod efi_uga
    insmod gfxterm
    terminal_output gfxterm
fi

menuentry 'kylin 4.0.2-sp2 desktop arm64 install' {
    set default=liveinstall
    set gfxpayload=keep
    set isofile=/iso/Kylin-4.0.2-desktop-sp2-181112.J1-arm64.iso
    loopback loop ($isopart)$isofile
    linux (loop)/casper/Image boot=casper iso-scan/filename=$isofile splash
    initrd (loop)/casper/initrd.img
}

menuentry 'kylin 4.0.2-sp2 server arm64 install' {
    set default=install
    set gfxpayload=keep
    set isofile=/iso/Kylin-4.0.2-server-sp2-18071110.J1-arm64.iso
    loopback loop ($isopart)$isofile
    linux (loop)/casper/Image boot=casper iso-scan/filename=$isofile splash
    initrd (loop)/casper/initrd.img
}
原文地址:https://www.cnblogs.com/liujitao79/p/12617544.html