64位UEFI下的rEFInd引导多启动移动硬盘(MacOS + Win10PE + Ubuntu 20.04 + Fedora 35 + OpenSUSE 15.3 + Archlinux + Gentoo + Clonezilla)

时间:2024-01-26 12:34:18

最近研究了一下如何制作一个多启动移动硬盘,其中包含的操作系统有MacOS,Win10PE(基于微软官方制作的),Ubuntu 20.04,Fedora 35,OpenSUSE 15.3,Archlinux,Gentoo和Clonezilla。我用的启动器是rEFInd。

这里的Linux版本选择涵盖了最常用的个人服务器版本,为何选择这三个服务器呢,因为这三个服务器分别是从Debian,RedHat,Slackware三大主流Linux分支过来的(一个分支一个),具体的Linux族谱详情可以参考wiki上面的介绍,对于其他小众的服务器版本就不探究了。另外,选择Arch和Gentoo两个最常用的滚动发行版作为补充。

文章最后给出三大主流分支的商用版本的对应启动项的制作。

移动硬盘的分区

这里我的移动硬盘大小是1TB(实际是931.5GB),具体GPT分区方案如图所示:
移动硬盘分区表
分区工具Windows下可以选择Disk Genius,Linux和Mac下就用自带的分区工具吧。

这里的主要分区都标记为蓝色:

  1. ESP分区(第一个细小的蓝色分区):大小200MB完全够用了,目录结构示意图如下所示(可能和你的文件内容不一样):
    ESP分区
    EFI文件夹下面的boot子文件夹包含了rEFInd的相关文件,microsoft子文件夹则是包含了Win10PE启动必须的文件;

  2. MacOS分区:大小40GB,格式由MacOS决定,可以是APFS也可以是老版的Mac OS Extension;

  3. OS分区:WinPE和Linux操作系统的分区,大小40GB,格式FAT32,目录结构示意图如下所示(可能和你的文件内容不一样,每个系统下面除了iso文件的其他文件都是从iso文件里面提取出来的,可以先解压iso文件然后搜索相应的文件名):
    OS分区

  4. Data分区:格式最好用exFAT,这样Mac,Windows,Linux都可以正常访问。

注意:Mac分区和WinPE和Linux操作系统分区后面都有一个大小是128MB的未使用的隔离分区,这个空间是MacOS要求的,如果没有的话,可能会对后续的MacOS上的格式化操作产生影响。

Win10PE的制作方法

Windows 10 PE的ISO制作方法可以参考微软官方的制作方法。制作好以后,可以从ISO文件里面提取出来下面几个东西:

  1. bootx64.efi:在ISO解压文件的\boot目录下,这个文件是UEFI第一个要找的文件,没有这个没办法引导PE。
  2. BCD:在ISO解压文件的\EFI\Microsoft\Boot目录下,这个文件是bootx64.efi要寻找的,这个文件配置不好的话会出现cannot find image这个错误。
  3. boot.sdi:在ISO解压文件的\boot目录下,这个文件是BCD文件要寻找的。
  4. boot.wim:在ISO解压文件的\sources目录下,这个文件是BCD文件要寻找的。

下面,需要修改BCD文件,这里用到的工具是BOOTICEx64,其中需要修改的项已经在下图中标红,主要就是boot.sdi和boot.wim的位置信息要找对:
BCD编辑

注意:制作好的目录基本结构如下:

  1. ESP分区的/EFI/microsoft/boot/目录下需要放BCD和bootx64.efi这两个文件。
  2. OS分区的/winpe/下放boot.wim,boot.sdi这两个文件。

MacOS的安装

在Mac系统下,用安装盘的createinstallmedia命令来创建就好了,注意不要装错分区了。

Linux系统的启动盘定制安装

在上面介绍OS分区的时候,各种Linux的目录结构已经显示了ISO文件和对应解压出来的引导文件都有哪些。在refind.conf里面不要把位置搞错就好了

rEFInd的安装

这一步非常简单,就是把原来的rEFInd文件夹下面的refind.conf-sample和refind.efi拿出来放到ESP分区的/EFI/boot下面,并且改名为refind.conf和bootx64.efi,然后把相应的rEFInd文件夹下面的icons复制到/EFI/boot下(其实也可以指定其他目录,为了方便就放在这里了,如果在其他位置要通过修改refind.conf来指定)。最后,分享一下我的refind.conf的menuentry部分,其他部分的配置都因人而异。

menuentry "macOS Big Sur" {
    icon \EFI\boot\icons\os_cata.png
    volume "Install macOS Big Sur"
    loader \System\Library\CoreServices\boot.efi
}

