我曾尝试在我的计算机上安装 ElementaryOS,但却意外地擦除了我的启动分区。
我已经成功安装了 Elementary OS(0.6 Odin,尽管这并不重要)。现在,我的 grub 只显示 Elementary,我无法进入 Windows。
我尝试过以下过程(os-prober
没有做任何有用的事情):
运行parted -l
结果如下:
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 473MB 472MB ntfs Basic data partition hidden, diag
3 577MB 593MB 16.8MB Microsoft reserved partition msftres
4 593MB 157GB 157GB ntfs Basic data partition msftdata
5 157GB 158GB 541MB ntfs hidden, diag
2 158GB 158GB 294MB fat32 NO NAME boot, esp
6 158GB 250GB 91.9GB ext4 elementary OS
我知道那sda2
是我创建的新启动分区。sda4
是 Windows 10 的分区吗?sda5
是恢复分区吗?(我真的不确定)。
我尝试通过添加以下行将sda5
和添加到我的 GRUB 中:sda4
/etc/grub.d/40_custom
#!/bin/sh
exec tail -n +3 $0
menuentry "Windows 10 Recovery" --class windows --class os {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos4)'
search --no-floppy --fs-uuid --set=root EE92464E92461C09
chainloader +1
}
menuentry "Windows 10" --class windows --class os {
insmod part_msdos
insmod ntfs
set root='(hd0,msdos4)'
search --no-floppy --fs-uuid --set=root 28981AAB981A7790
chainloader +1
}
使用后:
> sudo blkid /dev/sda4
/dev/sda4: UUID="28981AAB981A7790" TYPE="ntfs" PARTLABEL="Basic data partition" PARTUUID="09b51487-4e98-458a-9a50-0a4470e4f844"
> sudo blkid /dev/sda5
/dev/sda5: UUID="EE92464E92461C09" TYPE="ntfs" PARTUUID="6805dc0a-c750-4ef6-a06d-f41ad4ab3f2a"
当然,我跑了sudo update-grub
。
然而,我得到了一个错误:“无效的 EFI 文件路径”当尝试从这些新条目启动时。
另外,安装新的启动分区并运行ls
会产生以下结果:
EFI
-> BOOT
-> ubuntu
意思是,我没有 Windows(和 Windows 恢复)启动项。
我真的不想重新安装我的 Windows 和 Elementary。但是我不知道如何解决这个问题。
答案1
+1
要求“chainloader”命令加载分区的第一个扇区。但是您的计算机使用 EFI 固件——它不使用引导扇区,因此“+1”根本没有任何用处。相反,“chainloader”命令的参数必须是包含*.efi
引导加载程序的可执行文件的路径。
Windows 始终将其引导加载程序安装在\EFI\Microsoft\Boot\bootmgfw.efi
(相对于 EFI 系统分区的根目录,不是主 Windows 分区,因此您也不应该使用“set root”)。
(“part_msdos”位也是不正确的,因为你的磁盘有一个 GPT 分区表。基本上全部的自定义菜单项特定于 BIOS 系统,不适用于您的 EFI 机器。)
由于您已经删除了旧分区 - 从 Windows 安装 CD(或 USB 记忆棒)启动,按 Shift+F10 打开控制台窗口,然后使用命令bcdboot c:\windows
重新安装 Windows 引导加载程序 - 它将复制所有必要的文件,重建“BCD”配置文件,并添加 EFI 启动条目。
(如果使用 Rufus 创建 Windows USB 记忆棒,请确保选择 UEFI 模式,因为它只能执行其中一种。)