Max*_* R. 94
在 UEFI 模式下使用 live-USB/CD 启动您的计算机。我有两个启动选项,<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.
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)根据您的 Linux 发行版,您现在可以做不同的事情。
对于Ubuntu/Debian:
apt-get install --reinstall grub-efi-amd64
Run Code Online (Sandbox Code Playgroud)
或者:
apt-get install --reinstall grub-efi
update-grub
Run Code Online (Sandbox Code Playgroud)
以上应该给你一个grub,而不是一个可启动的
对于Fedora(最多 16 个,可能适用于其他人):
yum reinstall grub-efi
Run Code Online (Sandbox Code Playgroud)
在以下命令中,您必须将 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
Run Code Online (Sandbox Code Playgroud)现在键入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
Run Code Online (Sandbox Code Playgroud)您可能需要根据自己的需要(不同的分区表、单独的 /boot 分区等)进行调整,这可能不是唯一的选择,但这对我来说效果很好。
用于修复事物的合适的实时系统是grml。还有一个关于如何设置可启动 USB 设备的广泛指南,其中 Mac 部分实际上是最有用的(只需创建一个 FAT32 分区,复制文件,重新启动,完成)。
小智 9
作为第一种方法的潜在简化,可以直接引导到硬盘上的系统,仅使用 live CD 的 grub。使用 xubuntu 13.10 live CD 在 xubuntu 13.10 上进行测试。
确保在您的 BIOS 中禁用了安全启动。插入 live CD 并通过 UEFI 启动它。将显示 CD 的 GRUB 菜单。按“c”进入命令行。
configfile (hd0,gpt1)/EFI/ubuntu/grub.cfg
Run Code Online (Sandbox Code Playgroud)
如果您有不同的 EFI 系统分区,请调整上面的 grub 命令。
系统从硬盘启动后,在 EFI 系统分区上重新安装 grub 并通过 grub-install 将其注册到固件应该就足够了。
sudo grub-install
Run Code Online (Sandbox Code Playgroud)
与 Maxine 一样,我发现 BIOS 中的 UEFI 设置损坏,我的机器无法启动。
就我而言,它是带有 Linux Mint Debian 的 Lenovo ThinkServer RD430,似乎我对 update-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 / #
Run Code Online (Sandbox Code Playgroud)
该efibootmgr -c
命令添加了两个条目0000
和0002
!
将Boot0002* Linux HD
在引导顺序进入第一是不正确的。
本0000
项是正确的。
为了测试这一点,我尝试在没有任何中断的情况下启动,这就是0002
入口。正如预期的那样,它没有用。所以我重新启动了服务器,按 F12,然后选择linuxmint
. 正如所希望的那样,它确实启动了我的 LMDE 安装。
通过 efibootmgr 删除不需要的条目的方法是:
# efibootmgr -b 2 -B
Run Code Online (Sandbox Code Playgroud)
我使用此命令删除条目0001
和0002
. 选项0001
来自我多次尝试恢复操作系统的最后一次。
如果您正在阅读本文并且像我以前一样对 UEFI 感到沮丧,这里有一些注意事项和资源:
» 引导到 UEFI Shell 类似于使用 DOS shell。
» 英特尔为 efi shell 命令制作了PDF 参考手册。
» Lenovo 的UEFI_on_TS430 文档是我见过的唯一解释 efi shell 用法的资源。
»另一个UEFI Shell参考从nPartition管理员指南。
» 您可以通过导航到加载程序并执行它来尝试从 efi shell 引导到一个分区。
» UEFI 希望磁盘具有 GPT 分区表,而不是 msdos 部分表。
» UEFI 希望将磁盘上的第一个分区格式化为 fat32 或 vfat。
» 对于“通用”引导/EFI/boot
,根目录中必须有一个目录bootx64.efi
。
» 有些人将其grubx64.efi
从安装位置复制到/EFI/boot/bootx64.efi
该作弊工具对他们有用。
» 无论何时进行 grub 更改,请efibootmgr -v
前后使用以确保重新启动正常。
在过去的一周里,我已经重新安装了 10 多次操作系统,试图解决这个问题并设置服务器。我的配置是PCIe 2.0 插槽中此 RAID 控制器上的 SSD,其上安装了 LMDE。AOC-S3008L-L8i RAID 控制器(重新刷新到 IT 模式)位于第二个 PCIe 3.0 插槽中,带有 6 个 3TB 驱动器。内存:12GB ECC(3x 4GB)。
以下是我要进行的导致系统无法启动的
更改:» 更改 S3008L-L8i pci 插槽(单独留下 SSD+卡)。
» 禁用板载控制器的LSi 软件 raid bios 提示。
» 将我的旧 HighPoint RocketRaid 卡添加到开放的 PCIe 插槽中。
» 对 进行更改/etc/default/grub
,然后运行update-grub
。
(也许还grub-install
需要运行?)
归档时间: |
|
查看次数: |
293157 次 |
最近记录: |