多系统启动U盘分区方案

总有人问装系统之类的事, 再加上我本身有装虚拟机的需求(虽然半年不用一次), 目前的U盘是一个多启动的U盘. 今天把自己的U盘分区方案记录一下备忘, 对于同时使用Mac和Windows的人来说应该也可以算是个新手向的教程.


目录

虽说是新手向, 但是徒手装个系统和虚拟机啥的前置技能还是要掌握的, 教程到处都有, 我就不多提了.

过程基本都有gif图, 图片有些大, 还没有找到正确的录屏姿势

目标

如果只是普通的PE盘就不至于写个文记录了, 做好的U盘可以实现以下功能:

  1. BIOS与EFI双引导的PE

    PE用来维护电脑之类的, 肯定有不支持EFI启动的老电脑, 所以也要支持BIOS启动.

  2. macOS与Windows双系统安装盘

    有一个Windows PE分区和macOS安装盘分区.

  3. 正常的数据存储区

    存东西用嘛……不过这个分区是NTFS格式的, Mac由于版权问题默认无法向NTFS分区写入文件, 为了在Mac和Windows下通用, 我在Mac上装了Tuexra NTFS插件, 网上可以找到激活码【

  4. 一个Win To GO系统

    对于随机读写速度足够快的U盘或都移动硬盘, 可以装一个使用Win To Go装一个Windows系统. 生日的时候基友送了一个性能和固态差不多的U盘, 就直接把Windows装在里面的, 虚拟机也可以从U盘引导开机, 还免得占Mac的空间. 这个Windows只支持UEFI启动, 其实想支持BIOS也可以, 但是我没那么做, 原因后面会说明.

准备

事先要下好的东西有:

  • Windows 10安装镜像

    有Win10就直接用Win10吧, 没什么不兼容的, 可以从MSDN I tell you 上下载.

  • macOS安装包

    从App Store上下载的.app格式即可, 注意要完整的安装包, 有的时候可能下出来的是增量下载的不完整安装包. 下载的时候按住option键就可以下载完整的安装包了.

  • Windows PE文件

    我使用的是微PE, 文件小, 功能够用, 没有乱七八糟的东西.

  • DiskGenius

    Windows下的分区软件, Mac下的我没注意找过类似的, 就先用这个吧, 在微PE里面就有, 也可以自己在官网另下一个.

一台Mac和一台Windows电脑(或虚拟机)当然要准备好, 还有一些软件在常用的PE中都会有, 就不列出来了.

按照我的经验, 还是先把操作过程写完再慢慢说明原理比较好, 以免最后发现没能达到自己想要的效果, 或者看不进去原理什么的.

分区

在Windows下使用DiskGenius(Mac上的磁盘工具基本没什么用了……有空我看看有什么好用的命令行工具)

首先清除U盘上已有的分区, 之后分成四个分区, 按顺序分别是:

  1. 存放数据和Windows系统的NTFS分区, 大小为除去下面三个分区后的所有空闲空间

  2. 存放PE的FAT32分区, 250MB左右即可

  3. 存放Windows系统EFI分区, FAT32格式, 150MB左右

  4. 存放Mac安装程序, 7个G左右, 格式随意

我直接用DiskGenius里的快速分区了, 分区表为MBR, 注意四个分区均为主分区. 分好区后最好注明卷标(gif中没标注……), 要不然之后分不清分区.

制作Mac启动盘

回到macOS系统. 要用到的就是Mac的安装程序, app store下载的app格式文件, 右键 -> 显示包内容 -> Contents -> Resourse就可能找到要用的程序createinstallmedia. 要使用的分区为U盘和第四个分区. 之后打开终端:

 1
 2
 3
 4
 5
 6
 7
$ sudo \    #使用管理员权限运行, “\”是用来表示该行未结束, gif中未换行
$ ./createinstallmedia \    #将createinstallmedia拖入终端窗口
$ --volume \  #要写入文件的分区
$ /Volumes/4 \   #将U盘的第四个分区拖入终端窗口
$ --applicationpath   #安装包的路径
$ /Applications/Install\ macOS\ Sierra.app \  #安装包路径
$ --nointeraction \   #这个是静默执行, 要不然还要不断确认什么的

