看文章前啥都别说,先一起大喊:巨硬,巨硬,真**的硬

本文同步发在我的知乎上

锦心的电脑上已经安装了Windows 10 [1st], Ubnntu[2nd], Phoenix OS[3rd], 突发奇想决定安装一个VHD Windows8.1,本文纯属记录如何用VHD安装Windows以及拿Grub引导两个Windows系统的过程以及巨硬留下的天坑

教程同样适用于只有单系统的情况。

数据无价,谨慎操作

材料准备

(标*的是必须准备的)

  • [*] Windows 8或更高版本(得有挂载VHD和ISO的功能)
  • [*] Windows 8.1 ISO文件 (或光盘)
  • Linux系统如Ubuntu
  • GParted(Linux软件)

VHD 安装 Windows 8.1

创建VHD

打开Powershell(管理员),键入diskpart命令进入diskpart:

1
PS C:\WINDOWS\system32> diskpart

使用cre命令创建一个vhd文件,名称自选
其中,maximum是vhd的大小(单位:MB)。创建后VHD为固定大小,因此用时较久

1
2
3
4
5
6
7

DISKPART> cre vdi file="D:\vhds\win8.vhd" maximum=51200

100 百分比已完成

DiskPart 已成功创建虚拟磁盘文件。

连接虚拟磁盘文件,格式化,并分配驱动器号。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
DISKPART> attach

Microsoft DiskPart 版本 10.0.18362.1

VDISK - 连接虚拟磁盘文件。

DISKPART> attach vdi

100 百分比已完成

DiskPart 已成功连接虚拟磁盘文件。

DISKPART> cre par pri

DiskPart 成功地创建了指定分区。

DISKPART> for quick fs=ntfs

100 百分比已完成

DiskPart 成功格式化该卷。

DISKPART> ass

DiskPart 成功地分配了驱动器号或装载点。

DISKPART> exit

退出 DiskPart...

安装Windows 8.1

首先把你的Windows安装ISO挂载。如果你是Win8以上直接双击即可。
这里ISO被挂载在了E盘。

1
2
3

PS C:\WINDOWS\system32>E:
PS E:\> cd sources

使用dism获取install.wim的信息

1
2
3
4
5
6
7
8
9
10
11
12
13
PS E:\sources> dism /get-wiminfo /wimfile:install.wim

部署映像服务和管理工具
版本: 10.0.18362.900

映像的详细信息: install.wim

索引: 1
名称: Windows 8.1 专业版
描述: Windows 8.1 专业版
大小: 12,855,928,858 个字节

操作成功完成。

安装Windows 8.1
其中applydir是你的VHD挂载的盘符(这里是F), index是你要安装的系统所处于install.wim的索引。

1
2
3
4
5
6
7
8
PS E:\sources> dism /apply-image /imagefile:install.wim /index:1 /applydir:F:

部署映像服务和管理工具
版本: 10.0.18362.900

正在应用映像
[==========================100.0%==========================]
操作成功完成。

等待,完成后,键入:

1
2
PS E:\sources> bcdboot f:\windows -l zh-cn
已成功创建启动文件

到此,Windows下的双系统安装宣告完毕,可以重启进入Windows8进行安装了。

注意bcdboot会默认把Windows 8.1作为默认系统,完成安装步骤时还好,要是对此不满了,请win+R运行msconfig把默认OS变为Windows 10

如果看到这里的你没有安装Linux系统,可以直接关闭网页走入了。

Linux修复引导

嗯,在此之前的微软还是那个体贴的微软,安装非常方便,然而要是你安装了Linux,巨硬的硬才刚刚开始

重启,熟悉的Windows启动画面出现……Grub引导又没了。

恢复Grub引导

巨硬:用了我家的Windows你就是我家的人了,必须得用Windows Boot Manager启动,Grub滚远点!

进入BIOS,改启动顺序,把Windows Boot Manager调到后面,把ubuntu的Grub改回前面。重启,出现Grub引导界面,OK。

要是没有……请自行百度“ubuntu引导修复

优化Windows Boot Manager

现在出现了一个问题:你用上了Grub,Grub里只有一个Windows Boot Manager, 巨硬又非常贴心地在Windows Boot Manager里自动启动默认系统,启动第二系统需要重启:于是你想启动被放置在非默认系统位置的Windows 8.1需要:

