成功更新我的BIOS后,出现了问题,最后我在黑屏的左上角以闪烁的光标结束。没有错误,什么都没有。现在,BIOS仅列出了一个SATA: <disc name>
引导选项来代替通常的UEFI ubuntu
。我正在使用GPT分区方案。
我最终发现,有效的解决方案是正确重新安装grub-efi-amd64
。那么,我该怎么做呢?
PS:实际上,我成功地自行重新安装了GRUB2 EFI,并将在此处发布我的答案,因为我无法找到关于此的任何完整操作方法。
成功更新我的BIOS后,出现了问题,最后我在黑屏的左上角以闪烁的光标结束。没有错误,什么都没有。现在,BIOS仅列出了一个SATA: <disc name>
引导选项来代替通常的UEFI ubuntu
。我正在使用GPT分区方案。
我最终发现,有效的解决方案是正确重新安装grub-efi-amd64
。那么,我该怎么做呢?
PS:实际上,我成功地自行重新安装了GRUB2 EFI,并将在此处发布我的答案,因为我无法找到关于此的任何完整操作方法。
Answers:
在UEFI模式下使用实时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.
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
以上应该给你一个g头,但不是一个可启动的
对于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分区等),它可能不是唯一的选择,但这对我来说很好。
grml是用于固定物体的合适的实时系统。关于如何设置可启动的USB设备,还有一本详尽的指南,其中Mac部分实际上是最有用的(只需创建FAT32分区,复制文件,重新启动,完成)。
/run/resolvconf...
(在Ubuntu 12.04中)的符号链接,相反,我只是用来在chroot环境中mount --bind /run /mnt/run
挂载整个/run
目录。
update-grub
不会将最新的grub2映像复制到您的EFI分区,它只会更新grub.cfg。因此更好的方法是apt-get install --reinstall grub-efi
(或grub-efi-amd64),这也将在最后调用update-grub。
update-grub
我的/boot/efi
文件夹仍然是空的(我已经创建了这个新分区)。只有在运行grub-install
实际文件之后,才会将文件写入那里。该指南对我有所帮助(德语):wiki.ubuntuusers.de/EFI_Problembehebung
作为第一种方法的潜在简化,仅使用实时CD的grub,就可以直接引导到硬盘上的系统中。使用xubuntu 13.10实时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
configfile (hd0,gpt1)/EFI/ubuntu/grub.cfg
什么也没做。发出此命令后如何引导?
sudo grub-install --target=x86_64-efi --efi-directory=/boot/efi
不是上面建议的命令(但是上面的命令也可以工作,我不知道)。之后,您可以再次访问Linux操作系统。然后运行sudo update-grub
,一切都应该可启动。
configfile (hd1,gpt1)/EFI/ubuntu/grub.cfg
。引导LiveCD并运行sudo gparted
以找到您的efi分区。
与Maxine一样,我在BIOS中发现UEFI设置遭到损坏,并且计算机无法启动。
就我而言,这是一个联想ThinkServer RD430与Linux Mint的Debian和它似乎什么我做关于更新grub或者改变服务器中的任何硬盘驱动器会导致它无法启动。我的操作系统是通过USB安装的linuxmint-201403-mate-dvd-64bit。(请参阅下文,了解可能导致UEFI无法正常工作的事件的完整说明)
在ThinkServer TS140上执行完全相同的步骤不会导致UEFI失去理智甚至一次。看着RD430驱动程序页面,我的履历是两个版本。我以前从来没有更新过主板上的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
。Option 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
在前后使用以确保重新启动正常。
在过去的一周中,我已经重新安装了OS 10次以上,以尝试解决此问题并设置服务器。我的配置是此RAID控制器在PCIe 2.0插槽中的SSD上,上面装有LMDE。带有6个3TB驱动器的第二个PCIe 3.0插槽中的AOC-S3008L-L8i RAID控制器(重新刷新为IT模式)。内存:12GB ECC(3x 4GB)
以下是我会导致系统无法启动的
更改:»更改S3008L-L8i pci插槽(不留SSD +卡)。
»禁用板载控制器的LSi软件raid bios提示。
»将旧的HighPoint RocketRaid卡添加到开放的PCIe插槽中。
»进行更改/etc/default/grub
,然后运行update-grub
。
(也许还grub-install
需要运行?)
我会投票赞成,但显然我在SuperUser上没有足够的代表。经过数天有效但无济于事的克隆战斗之后,我终于找到了解决方案,对此我感到很高兴。我认为这都与UEFI和某种“安全启动”机制有关。
我正在离线工作,因此无法选择apt-get。我所做的就是将Ubuntu桌面放在USB记忆棒上,然后将grub-efi
和grub-efi-amd64
软件包添加到USB记忆棒的根目录(grub-efi_1.99〜rc1-13ubuntu3_amd64.deb和grub-efi-amd64_1.99〜rc1-13ubuntu3_amd64.deb Ubuntu 11.04-进行适当更改以适合发行版和体系结构),并将以下内容也放入USB记忆棒中的脚本中:
#! /bin/bash
sudo mount /dev/sda2 /mnt
sudo mount /dev/sda1 /mnt/boot/efi
dir=`dirname $0`
sudo cp $dir/grub-efi*.deb /mnt/tmp
for i in /dev /dev/pts /proc /sys; do sudo mount -B $i /mnt$i; done
sudo chroot /mnt /bin/sh -c "dpkg -i /tmp/grub-efi*.deb"
sudo shutdown -r now
启动Live USB记忆棒,打开一个终端,运行命令,这项工作很不错!唯一偶尔出现的问题是UEFI有时会降低到HDD下方的引导优先级顺序,此时您需要进入BIOS并更改引导顺序以停止尝试(并尝试失败)SATA: drive
。
您也可以使用dpkg-reconfigure
代替dpkg -i
,但这会询问几个引导加载程序问题。
[edit]我也没有足够的评论意见,所以我认为对回复的评论才是答复。
sudo chroot /mnt /bin/sh -c "dpkg -i /tmp/grub-efi*.deb" && sudo shutdown -r now
给出正确的行为并不是当务之急。
在Lenovo 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
此项更多地类似于准备您的计算机来重新安装efi项。这也是在内部介质(SSD,HDD)上安装系统之后创建应急磁盘的一种有效而简单的方法。
使用Linux Mint Tara(一种与Ubuntu Bionic Beaver密切相关的Linux变体),该方法使我的安装不方便,并使其在以后得以保存。出现这种情况是因为我希望具有持久性的实时USB,并且由于安装Unetbootin之类的实用程序进行持久性安装的时间与全新安装大致相同,因此我只是使用相同的实时发行版在USB上进行安装,用于将操作系统安装在内部SSD上。
当然,这都不是RAID或任何其他专门的设置,但是它确实需要在USB驱动器上准备好卷分区,并且需要使用发行版的可用方法在该USB上进行安装,从而避免了内部驱动器在单个磁盘上进行安装。分区的根(/)挂载。
这是新的grub安装与内部驱动器缠在一起的地方。当我重新引导至USB时,内部UEFI grub条目似乎已消失,在尝试使用BIOS菜单中的条目选择驱动器时仅留下grub菜单。
相反,从USB引导显示发行版的方法已生成了现成的grub菜单,其中包含/ dev / sda2的列表,该分区包含/ boot / efi挂载。在大多数主内部驱动器安装中,分区的grub名称为hd0,gpt1。
进入“高级”阶段,可以进行多个内核救援。从那里运行grub实用程序,然后正常启动。
从这一点开始,在以前无法访问的内部驱动器上运行OS,拔下USB,然后运行sudo grub-install
。
在没有USB的情况下重新启动时,您应该可以重新进入。此时,USB已配置为将内部驱动器启动到正常或救援模式,并且该驱动器具有其自己的菜单。