我的主板是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
小魔仙小组总组长
支持各种禁断之恋
离线
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
小魔仙小组总组长
支持各种禁断之恋
离线
你不能启动时用livecd看一下你的sda1里的/EFI/boot/bootx64.efi还在不在? 如果在的话那是你的cmos里设置问题 系统本身应该是正常的。
离线
你不能启动时用livecd看一下你的sda1里的/EFI/boot/bootx64.efi还在不在? 如果在的话那是你的cmos里设置问题 系统本身应该是正常的。
文件都在,BIOS设置没问题,是默认的
小魔仙小组总组长
支持各种禁断之恋
离线
文件都在的话 而且你确认cmos设置都正确的话 那估计是超频等原因损坏了bootx64.efi这个文件。
离线
会不会 sda 里有 Arch 和 Win 的 EFI 文件,而 sdb 里只有 Win 的 EFI 文件,而 EFI 默认读取 sdb 但 grub-install 导致 EFI 读取 sda?
离线
会不会 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的。
小魔仙小组总组长
支持各种禁断之恋
离线
文件都在的话 而且你确认cmos设置都正确的话 那估计是超频等原因损坏了bootx64.efi这个文件。
现在我借到了不少的主板,硬盘,以及各种发行版最新以及LTS版安装镜像。发现在安装完后
80%的主板如果安装bios检测到两个启动项的发行版(例如ubuntu)。重新清除CMOS并恢复最优化设置,后关闭安全启动(默认关闭的主板省略此步骤)后,都只能自动检测到一个启动项。
如果只有一个启动项的,则自动检测不出。/
但所有的主板都能自动检测win的启动项,而且所有的主板,在进LiveCD重新grub-install之后都能识别。而且所有的系统的EFI文件都没有掉。
现在我的猜想是可能与分区号有关,因为大多数主板都遵循微软的UEFI标准,但是微软的ESP分区号为1.而linux安装默认ESP分区号为0/
是否有这方面因素?
小魔仙小组总组长
支持各种禁断之恋
离线
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里的问题,和操作系统无关。
离线
我比較好奇這個問題:
如果不連接裝有 windows 的那塊硬盤,那麼能否檢測出 arch 的引導項?
這是出於這個設想:主板去檢測硬盤,如果發現某塊上有引導項,就不繼續檢測其他硬盤上是否也有。
另,#8 中這句(見下面的引用)完全看不懂:
发现在安装完后
80%的主板如果安装bios检测到两个启动项的发行版(例如ubuntu)。重新清除CMOS并恢复最优化设置,后关闭安全启动(默认关闭的主板省略此步骤)后,都只能自动检测到一个启动项。
如果只有一个启动项的,则自动检测不出。/
順便,標點符號一定要寫對。至少不要錯太遠……
知識很重要,而相當的運用能力更重要。
离线
已解决
在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的重要性。。。。。。。。我要打自己脸。。。。。。
小魔仙小组总组长
支持各种禁断之恋
离线
已解决
在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放电有什么关系啊,放电了这个文件也还是在的。这不符合逻辑啊。。。
离线
这样似乎解释不了为什么执行 grub-install 后会出现 GRUB 启动项。
按引用的说法,之前 LZ 应该也找不到 GRUB 启动项才对。
P.S. 另外如果 Ubuntu 和 Windows 安装在同一硬盘上,cp 的操作岂不是覆盖了 Windows 的 efi 文件?
最近编辑记录 nopriler (2014-10-13 08:43:28)
离线
这样似乎解释不了为什么执行 grub-install 后会出现 GRUB 启动项。
按引用的说法,之前 LZ 应该也找不到 GRUB 启动项才对。
P.S. 另外如果 Ubuntu 和 Windows 安装在同一硬盘上,cp 的操作岂不是覆盖了 Windows 的 efi 文件?
应该是OS和UEFI通信后才能识别其他的启动项,而UEFI却会自动检测bootx64这个文件。所以如果只有grubx64的话必须重装grub,让grub和efi重新通信efi才会识别。
小魔仙小组总组长
支持各种禁断之恋
离线
查了些资料,似乎有些东西存储在主板上并且有默认值。似乎不是 EFI 自动检测 \EFI\boot\bootx64.efi 而是默认设置指向了该文件。
P.S. 请问 LZ 创建 \EFI\boot\bootx64.efi 后即使放电也能看到 Arch 和 Win 的启动项吗,启动顺序如何?
最近编辑记录 nopriler (2014-10-13 09:16:28)
离线