您尚未登录。

#1 2014-10-07 19:59:44

小魔仙的朋友
会员
注册时间: 2014-10-07
帖子: 8

GRUB EFI引导项丢失问题

我的主板是MSI A88X-G43
因为经常超频的缘故,所以也经长超频失败。这时需要放电CMOS,我有两块硬盘,一块在机器里装着archlinux,一块独立装载win8.1,但是可以认为和机器里的一致(机箱自带硬盘底座)
问题是放电后,archlinux启动项无法自动检测,只有重新进入LiveCD 然后grub-install之后才会检测出,但windows无论是放电前就插在机器上还是放电后加在机器上,放电后均可以自动检出启动项
PS,在华硕M7F上有同样情况。而且安全启动和win8;1快速启动均已关闭
PPS:求问ubuntu上UEFI模式安装为啥装完会有两个启动项?
我的分区表如下

Disk /dev/sda:111.8 GiB,120034123776 字节,234441648 个扇区
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 512 字节
I/O 大小(最小/最佳):512 字节 / 512 字节
磁盘标签类型:gpt
磁盘标识符:B327A964-DA1F-499B-BED4-305E24F6DA96

Device         Start       End   Sectors  Size Type
/dev/sda1       2048   1050623   1048576  512M EFI System
/dev/sda2    1050624  42993663  41943040   20G Linux filesystem
/dev/sda3   42993664 219154431 176160768   84G Linux filesystem
/dev/sda4  219154432 234441614  15287183  7.3G Linux swap

小魔仙小组总组长
支持各种禁断之恋

离线

#2 2014-10-07 20:03:50

小魔仙的朋友
会员
注册时间: 2014-10-07
帖子: 8

Re: GRUB EFI引导项丢失问题