开机 -> Grub选Windows Boot Manager -> 启动默认系统后选择启动Windows 8.1 -> 重启- > Grub再选Windows Boot Manager

我就想开个机您整出3遍选择菜单也太过分了吧?

分离bootmgfw

(以下步骤请确保已经安装完成Windows 8.1)

进入Ubuntu

开启GParted,随意分一个大小260MiB(和你原有的EFI分区一样大就好),格式化为fat32,右键点击管理标识为boot

这里锦心原有的EFI分区为/dev/sda1,新的分区为/dev/sda7,lhcfl是锦心的linux用户名,请自行替换

挂载EFI分区和你的新分区EFI2:

1
2
3
4
lhcfl@lhcfl-Ubuntu-PC:~$ sudo mkdir /media/lhcfl/EFI
lhcfl@lhcfl-Ubuntu-PC:~$ sudo mkdir /media/lhcfl/EFI2
lhcfl@lhcfl-Ubuntu-PC:~$ sudo mount /dev/sda1 /media/lhcfl/EFI
lhcfl@lhcfl-Ubuntu-PC:~$ sudo mount /dev/sda7 /media/lhcfl/EFI2

把EFI分区里的EFI/Microsoft/Boot文件夹保留原格式整个复制到EFI2里。

1
2
3
lhcfl@lhcfl-Ubuntu-PC:~$ sudo mkdir /media/lhcfl/EFI2/EFI
lhcfl@lhcfl-Ubuntu-PC:~$ sudo mkdir /media/lhcfl/EFI2/EFI/Microsoft
lhcfl@lhcfl-Ubuntu-PC:~$ sudo cp -r /media/lhcfl/EFI/EFI/Microsoft/Boot /media/lhcfl/EFI2/EFI/Microsoft/Boot

现在你拥有了两份Windows Boot Manager

更改grub

首先,umonut掉两个EFI分区

1
2
lhcfl@lhcfl-Ubuntu-PC:~$ sudo umount /dev/sda1
lhcfl@lhcfl-Ubuntu-PC:~$ sudo umount /dev/sda7

然后,更新grub

1
lhcfl@lhcfl-Ubuntu-PC:~$ sudo update-grub

不出所料的话,你将拥有两个Windows Boot Manager:

1
2
Windows Boot Manager (on /dev/sda1)
Windows Boot Manager (on /dev/sda7)

在/boot/grub/grub.cfg里,找到形如这样的内容:

1
2
3
4
5
6
7
8
9
10
11
menuentry 'Windows Boot Manager (on /dev/sda1)' --class windows --class os $menuentry_id_option 'osprober-efi-48AC-0E64' {
insmod part_gpt
insmod fat
set root='hd0,gpt1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt1 --hint-efi=hd0,gpt1 --hint-baremetal=ahci0,gpt1 48AC-0E64
else
search --no-floppy --fs-uuid --set=root 48AC-0E64
fi
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

使用sudo身份强制编辑,把两个Windows Boot Manager换成你想要的名字,如

1
2
Windows 10
Windows 8.1 (VHD)

重启,进入Grub界面,进入你的主Windows系统

win+R运行msconfig,在OS中删掉另一个系统。关机。

巨硬这时候就体现了她·无·微·不·至·的关怀,如果你直接重启,恭喜你grub又没了……

进BIOS把被巨硬放上第一的Windows Boot Manager调到下面。重启。进入另一个系统。

对于下面所有的操作,进入的时候记得时刻关注可能弹出的"即将进行磁盘扫描,x秒内按任意键取消",并以你最快的速度按任意键取消掉。

你可能因为巨硬的关·怀而多次进入错误的系统,请关机然后进BIOS把不听话的Windows Boot Manager调下去。总之,进入Windows 10就把Windows 8.1的启动项删掉,进入Windows 8.1就把Windows 10的启动项删掉。如果误删了,用bcdboot把引导重建。然后……总是可以调好的……

后继

秀一波我的桌面

Windows 8.1

Windows 7

Ubuntu 20.04

Phoenix OS

Windows XP

装巨硬的系统总是让我有种不知道是在装巨硬的系统还是被巨硬的系统装的感觉……

本文作者锦心,转载请注明出处。