我们有时候希望不同的任务场景在不同的操作系统环境下进行,需要在一个机器或者某个硬盘上安装多个不同的操作系统。
Grub2是一个多系统引导软件,现在大多数Linux默认的系统引导软件就是Grub2,可在Index of /gnu/grub(
https://ftp.gnu.org/gnu/grub/)下载最新版的grub2,目前最新版的是grub-2.06-for-windows.zip,压缩包大小是12M。安装前先下载并解压到c:盘中。
硬盘分区直接使用windows自带的diskpart完成,不使用第三方的分区软件。安装的多个Windows的启动是通过Windows的引导器引导,即把各分区的Windows统一一个入口,不改变\efi\microsoft\boot\的位置和名称。Grub启动后,直接使用链式引导,将控制交给Windows的引导器。好处是可以关机正常。
一、硬盘分区
2T的硬盘,选择GPT硬盘格式,分区表类型为GUID,包含一个ESP和MSR保留分区,其中ESP分区大小为800M,盘符为B:。
做一个自动批处理文件Disk2t.txt,用 diskpart /s .\disk2t.txt来自动执行。
注意运行前要用diskpart检查一下,要分区的硬盘是不是disk 1!!!还有检查一下盘符b和D到L是不是空着。
Disk2t.txt的内容如下:
REM 运行这个批处理文件前一定要用diskpart的list disk检查一下是不是disk 1!!!!
List disk
Select disk 1
List partition
Clean
Select disk 1
Convert gpt
REM 建esp分区的同时会建一个15mb的保留分区,所以esp分区是分区2
Create partition efi size=800
format fs=fat32 label=”esp” quick
assign letter=b
create partition primary size=102400
assign letter=d
format fs=ntfs label=”oos01″ quick
create partition primary size=102400
assign letter=e
format fs=ntfs label=”oos02″ quick
create partition primary size=102400
assign letter=f
format fs=ntfs label=”oos03″ quick
create partition primary size=102400
assign letter=g
format fs=ntfs label=”oos04″ quick
create partition primary size=102400
assign letter=h
format fs=ntfs label=”oos05″ quick
create partition primary size=102400
assign letter=i
format fs=ntfs label=”oos06″ quick
create partition primary size=102400
assign letter=j
format fs=ntfs label=”oos07″ quick
create partition primary size=500000
assign letter=k
format fs=ntfs label=”dda01″ quick
create partition primary size=500000
assign letter=l
format fs=exfat label=”dda02″ quick
List part
exit
分区后还有185GB的空间没有分区。
另外再建两个diskpart的批处理文件,addB.txt和removeB.txt方便添加和移除esp盘符b:。
二、安装grub2
在esp分区中,有grub和efi子目录,grub的目录里面有grub的模块、字体、主题等文件,grub.cfg配置文件也放在这个目录下;efi的目录里存放各种操作系统的引导文件,Boot下放grub的启动文件bootx64.efi,还有Windows管理器生成的\efi\microsoft\boot\下的Windows启动文件bootmgfw.efi。Windows安装时会把bootx64.efi替换成bootmgfw.efi的内容。
- 用diskpart /s .\addB.txt添加esp的盘符b:
list disk
sele disk 1
sele part 2
assign letter=b
exit
2、cd到grub-2.06-for-windows的安装目录中,用命令wmic diskdrive list brief检查一下要安装的磁盘是不是\\.\PHYSICALDRIVE1。
3、然后运行grub-install.exe –target=x86_64-efi –efi-directory=b: –boot-directory=b: \\.\PHYSICALDRIVE1 –removable,在 EFI 下会生成 boot 目录,目录下有一个文件bootx64.efi。
4、将配置好的grub启动配置文件grubok.cfg拷贝到b:\grub中。copy .\grubok.cfg b:\grub\grub.cfg
5、用diskpart /s .\removeB.txt删除esp的盘符b:。
list disk
sele disk 1
sele part 2
remove letter=b
exit
三、安装Windows
- 挂载Windows的iso文件到x:。
Windows10,在微软官网下载制作创建安装介质(USB 闪存驱动器或 DVD、ISO文件)工具MediaCreationTool21H2.exe。打开后创建一个iso文件。将ISO文件挂载成光驱X,找到里面的文件source\install.esd或source\install.wim。
Windows11,在官网可以直接下载ios镜像文件,选择Windows11(multi-edition ISO),找到里面的文件source\install.esd或source\install.wim。
- 检查一下ESP的分区盘符B:可用。检查一下ios文件挂载的盘符是不是X:。运行
DISM.exe /Get-ImageInfo /ImageFile:X:\sources\install.esd,看一下要安装的版本序号。
3、管理员权限cmd,运行DISM.exe /Apply-Image /ImageFile:X:\sources\install.esd /Index:4 /ApplyDir:D:将X:\sources\install.esd解压到要存放操作系统的oos分区D盘里。做了一个批处理文件addiso.bat。一次可以将windows10和windows11加载到d:-h:的5个盘中。
rem add windows10 and windows11 iso file to d:-h: 5 diskpart
rem first should put windows10 iso to cd-rom M:,put windows11 iso to cd-rom N:
rem d:\e:\i: is windows10, f:\h: is windows11
DISM.exe /Apply-Image /ImageFile:M:\sources\install.esd /Index:4 /ApplyDir:d:
DISM.exe /Apply-Image /ImageFile:M:\sources\install.esd /Index:4 /ApplyDir:e:
DISM.exe /Apply-Image /ImageFile:N:\sources\install.esd /Index:4 /ApplyDir:f:
DISM.exe /Apply-Image /ImageFile:N:\sources\install.esd /Index:4 /ApplyDir:g:
DISM.exe /Apply-Image /ImageFile:M:\sources\install.esd /Index:4 /ApplyDir:h:
4、运行diskpart /s .\addb.txt,给esp添加盘符b:。再运行bcdboot.exe D:\Windows /s B:。在B:盘中生成Windows的UEFI引导文件Bootmgfw.efi,告诉电脑真正的系统在D:\Windows里面,还会修改d:盘bcd文件,保存相应的信息。最后运行diskpart /s .\removeb.txt,给esp移去盘符b:。做了一个批处理文件addbcd.bat来完成这些工作。
rem add d:/e:/f:/g:/h: bcd to esp b:
diskpart /s .\addb.txt
bcdboot.exe D:\Windows /s B:
bcdboot.exe E:\Windows /s B:
bcdboot.exe F:\Windows /s B:
bcdboot.exe G:\Windows /s B:
bcdboot.exe H:\Windows /s B:
diskpart /s .\removeb.txt
5、参照上述操作安装其他的Windows系统。
四、安装Linux等其他系统(待续)