成功更新我的 BIOS 后,出了些问题最后,黑屏左上角出现了一个闪烁的光标。没有错误,什么都没有。BIOS 现在只列出了一个SATA: <disc name>
启动选项,而不是通常的 UEFIubuntu
选项。我使用的是 GPT 分区方案。
我最终发现,可行的解决方案是正确重新安装grub-efi-amd64
。那么,我该怎么做呢?
附言:实际上,我成功地自行重新安装了 GRUB2 EFI,并且将在这里发布我的答案,因为我无法找到任何完整的操作方法。
答案1
使用实时 USB/CD 启动计算机在 UEFI 模式下。我有两个启动选项
<flash_drive>
和UEFI: <flash_drive>
,第二个选项用于公开 efi 变量,以便/sys/firmware/efi/
以后efibootmgr
不会失败。使用第一个选项启动时出现以下错误:Fatal: Couldn't open either sysfs or procfs directories for accessing EFI variables. Try 'modprobe efivars' as root.
modprobe efivars
对我没用。chroot 进入损坏的系统(类似于ubuntu grub2 帮助但具有 efi 特性):
sudo mount /dev/sda2 /mnt #sda2 is the root partition sudo mount /dev/sda1 /mnt/boot/efi #sda1 is the efi partition for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; done sudo cp /etc/resolv.conf /mnt/etc/ #makes the network available after chrooting modprobe efivars # make sure this is loaded sudo chroot /mnt
根据您的 Linux 发行版,您现在可以执行不同的事情。
为了Ubuntu/Debian:
apt-get install --reinstall grub-efi-amd64
或者:
apt-get install --reinstall grub-efi update-grub
上面应该给你一个 grub,但不是可启动的
为了Fedora(最多 16 个,可能适用于其他人):
yum reinstall grub-efi
在以下命令中,您必须将 sdX 替换为具有要从中启动的 EFI 分区的设备。您
--part Y
必须将 替换Y
为 EFI 分区的编号(如/dev/sdXY
)。efibootmgr -c --disk /dev/sdX --part Y efibootmgr -v # verify a new record called Linux is there
现在输入Ctrl+D退出 chroot,卸载所有内容并重新启动:
for i in /sys /proc /dev/pts /dev; do sudo umount /mnt$i; done sudo umount /mnt/boot/efi #please do this. Corrupted efi partitions are not nice sudo umount /mnt sudo reboot
您可能需要根据您的需要进行调整(不同的分区表、单独的 /boot 分区等),它可能不是唯一的选择,但对我来说效果很好。
一个适合修复事物的实时系统是格鲁姆。还有一个详尽的指南关于如何设置可启动 USB 设备,其中 Mac 部分实际上是最有用的(只需创建一个 FAT32 分区,复制文件,重新启动,完成)。
答案2
作为第一种方法的潜在简化,可以直接在硬盘上启动系统,仅使用 live CD 的 grub。使用 xubuntu 13.10 live CD 在 xubuntu 13.10 上进行了测试。
确保 BIOS 中的安全启动已禁用。插入实时 CD 并通过 UEFI 启动。将显示 CD 的 GRUB 菜单。按“c”进入命令行。
configfile (hd0,gpt1)/EFI/ubuntu/grub.cfg
如果您有不同的 EFI 系统分区,请调整上面的 grub 命令。
在您的系统从硬盘启动后,只需在 EFI 系统分区上重新安装 grub 并通过 grub-install 将其注册到固件中即可。
sudo grub-install
答案3
与 Maxine 一样,我发现 BIOS 中的 UEFI 设置被损坏,我的机器无法启动。
就我而言,这是一台搭载 Linux Mint Debian 的联想 ThinkServer RD430,看起来任何事物我会更新 grub 或更改服务器中的任何硬盘驱动器,因为这会导致它无法启动。我的情况是操作系统是通过 USB 安装的 linuxmint-201403-mate-dvd-64bit。(有关会导致 UEFI 无法工作的事件的完整描述,请参阅下文)
在 ThinkServer TS140 上执行完全相同的步骤,UEFI 一次也没有失灵。查看了 RD430 驱动程序页面,我的 BIOS 是两个旧版本。我以前从未更新过主板上的 BIOS,因此当有新版本可用时,我不会自动更新。更新 BIOS 后,Maxine 的上述答案起作用了,只是有点不同...
# efibootmgr -c --disk /dev/sdX --part Y
# efibootmgr -v
BootCurrent: 0004
Timeout: 1 seconds
BootOrder: 0002,0000,0003,0001,0004
Boot0000* linuxmint HD(1,800,1f4000,829f6cc9-5b17-479c-b3ea-61e43faecbf7)File(\EFI\linuxmint\grubx64.efi)
Boot0001* LMDE Linux Mint Debian HD(1,800,15d505800,934c598c-fe3c-fd43-84a1-fa38e4f72552)File(\EFI\linuxmint\grubx64.efi)
Boot0002* Linux HD(1,800,1f4000,829f6cc9-5b17-479c-b3ea-61e43faecbf7)File(\elilo.efi)
Boot0003* UEFI: Built-in EFI Shell Vendor(5023b95c-db26-429b-a648-bd47664c8012,)AMBO
Boot0004* UEFI: VerbatimSTORE N GO 1.00 ACPI(a0341d0,0)PCI(1a,0)USB(1,0)USB(4,0)HD(1,80,1d70780,00000000)AMBO
mint / #
该efibootmgr -c
命令添加了两个条目0000
,并且0002
!按启动顺序第一个
条目Boot0002* Linux HD
是不正确的。
入口0000
是正确的。
为了测试这一点,我尝试不间断地启动,即0002
进入。正如预期的那样,它没有工作。所以我重新启动了服务器,按下 F12,然后选择linuxmint
。正如所希望的那样,它确实启动了我的 LMDE 安装。
通过 efibootmgr 删除不需要的条目的方法是:
# efibootmgr -b 2 -B
我使用此命令删除条目0001
和0002
。该选项0001
是我最后一次尝试恢复操作系统。
UEFI 注意事项
如果你正在阅读这篇文章,并且和我一样对 UEFI 感到沮丧,这里有一些说明和资源:
» 引导到 UEFI Shell 类似于使用 DOS shell。
» 英特尔制造了一个efi 的 PDF 参考手册shell 命令。
» 联想UEFI_on_TS430 文档是我见过的唯一解释 efi shell 用法的资源。
»另一个 uefi shell 参考从nPartition 管理员指南。
» 您可以尝试通过导航到加载程序并执行它来从 efi shell 启动到分区。
» UEFI 希望磁盘具有 GPT 分区表,而不是 msdos 分区表。
» UEFI 希望磁盘上的第一个分区格式化为 fat32 或 vfat。 » 对于“通用”启动,根目录中
必须有一个目录。 » 有些人将其从安装位置 复制到那里,这种作弊方法对他们有效。 » 每当您进行 grub 更改时,请使用before 和 after 来确保您的重新启动正常。/EFI/boot
bootx64.efi
grubx64.efi
/EFI/boot/bootx64.efi
efibootmgr -v
我的 RD430 体验
过去一周,我重新安装了操作系统 10 多次,试图解决这个问题并设置服务器。我的配置是 SSD此 RAID 控制器在安装了 LMDE 的 PCIe 2.0 插槽中。AOC-S3008L-L8iRAID 控制器(刷新至 IT 模式) 位于第二个 PCIe 3.0 插槽中,配备 6x 3TB 驱动器。RAM:12GB ECC(3x 4GB)。
以下是我所做的导致系统无法启动的更改:
» 更改 S3008L-L8i pci 插槽(保留 SSD+卡不变)。
» 禁用LSi 软件 raid bios 提示用于板载控制器。
» 将我的旧 HighPoint RocketRaid 卡添加到开放的 PCIe 插槽。
» 进行更改/etc/default/grub
然后运行update-grub
。
(也许grub-install
也需要运行?)
答案4
在联想 Yoga 2 Pro 上的 32 位 Ubuntu 14.10 上,我像这样更改为 UEFI 启动:
创建文件夹
sudo su mkdir /boot/efi
安装“EFI 系统”分区
/etc/fstab
fdisk -l|grep EFI
这表明:
/dev/sda2 2050048 2582527 532480 260M EFI System
echo "/dev/sda2 /boot/efi vfat defaults,sync 0 0">>/etc/fstab
挂载该分区
mount /boot/efi
安装
grub-efi-amd64-bin
和卸载grub-efi-ia32-bin
aptitude install grub-efi-amd64-bin grub-efi-ia32-bin_ grub-install --target=x86_64-efi
以 efi 模式重启 Ubuntu
update-grub
测试它是否启动正常,然后我安装
grub-efi-amd64
并卸载grub-pc grub-gfxpayload-lists
了aptitude install grub-efi-amd64 grub-pc_ grub-gfxpayload-lists_
当系统询问时我选择不删除 /boot。
也许我把它弄复杂了,但这样做本来可以正常工作:
apt-get install --reinstall grub-efi
update-grub