手動制作BIOS和EFI多啟動U盤


原文鏈接:https://www.lainme.com/doku.php/blog/2017/07/%E5%88%B6%E4%BD%9Cbios%E5%92%8Cefi%E5%A4%9A%E5%90%AF%E5%8A%A8u%E7%9B%98

准備分區

U盤使用的是MBR分區表(GPT應該也行),並分為兩個區:

  • 第一分區:FAT32格式,作為引導分區/EFI分區,大小以100MB為宜。
  • 第二分區:EXT4或其他你喜歡的格式,存放ISO和其他文件。

安裝引導

啟動引導使用GRUB,並假設第一分區是/dev/sdb1。先掛載分區

sudo mount /dev/sdb1 /mnt

然后安裝BIOS引導

sudo grub-install --target=i386-pc --boot-directory=/mnt/boot --recheck /dev/sdb

再安裝EFI引導

sudo grub-install --target=x86_64-efi --efi-directory=/mnt --boot-directory=/mnt/boot --removable --recheck

配置引導

假設其他文件都存放於第二分區(/dev/sdb2),並包含以下目錄/文件

-- slax/
-- images/archlinux.iso
-- images/ubuntu-gnome.iso

則建立/mnt/boot/grub/grub.cfg文件,並寫入以下內容

insmod search_fs_uuid
set rootuuid=[第二分區的UUID]
set rootpath=/dev/disk/by-uuid/$rootuuid
search --no-floppy --set=rootpart --fs-uuid $rootuuid

insmod vbe
insmod efi_gop
insmod efi_uga
insmod font
if loadfont ${prefix}/fonts/unicode.pf2
then
    insmod gfxterm
    set gfxmode=auto
    set gfxpayload=keep
    terminal_output gfxterm
fi

menuentry 'Slax' {
    set syspath=/slax
    set root=$rootpart
    linux $syspath/boot/vmlinuz from=$syspath vga=normal load_ramdisk=1 prompt_ramdisk=0 printk.time=0 slax.flags=perch,xmode
    initrd $syspath/boot/initrfs.img
}

menuentry '[LiveCD] Archlinux' {
    set isopath=/images/archlinux.iso
    loopback loop ($rootpart)$isopath
    linux (loop)/arch/boot/x86_64/vmlinuz archisodevice=/dev/loop0 img_dev=$rootpath img_loop=$isopath
    initrd (loop)/arch/boot/x86_64/archiso.img
}

menuentry '[LiveCD] Ubuntu (GNOME)' {
    set isopath='/images/ubuntu-gnome.iso'
    loopback loop ($rootpart)$isopath
    linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isopath locale=zh_CN.UTF-8
    initrd (loop)/casper/initrd.lz
}

其中[第二分區的UUID]可以通過以下命令獲取:

sudo blkid /dev/sdb2

自作過程記錄:

-- slax/
-- images/opensuse-kde32.iso
-- images/opensuse-kde64.iso
-- images/manjaro-kde32.iso
-- images/manjaro-kde64.iso
-- images/manjaro-xfce64.iso
-- images/ubuntu18.04.3.iso
使用命令:blkid /dev/sdb5 獲取分區的UUID:DA18-EBFA, 還有:TYPE="vfat" PARTUUID="969d4ec8-05"
insmod search_fs_uuid
set rootuuid=[DA18-EBFA]
set rootpath=/dev/disk/by-uuid/$rootuuid
search --no-floppy --set=rootpart --fs-uuid $rootuuid

insmod vbe
insmod efi_gop
insmod efi_uga
insmod font
if loadfont ${prefix}/fonts/unicode.pf2
then
insmod gfxterm
set gfxmode=auto
set gfxpayload=keep
terminal_output gfxterm
fi

menuentry 'Slax' {
set syspath=/slax
set root=$rootpart
linux $syspath/boot/vmlinuz from=$syspath vga=normal load_ramdisk=1 prompt_ramdisk=0 printk.time=0 slax.flags=perch,xmode
initrd $syspath/boot/initrfs.img
}

menuentry '[LiveCD] OpenSuseKde32' {
set isopath=/images/opensuse-kde32.iso
loopback loop ($rootpart)$isopath
linux (loop)/arch/boot/x86_64/vmlinuz archisodevice=/dev/loop0 img_dev=$rootpath img_loop=$isopath
initrd (loop)/arch/boot/x86_64/archiso.img
}

menuentry '[LiveCD] OpenSuseKde64' {
set isopath=/images/opensuse-kde64.iso
loopback loop ($rootpart)$isopath
linux (loop)/arch/boot/x86_64/vmlinuz archisodevice=/dev/loop0 img_dev=$rootpath img_loop=$isopath
initrd (loop)/arch/boot/x86_64/archiso.img
}

menuentry '[LiveCD] Ubuntu (GNOME)' {
set isopath='/images/ubuntu-gnome.iso'
loopback loop ($rootpart)$isopath
linux (loop)/casper/vmlinuz.efi boot=casper iso-scan/filename=$isopath locale=zh_CN.UTF-8
initrd (loop)/casper/initrd.lz
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM