我的电脑是索尼 Vaio 笔记本电脑。我使用 Ubuntu 和 Win 8 进行双启动,但 Windows 不知何故设法删除了启动时选择操作系统的菜单。我认为 BIOS 是 UEFI。安全启动已被禁用,并且启动修复不知何故失败了。
我怎样才能解决这个问题?
答案1
索尼、惠普和许多笔记本电脑供应商都硬编码为仅启动 Windows。
有几种解决方法建议你将 grubgrubx64.efi
或shimx64.efi
文件移到 Windows 之上/EFI/windows/bootmgfw.efi
。但是,不建议这样做,因为 Windows 更新将恢复bootmgfw.efi
,你将回到仅启动窗口的状态。
相反,我建议重命名后备 /EFI/Boot/bootx64.efi 和启动硬盘条目或使用 rEFInd。
确保在进行更改之前备份整个 EFI 分区。
您有多种选择:
我。移动并重命名 grub 文件grubx64.efi
或shim64.efi
(为了安全启动)至此文件夹/文件/EFI/BOOT/BOOTX64.EFI
重命名 /efi/boot/bootx64.efi,将 shim 或 grub 复制到 /efi/boot 并将其命名为 bootx64.efi 然后启动硬盘驱动器条目。新版本的 Boot-Repair 会自动使用高级选项中的“使用标准 EFI 文件”执行此操作。它还会备份当前的 bootx64.efi,它可能只是 Windows .efi 启动文件的副本。
从实时安装程序在硬盘上安装 efi 分区:安装 efi 分区。检查哪个分区是带有启动标志的 FAT32。通常是 sda1 或 sda2,但会有所不同。
sudo mount /dev/sda1 /mnt
仅当不存在时,
sudo mkdir /mnt/EFI/Boot sudo cp /mnt/EFI/ubuntu/* /mnt/EFI/Boot
如果创建了新文件夹,则 bootx64.efi 将不存在,请跳过此命令
sudo mv /mnt/EFI/Boot/bootx64.efi /mnt/EFI/Boot/bootx64.efi.backup
使 grub 成为 UEFI 中的硬盘启动项。如果不存在,可能还必须使用 efibootmgr 更新 UEFI。
sudo mv /mnt/EFI/Boot/grubx64.efi /mnt/EFI/Boot/bootx64.efi
如果需要,添加新的 UEFI 硬盘启动项:另请参阅
man efibootmgr
如果 ESP 是 sda 或默认驱动器和分区条目:
sudo efibootmgr -c -L "UEFI Hard drive" -l "\EFI\Boot\bootx64.efi"
如果 ESP 不是 sda1,则 sdX 是驱动器,Y 是 efi 分区,也是 NVMe 驱动器:
sudo efibootmgr -c -g -w -L "UEFI hard drive" -l '\EFI\Boot\bootx64.efi' -d /dev/sdX -p Y sudo efibootmgr -c -L "UEFI hard drive" -l "\EFI\Boot\bootx64.efi" -d /dev/nvme0n1 -p 2
(这与 Boot-Repair 以前在二.现在不推荐:重命名 /efi/Microsoft/Boot/bootmgfw.efi 并将 grub 或 shim 复制到 /efi/Microsoft/Boot 并将其命名为 bootmgfw.efi 然后启动 Windows 条目以启动 grub 菜单。您必须手动添加 grub 菜单条目以启动重命名的 Windows efi 文件。Grub2 的 os-prober 条目启动 bootmgfw.efi 条目,该条目现在只是 grub,因此它将不起作用。
手动移动 efi 文件的用户请参阅帖子#6。
http://ubuntuforums.org/showthread.php?t=2101840
http://ubuntuforums.org/showthread.php?t=2219452
http://ubuntuforums.org/showthread.php?t=2221498&p=13012109#post13012109
二.如果您使用旧副本运行 Boot-Repair 的“有问题的 UEFI”修复程序,最好撤消它。然后进行上述更改以使用 bootx64.efi 要撤消并将文件重命名为原始名称,您只需勾选 Boot-Repair 的“恢复 EFI 备份”选项。
任何重命名(无论是手动重命名还是使用 Boot-Repair 重命名)都需要在 Windows 更新后重新进行,因为它将恢复 Windows 文件。
三编辑 Windows BCD,这是 Boot-Repair 重命名的替代方法之一,可使 shim 具有 Windows 名称。某些系统更适合从 Windows 内部注册 grub/shim - 对于那些不断将 Windows 重置为默认设置的系统。
Windows 8.1 Ubuntu 13.10 双启动时不显示 Grub
bcdedit /set {bootmgr} path \EFI\ubuntu\grubx64.efi
https://coderwall.com/p/vfyqkg
四如果描述必须是 Windows,则更改 UEFI 描述。这实际上只适用于只有 Ubuntu 且根本没有安装 Windows 的用户。
sudo efibootmgr -c -L "Windows Boot Manager" -l "\EFI\ubuntu\shimx64.efi"
恢复或新的 Windows UEFI 条目 - 假定默认 sda1,如果 sda2 则添加 -p 2(请参阅 man efibootmgr -d 驱动器和 -p 分区选项):
sudo efibootmgr -c -L "Windows Boot Manager" -l "\EFI\Microsoft\Boot\bootmgfw.efi"
sudo efibootmgr -c -L "Windows Boot Manager" -l "\EFI\Microsoft\Boot\bootmgfw.efi" -d /dev/nvme0n1 -p 1
五、有些人安装了 rEFInd,这似乎是另一种解决方法,并且具有漂亮的启动图标。
http://www.rodsbooks.com/refind/index.html
http://www.rodsbooks.com/refind/secureboot.html
PPA 可轻松在 Ubuntu 中安装
http://www.rodsbooks.com/refind/getting.html
六恢复 Ubuntu UEFI 条目 sdX 是驱动器,Y 是 efi 分区,例如 sda2
sudo efibootmgr -c -L ubuntu -l "\EFI\ubuntu\shimx64.efi" -d /dev/sda -p 1
sudo efibootmgr -c -L "Ubuntu" -l "\EFI\ubuntu\shimx64.efi" -d /dev/nvme0nX -p Y
七使用 efibootmgr 更改启动顺序:
八、卸载 UEFI 条目:
九您可以使用系统 UEFI/BIOS 设置键(通常为 F2,请查看手册)来更改启动顺序或其他 UEFI 设置,然后这些设置将出现在 UEFI 启动菜单中(通常为 F12):
答案2
这回答上面对我朋友的 HP Pavilion 不起作用,但我找到了一个不错的解决方法。似乎 HP 的固件总是BootOrder
在每次启动时覆盖并首先设置 Windows,但它仍然尊重BootNext
。所以我编写了一个启动脚本,在每次启动时进行设置BootNext
。
跑步
efibootmgr
查找 的数字代码
BootCurrent
。我朋友的情况是0003
。/etc/systemd/system/boot-linux-next.service
:[Unit] Description=Boot Linux next [Service] Type=oneshot # Replace '3' in the next line with the appropriate code. ExecStart=efibootmgr --bootnext 3 [Install] WantedBy=multi-user.target
跑步
systemctl enable --now boot-linux-next.service
这确实意味着如果您启动其他程序,您将必须在下次启动时手动选择 Linux。
答案3
我的 Acer 电脑也存在同样的问题。我的解决方案是“重启”Windows,而不是关机(这实际上只是休眠)。
通过重新启动(这可能会触发更新),系统将关闭,然后您可以从 BIOS 中选择启动。您必须在重新启动之前捕获它。
我很少使用 Windows,因此以这种方式启动根本不会困扰我。当然,除非 Windows 更新。