win8.1分区表如下

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sdb: 976773168 sectors, 465.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): 18574418-83C3-48B5-9E80-76B94D715B98
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 976773134
Partitions will be aligned on 2048-sector boundaries
Total free space is 2029 sectors (1014.5 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048          616447   300.0 MiB   2700  Basic data partition
   2          616448          821247   100.0 MiB   EF00  EFI system partition
   3          821248         1083391   128.0 MiB   0C01  Microsoft reserved ...
   4         1083392       125829119   59.5 GiB    0700  Basic data partition
   5       125829120       409477119   135.3 GiB   0700  
   6       409477120       693125119   135.3 GiB   0700  
   7       693125120       976773119   135.3 GiB   0700  

刚才弄错软件,gdisk显示arch分区表如下

GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: protective
  BSD: not present
  APM: not present
  GPT: present

Found valid GPT with protective MBR; using GPT.
Disk /dev/sda: 234441648 sectors, 111.8 GiB
Logical sector size: 512 bytes
Disk identifier (GUID): B327A964-DA1F-499B-BED4-305E24F6DA96
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 234441614
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048         1050623   512.0 MiB   EF00  
   2         1050624        42993663   20.0 GiB    8300  
   3        42993664       219154431   84.0 GiB    8300  
   4       219154432       234441614   7.3 GiB     8200

小魔仙小组总组长
支持各种禁断之恋

离线

#3 2014-10-09 23:04:28

kingsk
会员
注册时间: 2014-09-28
帖子: 36

Re: GRUB EFI引导项丢失问题

你不能启动时用livecd看一下你的sda1里的/EFI/boot/bootx64.efi还在不在? 如果在的话那是你的cmos里设置问题 系统本身应该是正常的。

离线

#4 2014-10-10 14:38:58

小魔仙的朋友
会员
注册时间: 2014-10-07
帖子: 8

Re: GRUB EFI引导项丢失问题

kingsk 说:

你不能启动时用livecd看一下你的sda1里的/EFI/boot/bootx64.efi还在不在? 如果在的话那是你的cmos里设置问题 系统本身应该是正常的。

文件都在,BIOS设置没问题,是默认的


小魔仙小组总组长
支持各种禁断之恋

离线

#5 2014-10-10 15:54:23

kingsk
会员
注册时间: 2014-09-28
帖子: 36

Re: GRUB EFI引导项丢失问题

文件都在的话 而且你确认cmos设置都正确的话 那估计是超频等原因损坏了bootx64.efi这个文件。

离线

#6 2014-10-10 18:52:06

nopriler
会员
注册时间: 2012-01-03
帖子: 393

Re: GRUB EFI引导项丢失问题

会不会 sda 里有 Arch 和 Win 的 EFI 文件,而 sdb 里只有 Win 的 EFI 文件,而 EFI 默认读取 sdb 但 grub-install 导致 EFI 读取 sda?

离线

#7 2014-10-10 21:27:13

小魔仙的朋友
会员
注册时间: 2014-10-07
帖子: 8

Re: GRUB EFI引导项丢失问题

noprller 说:

会不会 sda 里有 Arch 和 Win 的 EFI 文件,而 sdb 里只有 Win 的 EFI 文件,而 EFI 默认读取 sdb 但 grub-install 导致 EFI 读取 sda?

sdb并不会一直在机器上,而两个系统是分开安装的,也就是说sda'里只有arch的引导文件,sdb里只有win的引导文件。
现在好像是EFI并不会自动去认arch的引导文件,但会自动认win的引导文件。我不知道这是怎么回事
PS虽然win的那块盘不是一直会插在机器上,但是所有的硬盘都会接在板载SATA接口上
我不知道EFI为什么并不会在第一次上电时认arch的引导文件但是会自动认win的。


小魔仙小组总组长
支持各种禁断之恋

离线

#8 2014-10-10 21:37:01

小魔仙的朋友
会员
注册时间: 2014-10-07
帖子: 8

Re: GRUB EFI引导项丢失问题

kingsk 说:

文件都在的话 而且你确认cmos设置都正确的话 那估计是超频等原因损坏了bootx64.efi这个文件。

现在我借到了不少的主板,硬盘,以及各种发行版最新以及LTS版安装镜像。发现在安装完后
80%的主板如果安装bios检测到两个启动项的发行版(例如ubuntu)。重新清除CMOS并恢复最优化设置,后关闭安全启动(默认关闭的主板省略此步骤)后,都只能自动检测到一个启动项。
如果只有一个启动项的,则自动检测不出。/
但所有的主板都能自动检测win的启动项,而且所有的主板,在进LiveCD重新grub-install之后都能识别。而且所有的系统的EFI文件都没有掉。
现在我的猜想是可能与分区号有关,因为大多数主板都遵循微软的UEFI标准,但是微软的ESP分区号为1.而linux安装默认ESP分区号为0/
是否有这方面因素?


小魔仙小组总组长
支持各种禁断之恋

离线

#9 2014-10-10 22:58:59

kingsk
会员
注册时间: 2014-09-28
帖子: 36

Re: GRUB EFI引导项丢失问题

小魔仙的朋友 说:
kingsk 说:

文件都在的话 而且你确认cmos设置都正确的话 那估计是超频等原因损坏了bootx64.efi这个文件。

现在我借到了不少的主板,硬盘,以及各种发行版最新以及LTS版安装镜像。发现在安装完后
80%的主板如果安装bios检测到两个启动项的发行版(例如ubuntu)。重新清除CMOS并恢复最优化设置,后关闭安全启动(默认关闭的主板省略此步骤)后,都只能自动检测到一个启动项。
如果只有一个启动项的,则自动检测不出。/
但所有的主板都能自动检测win的启动项,而且所有的主板,在进LiveCD重新grub-install之后都能识别。而且所有的系统的EFI文件都没有掉。
现在我的猜想是可能与分区号有关,因为大多数主板都遵循微软的UEFI标准,但是微软的ESP分区号为1.而linux安装默认ESP分区号为0/
是否有这方面因素?

esp分区号这个应该是没关系的(你已经关闭安全启动了) 我觉得还是你cmos有什么选项设置有问题,grub可能会影响UEFI里启动项的顺序之类。理论上你能正常启动,但是清cmos后不能,那还是cmos里的问题,和操作系统无关。

离线

#10 2014-10-11 10:07:31

renyuneyun
会员
所在地: 地球
注册时间: 2011-09-30
帖子: 132
个人网站

Re: GRUB EFI引导项丢失问题

我比較好奇這個問題:
如果不連接裝有 windows 的那塊硬盤,那麼能否檢測出 arch 的引導項?

這是出於這個設想:主板去檢測硬盤,如果發現某塊上有引導項,就不繼續檢測其他硬盤上是否也有。

另,#8 中這句(見下面的引用)完全看不懂:

小魔仙的朋友 说:

发现在安装完后
80%的主板如果安装bios检测到两个启动项的发行版(例如ubuntu)。重新清除CMOS并恢复最优化设置,后关闭安全启动(默认关闭的主板省略此步骤)后,都只能自动检测到一个启动项。
如果只有一个启动项的,则自动检测不出。/


順便,標點符號一定要寫對。至少不要錯太遠……


知識很重要,而相當的運用能力更重要。

离线

#11 2014-10-11 18:19:02

小魔仙的朋友
会员
注册时间: 2014-10-07
帖子: 8

Re: GRUB EFI引导项丢失问题

已解决
在archwiki/GRUB上有这么一段

UEFI firmware workaround

Some UEFI firmware requires that the bootable .efi stub have a specific name and be placed in a specific location: $esp/EFI/boot/bootx64.efi (where $esp is the UEFI partition mountpoint). Failure to do so in such instances will result in an unbootable installation. Fortunately, this will not cause any problems with other firmware that does not require this.

解决方法也已在wiki指明

# mkdir $esp/EFI/boot
# cp $esp/EFI/arch_grub/grubx64.efi  $esp/EFI/boot/bootx64.efi

同时所谓的“两个启动项”问题也已清楚,ubuntu官方支持安全启动,所以会默认执行这一动作,于是留下两个启动项。
再次说明了勤看wiki的重要性。。。。。。。。我要打自己脸。。。。。。


小魔仙小组总组长
支持各种禁断之恋

离线

#12 2014-10-11 20:12:39

kingsk
会员
注册时间: 2014-09-28
帖子: 36

Re: GRUB EFI引导项丢失问题

小魔仙的朋友 说:

已解决
在archwiki/GRUB上有这么一段

UEFI firmware workaround

Some UEFI firmware requires that the bootable .efi stub have a specific name and be placed in a specific location: $esp/EFI/boot/bootx64.efi (where $esp is the UEFI partition mountpoint). Failure to do so in such instances will result in an unbootable installation. Fortunately, this will not cause any problems with other firmware that does not require this.

解决方法也已在wiki指明

# mkdir $esp/EFI/boot
# cp $esp/EFI/arch_grub/grubx64.efi  $esp/EFI/boot/bootx64.efi

同时所谓的“两个启动项”问题也已清楚,ubuntu官方支持安全启动,所以会默认执行这一动作,于是留下两个启动项。
再次说明了勤看wiki的重要性。。。。。。。。我要打自己脸。。。。。。

昏倒 你不是说你的bootx64.efi文件在吗?怎么这会儿复制个bootx64.efi就解决了?再说这个和cmos放电有什么关系啊,放电了这个文件也还是在的。这不符合逻辑啊。。。

离线

#13 2014-10-12 00:16:13

nopriler
会员
注册时间: 2012-01-03
帖子: 393

Re: GRUB EFI引导项丢失问题

这样似乎解释不了为什么执行 grub-install 后会出现 GRUB 启动项。

按引用的说法,之前 LZ 应该也找不到 GRUB 启动项才对。

P.S. 另外如果 Ubuntu 和 Windows 安装在同一硬盘上,cp 的操作岂不是覆盖了 Windows 的 efi 文件?

最近编辑记录 nopriler (2014-10-13 08:43:28)

离线

#14 2014-10-12 11:01:58

小魔仙的朋友
会员
注册时间: 2014-10-07
帖子: 8

Re: GRUB EFI引导项丢失问题

nopriler 说:

这样似乎解释不了为什么执行 grub-install 后会出现 GRUB 启动项。

按引用的说法,之前 LZ 应该也找不到 GRUB 启动项才对。

P.S. 另外如果 Ubuntu 和 Windows 安装在同一硬盘上,cp 的操作岂不是覆盖了 Windows 的 efi 文件?

应该是OS和UEFI通信后才能识别其他的启动项,而UEFI却会自动检测bootx64这个文件。所以如果只有grubx64的话必须重装grub,让grub和efi重新通信efi才会识别。


小魔仙小组总组长
支持各种禁断之恋

离线

#15 2014-10-13 08:54:25

nopriler
会员
注册时间: 2012-01-03
帖子: 393

Re: GRUB EFI引导项丢失问题

查了些资料,似乎有些东西存储在主板上并且有默认值。似乎不是 EFI 自动检测 \EFI\boot\bootx64.efi 而是默认设置指向了该文件。

P.S. 请问 LZ 创建 \EFI\boot\bootx64.efi 后即使放电也能看到 Arch 和 Win 的启动项吗,启动顺序如何?

最近编辑记录 nopriler (2014-10-13 09:16:28)

离线

页脚