menuentry "Windows 10 PE x86_64" {
    icon \EFI\boot\icons\os_win8.png
    loader \EFI\microsoft\boot\bootx64.efi
}

menuentry "Ubuntu 20.04.3 amd64" {
    icon /EFI/boot/icons/os_ubuntu.png
    volume "OS"
    loader /ubuntu/vmlinuz
    initrd /ubuntu/initrd
    options "boot=casper iso-scan/filename=/ubuntu/ubuntu-20.04.3-live-server-amd64.iso quiet"
}

menuentry "Fedora 35 x86_64" {
    icon /EFI/boot/icons/os_fedora.png
    volume "OS"
    loader /fedora/vmlinuz
    initrd /fedora/initrd.img
    options "inst.repo=hd:LABEL=OS:/fedora/Fedora-Server-dvd-x86_64-35-1.2.iso noeject ---"
}

menuentry "OpenSUSE Leap 15.3" {
    icon /EFI/boot/icons/os_suse.png
    volume "OS"
    loader /opensuseleap15.3/linux
    initrd /opensuseleap15.3/initrd
    options "splash=silent quiet root=live:CDLABEL=openSUSE_Leap_15.3_KDE_Live rd.live.image iso-scan/filename=/opensuseleap15.3/openSUSE-Leap-15.3-KDE-Live-x86_64-Media.iso"
}

menuentry "Arch Linux x86_64" {
    icon /EFI/boot/icons/os_arch.png
    volume "OS"
    loader /arch/vmlinuz-linux
    initrd /arch/initramfs-linux.img /arch/intel-ucode.img
    options "img_dev=/dev/disk/by-label/OS img_loop=arch/archlinux-2021.05.01-x86_64.iso"
}

menuentry "Gentoo amd64 minimal" {
    icon /EFI/boot/icons/os_gentoo.png
    volume "OS"
    loader /gentoo/gentoo
    initrd /gentoo/gentoo.igz
    options "root=/dev/ram0 init=/linuxrc dokeymap looptype=squashfs loop=/image.squashfs cdroot initrd=/gentoo/gentoo.igz isoboot=/gentoo/install-amd64-minimal-20210526T214502Z.iso"    
}

menuentry "Clonezilla 2.7.1-22 amd64" {
    icon /EFI/boot/icons/os_clover.png
    volume "OS"
    loader /clonezilla/vmlinuz
    initrd /clonezilla/initrd.img
    options "boot=live live-config toram=filesystem.squashfs findiso=/clonezilla/clonezilla-live-2.7.1-22-amd64.iso"
}

到此,所有制作已经完毕,其实没有想象中那么难,但是网上想找到一个比较完整的步骤还不太容易。有问题的话,各位可以在下面留言,我会不定时解答。同时,如果觉得对你有帮助,麻烦也点个赞。

附上Debian,RedHat Enterprise Linux和SUSE Linux Enterprise的menuentry

menuentry "Debian 11.1 amd64" {
    icon /EFI/boot/icons/os_debian.png
    volume "OS"
    loader /debian11.1/vmlinuz
    initrd /debian11.1/initrd.gz
    options "findiso=/debian11.1/debian-live-11.1.0-amd64-standard.iso"
}

menuentry "Red hat enterprise linux 8.4 x86_64" {
    icon /EFI/boot/icons/os_centos.png
    volume "OS"
    loader /rhel8.4/vmlinuz
    initrd /rhel8.4/initrd.img
    options "inst.repo=hd:LABEL=OS:/rhel8.4/rhel-8.4-x86_64-boot.iso noeject ---"
}

menuentry "SUSE linux enterprise 15.3 SP3 x86_64" {
    icon /EFI/boot/icons/os_suse.png
    volume "OS"
    loader /sle15.3sp3/linux
    initrd /sle15.3sp3/initrd
    options "splash=silent quiet rd.live.image install=hd:/sle15.3sp3/SLE-15-SP3-Online-x86_64-GM-Media1.iso"
}

注意:这里比较坑的是Debian11.1的制作,其他所有的loader和initrd所用的文件都是通过解压iso文件里面对应的内容到iso外面,但是,debian里面的那两个文件不管用,因此,需要去Debian11.1 standard loaderDebian11.1 standard initrd去下载和standard相关的引导文件(standard版本是无桌面的)或者Debian11.1 graphic loaderDebian11.1 graphic initrd去下载和gnome,kde等相关的引导文件(有桌面的)。