我在东芝 Portege Z935 上安装了 Win 8 和 Ubuntu 12.04,它们和平共处。EFI 模式、Grub2、安全启动关闭,在安装原始 Ubuntu 后,必须使用 Boot-Repair 工具上的“推荐修复”才能启动。大约 10 个月后,一切都很顺利,直到……
我愚蠢地接受了微软的建议,将 Windows 更新到 8.1。升级后,每次启动都会出现“grub rescue>”提示。每次启动时,我都能够采取冗长的方法回到 grub 菜单,但希望修复它。
因此,我开始反复摆弄 Boot-Repair,直到盒子根本无法启动(只是出现黑屏并显示“插入带有命令文件的磁盘”或类似内容)。
尝试重新安装 Win 8,升级到 8.1,然后重新安装 Ubuntu。结果相同 - 根本无法启动。尝试重新安装 8 而不升级到 8.1,结果相同。尝试仅安装 Ubuntu。结果相同。
最后,将盒子从 UEFI 设置为 CSM,再次安装 Ubuntu。现在它启动了!所以,我猜 UEFI 以某种方式被上述一个或多个操作控制在“固件”中。
如何修复?我没有主意了,我想恢复 EFI。谢谢!!!
答案1
更新:我现在已经更新了脚本
我创建了一个脚本来帮助用户启动 Windows 8.1 和 Linux。恐怕这不是 Linux 脚本,但我确信您可以在 Linux 中做类似的事情……
此脚本将更改 S:\ 分区中的某些内容。您需要以管理员身份运行它。
请注意,在此示例中,我使用的是 SuSE 12.1,并且我在“主”硬盘上使用两个单独的硬盘,其中装有 Windows 8.1。这也是为 HP 机器设计的,但是 HP 目录并不那么重要,因此您只需将“HP”更改为 S:\ 分区中的任何其他目录即可。我目前拥有的只有
S:\EFI S:\Boot.old
您需要下载并解压 REFind,并确保已将 REFINDSOURCEPATH 设置到其所在位置。
除非您知道自己在做什么,否则请不要这样做!
::Setup Refind script version 04/01
echo off
CHOICE /C YN /M "Have you already attempted copy of files since last losing the boot manager? Y/N"
IF %ERRORLEVEL% EQU 1 SET _FIRSTRUN=Yes
IF %ERRORLEVEL% EQU 2 SET _FIRSTRUN=No
echo on
::Mount partition
mountvol S: /S
::Set paths
::You might want to modify these for your system?
set REFINDSOURCEPATH=C:\refind-bin-0.7.4\refind
set REFINDSPATH=S:\EFI\refind
set SBOOTPATH=S:\EFI\Boot
set REFINDCONFIG=C:\refind.conf
::Rename refind directory if it's already present
rename %REFINDSPATH% refind.old
::Copy to S:\ assuming refind is located at %REFINDSOURCEPATH%
IF "%_FIRSTRUN%" == "Yes" (
echo a | xcopy /E %REFINDSOURCEPATH% %REFINDSPATH%
)
IF "%_FIRSTRUN%" == "No" (
echo d | xcopy /E %REFINDSOURCEPATH% %REFINDSPATH%
)
::Rename old boot HP files - we don't need the HP directory!
rename S:\EFI\HP HP.old
::Rename boot directory - we will recreate this ourselves below
rename %SBOOTPATH% Boot.old
::Stop this file from being detected/set as default boot - this can still be detected by Windows otherwise.
rename S:\EFI\Boot.old\bootx64.efi bootx64.efi.old
::Recreate the boot directory
mkdir %SBOOTPATH%
::Put refind into the boot directory
IF "%_FIRSTRUN%" == "Yes" (
echo a | xcopy /E %REFINDSOURCEPATH% %SBOOTPATH%
)
IF "%_FIRSTRUN%" == "No" (
echo d | xcopy /E %REFINDSOURCEPATH% %SBOOTPATH%
)
::Rename/overwrite the file so it will always boot refind
rename %SBOOTPATH%\refind_x64.efi bootx64.efi
::This is a dirty hack to stop Microsoft finding their EFI file and setting as default boot
IF "%_FIRSTRUN%" == "Yes" (
copy S:\EFI\Microsoft\boot\bootmgfw.efi S:\EFI\Microsoft\boot\bootmgfw.efiold
rename S:\EFI\Microsoft\boot\bootmgfw.efi bootmgfw_.efi
)
::This is a dirty hack to stop Microsoft finding their EFI file and setting as default boot
IF "%_FIRSTRUN%" == "No" (
::I'm assuming we don't have to do anything different at this point. Error may be thrown but should not cause issues.
copy S:\EFI\Microsoft\boot\bootmgfw.efi S:\EFI\Microsoft\boot\bootmgfw.efiold
rename S:\EFI\Microsoft\boot\bootmgfw.efi bootmgfw_.efi
)
::Copy the config file.
copy /Y %REFINDCONFIG% %REFINDSPATH%\refind.conf
::Set the boot manager (doesn't always work)
bcdedit /set {bootmgr} path \EFI\refind\refind_x64.efi
echo off
pause
CHOICE /C YN /M "Press Y to destroy the S:\EFI\Boot.old directory"
IF %ERRORLEVEL% EQU 1 SET _BOOT=Yes
CHOICE /C YN /M "Press Y to destroy the S:\EFI\refind.old directory"
IF %ERRORLEVEL% EQU 1 SET SET _REFIND=Yes
CHOICE /C YN /M "Press Y to destroy the S:\EFI\HP.old directory"
IF %ERRORLEVEL% EQU 1 SET _HP=Yes
IF "%_BOOT%" == "Yes" (
::Remove the path below
rmdir /s S:\EFI\Boot.old
echo "Removing path"
)
IF "%_REFIND%" == "Yes" (
::Remove the path below
rmdir /s S:\EFI\refind.old
echo "Removing path"
)
IF "%_HP%" == "Yes" (
::Remove the path below
rmdir /s S:\EFI\HP.old
echo "Removing path"
)
pause
echo "Pressing a key will restart immediately"
pause
::Restart
shutdown /r /t 0
当启用 EFI 时我会收到一条警告消息,因此如果您启用了 EFI,您需要做的就是从配置文件中删除单词“hdbios”。
另一个重要的部分是您的配置文件。如您所见,我的配置文件位于 C:\refind.conf - 这可能不是放置它最明智的地方,但至少您知道如果您不小心删除了其他任何内容,它也不会被删除。
我的配置如下,但我建议您按照上面的文档正确配置您的配置。您可以看到我在配置文件中使用了重命名的 EFI/Microsoft/boot/bootmgfw_.efi。
timeout 20
hideui singleuser
#hideui all
#icons_dir myicons
use_graphics_for windows
showtools reboot, exit
scanfor internal,external,optical,hdbios,manual
dont_scan_volumes ROOT BOOT
dont_scan_dirs EFI/Boot, Boot
#scan_all_linux_kernels
#also_scan_dirs EFI/Microsoft/boot, Microsoft/boot
menuentry Windows8 {
loader EFI/Microsoft/boot/bootmgfw_.efi
icon EFI/refind/icons/os_win.icns
}
menuentry SuSE {
icon EFI/refind/icons/os_linux.icns
volume BOOT
loader \vmlinuz
initrd \initrd
options "video=1600x900 splash=silent quiet showopts vga=0x37f root=UUID=201bb438-10b4-49aa-ac1c-4c7d52ad66a0
splash=silent quiet showopts"
}
menuentry SuSERoot {
icon EFI/refind/icons/os_linux.icns
volume ROOT
loader /boot/vmlinuz-3.4.11-2.16-desktop
initrd /boot/initrd-3.4.11-2.16-desktop
options "video=1600x900 splash=silent quiet showopts vga=0x37f root=UUID=201bb438-10b4-49aa-ac1c-4c7d52ad66a0
splash=silent quiet showopts"
disabled
}
答案2
尝试这个:
- 下载 USB 闪存盘或 CD-R 版本的重新索引。
- 准备一个带有 rEFInd 的 USB 闪存驱动器或 CD-R。
- 从 rEFInd 磁盘启动。(您可能需要禁用 CSM 支持才能执行此操作。)
- 如果 rEFInd 启动,请测试其启动 Windows 和 Linux 的能力。
- 如果你可以同时启动 Windows 和 Linux,请检查以确保你的EFI 系统分区 (ESP)安装在
/boot/efi
并安装 Debian 软件包版本的 rEFInd。
理论上,此时您的计算机应该可以启动到 rEFInd,这样您就可以启动 Windows 或 Linux。如果这不起作用,请发布 Boot Repair 提供的 URL;它将为我们提供关键的系统特定信息。
将来,请注意操作系统升级通常会更改默认的 EFI 引导加载程序。您可以使用操作系统特定的工具(例如bcdedit
在 Windows 或efibootmgr
Linux 中)在每个操作系统中更改此设置;但您必须知道如何使用这些工具。rEFInd 安装文档描述了如何使用这些工具来注册 rEFInd。其他引导加载程序的流程类似。
答案3
首先尝试一下
在 Win 8.1 中,按住 SHIFT 并单击“重新启动”。它将显示“高级启动选项”。您应该能够从那里选择您的 Ubuntu 启动分区,然后启动它。
省去了重新安装的麻烦,但是必须让 Windows 加载 Ubuntu……