因为用了管理员权限, 所以回车之后要输一遍密码(密码是不显示出来的), 之后就等待写入, 直到出现:

 1
 2
 3
 4
Making disk bootable...
Copying boot files...
Copy complete.
Done.

就制作成功了. 之前的分区名字会变成Install macOS Sierra.

制作Windows PE

再回到Windows系统, 打开PE制作程序, 这里不用程序中的自动制作, 而是提取出iso文件. 把提取出来的iso文件挪到mac系统中.

进入Mac系统, 挂载PE的iso镜像, 将里面的所有文件复制到U盘的第二个分区中.

设置MBR与PBR扇区

利用刚制作的PE, 进入PE中(注意要使用EFI启动, 原因下面会说明), 如果是Mac的话是可以看到已经制作好的Mac启动盘先项的, 以及进入PE的EFI BOOT选项. 打开BOOTICE工具, 选择U盘, 然后将MBR扇区改为Windows NT MBR类型, 之后选择第二个分区, 将PBR扇区改为Bootmbr引导程序类型, 再将第一个分区设置为激活分区.

安装Windows系统

注意这里也不使用Windows自带的安装程序安装, 而是使用PE中的Windows安装工具, 挂载Windows安装镜像, 进入source文件夹中可看到install.wim文件, 即安装文件, 引导分区和安装分区均为U盘的第一个分区. 之后执行安装. 因为演示用的U盘容量不够, 没有点下确认安装……

安装好后还要重启进入U盘的Windows分区, 执行Windows的安装, 以及之后的系统激活, 安装Bootcamp驱动什么的. 总之就是正常的Windows安装过程.

引导扇区调整

首先要从刚安装好的Windows中提取引导用的EFI文件, 使用管理员权限打个命令提示符:

 1
$ bcoboot C:\Windows /s C: /f UEFI /l zh-ch

C:\Windows为系统文件所在目录, /s C:为提取出的EFI文件所在分区, /f UEFI代表要提取的引导文件为EFI文件, /l zh-ch代表语言为简体中文(这个选项有没有无所谓的).

之后进入C盘就可以看到一个EFI文件夹, 把这个文件夹挪到Mac中, 将U盘接入Mac, 把EFI文件夹复制到第三个分区中.

之后打开DiskGenius(我直接在U盘中的PE里打开的), 将U盘的第二个分区设为激活分区, 再将第二、第三个分区的标识均改成EF.

之后就大功告成了!

下面就是原理上的解释了, 如果上面的操作后没有成功也可以看一下原理找找换败的原因

Windows和macOS对不同分区表的U盘的读取

大家都知道目前的分区表分为GPTMBR两种, 只要不上太老的系统对这两者的支持都没问题. 但是对于U盘上的分区, Windows系统不支持GPT分区, 且对于MBR分区来说, 也只能读取MBR分区上的第一个主分区;对于macOS来说, 两种分区表均支持, 所有分区都可以读取. 因此:

  • U盘必须以MBR分区表分区, 因为Windows不识别GPT

    有一些U盘, 本身的主控就是硬盘的主控, 所以在Windows是作为移动硬盘来识别的, 没有U盘那么多限制, 数据分区的位置就可以想对随便了, 复制文件也可以直接在Windows下进行. 但还是一定要使用MBR分区表进行分区.

  • 数据分区要放在第一个分区

  • 无法在Windows下对U盘第一个分区之外的分区进行文件操作

    其实也不绝对, 不过要借助第三方软件, 还不如直接下Mac下进行操作.

因为这个原因, 还有很多步骤变得很麻烦……

隐藏EFI分区

做好的U盘在Windows下只可以读到第一个分区, 但在Mac上四个分区都可以读取, 所以平时不会修改的PE和Windows的EFI分区可以隐藏, 将其分区标识改成EF, 即EFI分区标识, Mac下就不会挂载这两个分区.

