虽然linux系统以及生态逐步完善,但Windows上的Office等办公软件还是无可替代
作为fedora的骨灰级爱好者,每次版本更新,都会体验其中,但不幸的事情发生了,这次升级到fedora28之后,发现grub2启动项里面的Windows 10选项没有了,于是乎开始了系统的捣鼓,windows10恢复之路正式开始。
现在的 Windows 10 大多是在 UEFI 模式下安装的,安装时会自动创建一个 EFI 系统分区(ESP)
首先,进入fedora28系统,使用root用户登录,查看/boot/efi分区里面是否有bootmgfw.efi文件:
find /boot -name bootmgfw.efi
(1)如果存在,引导文件一般位于路径( /boot/efi/EFI/Microsoft/Boot/bootmgfw.efi ),可以尝试使用grub2-mkconfig来修复引导:
grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfg
(2)如果没有,说明Window 10引导已经被破坏,需要找到引导信息;
如果知道Windows分区是哪个,可以使用mount命令加载后,进行查找,看看是否有引导文件bootmgfw.efi
mount /dev/sda1 /mnt
find /mnt -name bootmgfw.efi
(1)如果存在,引导文件位于路径(/EFI/Microsoft/Boot/bootmgfw.efi),需要在/boot/efi/EFI/centos/grub.cfg文件中手工添加:
menuentry 'Windows 10 (loader) (on /dev/nvme0n1p3)' --class windows --class os $menuentry_id_option 'osprober-chain-F1FAC47EFAC44328' {
insmod part_msdos
insmod part_gpt
insmod ntfs
set root='(hd0,gpt3)'
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}
里面的UUID是如何得到呢?通过在linux中root执行命令 blkid 获得;
root的对应值是如何知晓的呢?是根据在grub2选项中目录查找得来,具体操作是,重启电脑,进入grub2启动选项,按"c"进行命令项:
ls
ls (hd0,gpt3)
根据当时划分的情况,知道Windows安装在哪个GPT分区,并进入看看目录是否正常:
set root=(hd0,gpt3)
ls /
(2)如果没有,说明Window10引导彻底损坏,需要修复;
Window10引导修复,需要用到Windows 10安装盘,可以使用光盘或U盘引导进行Windows安装,选择Windows修复,并进入命令提示符(或在安装界面按 Shift + F10 启动命令行),使用 diskpart 给 ESP 分配一个盘符,然后用 bcdboot 修复启动文件并添加 Windows Boot Manager 到 Boot Menu。(ESP 是 FAT32 文件系统,大小数百 MB 的那个 volume)
diskpart
list disk
select disk 0
list volume
select volume 5
assign letter=H:
exit
bootrec /fixmbr
bootrec /fixboot
bcdboot C:\Windows /l zh-cn /s H: /f ALL
这样子有个坏处,就是把fedora28的启动项弄丢了,又需要修复fedora28启动,建议的方式在windows区建立引导项,然后通过把引导文件添加到grub2的引导文件即可,命令如下:
bootrec /fixmbr
bootrec /fixboot
bcdboot C:\Windows /f UEFI /s C: /l zh-cn
这样会在windows分区下,生成了引导文件(/EFI/Microsoft/Boot/bootmgfw.efi),然后按照上面的方式,添加到grub.cfg即可。
注意:在fedora32之后,需要将在C盘生成的/EFI/Microsoft目录拷贝到fedora系统上的/boot/efi/EFI目录下,并通过命令
grub2-mkconfig -o /boot/grub2/grub.cfg