BIOS与EFI启动

BIOS引导步骤

对于BIOS启动, 引导的步骤为:

  1. 开机 + 自检

  2. 运行硬盘第一个扇区的引导代码, 也就是MBR中的代码

  3. 寻找激活分区, 并运行激活分区的引导代码, 也就是PBR中的引导代码

  4. 寻找激活分区中的BOOTMBR文件, 按照其中的设置引导系统

  5. 进入系统

激活分区的设置

在写入PE文件时, 因为只是直接复制的文件, 并没有修改MBR和PBR扇区的代码, 所以一开始传统BIOS引导很可能进不去PE, 只能EFI方式进入PE. 要想使其支持BIOS启动, 需要对U盘MBR扇区和PE所在第二个分区的PBR扇区进行修改, 并且将第二个分区设为激活分区. 对照着设置MBR与PBR扇区这一步操作, 可以发现修改扇区后, 没有将第二个扇区设为激活分区, 而是设置第一个扇区为激活分区. 这是因为在其下一步安装Windows系统时, 由于对Windows读取分区的原因, 无法选择分区进行EFI引导的安装, 只能暂时将Windows安装成BIOS引导形式的, 为了进入Windows安装分区进行安装, 需要暂时将第一个分区设置分激活分区以便使用BIOS引导进入刚安装的Windows系统.

EFI引导步骤

  1. 开机 + 自检

  2. 寻找第一个含有EFI文件夹的FAT32分区, 并运行该分区的/EFI/bootx64.efi文件

  3. 根据/EFI/bootx64.efi文件, 查找对应系统的文件夹, 对于Windows就是/EFI/Microsoft

  4. 引导/EFI/Microsoft/Boot/BCD文件中指定的分区下的系统启动

  5. 进入系统

bcdboot命令

在提取EFI文件时所使用的bcdboot命令, 实际就是用来修复Windows引导的命令, 因为安装Windows时使用的BIOS引导, 没有EFI文件, 通过这个命令可以得到正确的EFI文件(其实就是使其中的BCD文件的配置正确).

BIOS与UEFI双引导

根据两者的引导方式, 可以看出, 只要将BOOTMBR文件和EFI文件夹放在一个设置为激活分区的FAT32格式的分区中, 就可以使系统支持BIOS与UEFI两种方式的引导, 上面使用的Windows PE就是以这种方式实现的双引导. 看一下PE的文件结构就知道了:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
$ tree
.
├── BOOTMGR
├── EFI
│   ├── BOOT
│   │   └── bootx64.efi
│   └── MICROSOFT
│       └── BOOT
│           └── BCD
└── WEPE
    ├── B64
    ├── MESSAGE
    ├── PELOAD
    ├── WEIPE
    ├── WEPE.INI
    ├── WEPE.SDI
    ├── WEPE.TXT
    ├── WEPE64
    ├── WEPE64.INI
    └── WEPE64.WIM

BCD文件

在安装win10或win8系统时, 如果在打开安装程序前不对硬盘进行分区, 使用镜像中的安装程序进行分区的话, 可以发现无论是BIOS还是UEFI引导, 其引导文件都是单独在一个分区. 不同分区的引导文件能够引导系统所在分区的系统, 靠的就是BCD文件, BCD文件中记录着硬盘中有系统的分区, 多系统的实现也要借助着BCD文件. 在提取EFI文件时, 使用刚安装的Windows文件也是为了让BCD中的系统分区正好指向我们安装的Windows.

为什么Win To Go系统不实现BIOS启动

在最上面的需求里就提到了U盘里装的Windows不支持BIOS启动, 为啥不顺便支持一下?在安装的过程中一开始就是用BIOS引导的, 怎么后来就不支持了?

是这样的, BIOS引导要求引导文件所在的分区为激活分区, 而一个分区表里只能有一个激活分区, 要想让Windows支持BIOS引导, 就要将其引导文件放在PE所在的第二个分区中, 而这样就涉及到了BIOS引导的双系统问题. 实现BIOS双系统本身不难, 就像上面说的修改一下BCD文件就可以, 但是这样进入这两个系统中的任意一个系统都要先进入Windows的引导程序选择要引导的分区, 实测这样速度慢得不行orz. 再加上PE可能用在老电脑的维护上, 速度可能更慢;另一个原因是, 要想让Win To Go系统在不同的电脑的运行, 各种驱动肯定少不了, 稳定性又是个问题, 而且更多时候也没什么一定要在别的电脑上跑自己系统的需求, 还不如安心只在里面打上BootCamp和虚拟机驱动, 只在自己电脑上跑. 更何况有几个人的U盘随机读写速度允许在上面装一个Windows呢?(笑

后来看到同学Linux下的grub多系统引导好像速度不慢, 但是懒得折腾了(划去

至于Win To Go的安装我直接用的PE里的安装器, 可以指定系统分区和引导分区, 使用Windows镜像里的安装器也可以, 不必要用专门的WTG安装器来安装Win To Go.

Mac安装盘

新出的Mac基本上只支持EFI引导了, 所以Mac安装盘自然是EFI引导, 但苹果家的东西总是有点特殊, EFI引导可以直接识别自家的HFS+分区, EFI文件的位置我也没兴趣查看←_←. 最先做好这个分区是因为Mac安装盘的安装程序会对这个分区进行重新格式化以、设置激活分区、修改U盘MBR等行为, 放在前面防止改乱其他部分的操作成果.

那么, 这个U盘该怎么用orz

对于PE, 正常进入就行, 在非Mac电脑的选择引导界面, 无论是BIOS还是EFI, 应该都只能看到一个引导选项(不识别Mac的安装盘);对于Mac安装盘, 在Mac开机时按下option键可以看到下面的一坨引导选项:

从左到右分别是:

  • macOS系统分区

  • macOS恢复分区

  • macOS安装盘分区

  • PE分区

  • Windows分区

对于Windows, 稍微有点复杂, 首先说明一下多个EFI引导共存, 也就是EFI双系统的情况. 对比一下BIOS和EFI引导过程就可以看出, 在寻找引导文件时, BIOS只能读取硬盘的MBR扇区, 而EFI可以读取FAT格式的硬盘分区. 对于一块硬盘来说, MBR扇区只有一个, 而FAT格式的分区可以有很多, 所以BIOS多系统就只能对激活分区的BCD文件进行操作, 而EFI引导除此之外还可以通过添加多个EFI分区进行多系统的引导. 我所制作的U盘就是PE用一个EFI分区, Windows用一个EFI分区.

然后, EFI标准推荐的是EFI + GPT分区的形式, 对于GPT分区表的多个EFI分区, 无论是Mac还是Windows都可以直接识别出来, 而对于MBR分区表的多个EFI分区, Mac下可以正常识别, 而Windows和虚拟机下就无力了. 所以, 在Windows和虚拟机下, 可以在引导界面寻找U盘中Windows系统的引导文件, 即第三个分区中的/EFI/Microsoft/Boot/bootmgfw.efi, 添加其为新的引导就可以了. 可以手动寻找启动文件的位置, 也是EFI强于BIOS的一方面. 下面是我在虚拟机上手动添加U盘中Windows的EFI引导:

即然可以手动查找EFI文件进行引导, 那为什么还弄两个EFI分区?因为默认EFI引导时自动加载硬盘上第一个含EFI文件夹, 有的电脑对EFI可能支持不好, 不允许手动添加EFI文件, 两具EFI文件夹放入一个分区反而影响PE的正常引导. 而且, 在Mac上也不支持添加引导, 这样做这会导致在Mac上PE和Windows都无法进入.

对于U盘可能不同的人需求不一样, 写这一篇文章除了给自己备忘, 如果能给其他有差不多需求的人一点帮助就更好了~


emmmm, 上次更新服务器系统时忘了备份数据库, 再加上评论比较少, 暂时关闭评论功能