问一下关于修改 grub2efi 引导文件的事

2015-12-20 20:52:24 +08:00
 Solitudechn

hp 的笔记本在 efi 模式下是没法修改启动顺序的,无论用什么程序修改都是没人使用 windows 的引导管理器引导,我今天试了一下,将 efi 分区下的 boot 文件夹下的 bootx64.efi 更换成 grub 下的 efi 文件,将我 indows 下的 efi 文件 bootmgfw.efi 也替换成 grub 的 efi 文件,将原本的文件改了个名字为 winbootmgfw.efi ,在 /boot/grub/grub.cfg 下修改了 windows 的引导程序为 chainloader /EFI/Microsoft/Boot/winbootmgfw.efi
这样的话修改开机引导成功,系统默认使用 grub 引导, windows 引导项也可以正常使用。
但是根据 grub 的说明显示官方不建议直接修改 grub.cfg 文件,但是我在 defaults 下以及 grub.d 下均没有找到如何修改 chainloader 这个项目的地方,请各位帮忙,谢谢

499 次点击
所在节点    Linux
12 条回复
whatot
2015-12-20 21:07:14 +08:00
安装 grub 到 efi 里,然后通过 grub-mkconfig 生成 grub.cfg
styx
2015-12-20 21:14:56 +08:00
/etc/grub.d/40_custom 最后加上用来启动 windows 的 menuentry ,然后 debian 的话用 update-grub ,其他发行版(如 Gentoo )可以用 grub2-mkconfig -o /boot/grub/grub.cfg ,这样就会自动把 custom 里面的加进去
Solitudechn
2015-12-20 21:38:14 +08:00
@whatot 抱歉,你可能没有动我的意思,我是正常有 grup.cfg 但是我要修改源文件...
Solitudechn
2015-12-20 21:41:06 +08:00
@styx 不是,我的意思是,我修改了 efi 下 windows 引导文件的名称,将引导文件的名字改为了 winbootmgfw.efi ,使用默认生成的配置文件,扫描出来的 windows 引导文件为 bootmgfw.efi ,我想问得是在哪里可以修改这个。先说一下我是 debian 系统。
whatot
2015-12-21 00:48:03 +08:00
arch 里面代码在 /etc/grub.d/30_os-prober , debian 可以类推。

```
efi)

EFIPATH=${DEVICE#*@}
DEVICE=${DEVICE%@*}
onstr="$(gettext_printf "(on %s)" "${DEVICE}")"
cat << EOF
menuentry '$(echo "${LONGNAME} $onstr" | grub_quote)' --class windows --class os \$menuentry_id_option 'osprober-efi-$(grub_get_device_id "${DEVICE}")' {
EOF
save_default_entry | sed -e "s/^/\t/"
prepare_grub_to_access_device ${DEVICE} | sed -e "s/^/\t/"

cat <<EOF
chainloader ${EFIPATH}
}
EOF
;;
```
pynix
2015-12-21 01:56:08 +08:00
直接使用 efi 引导 kernel
comicfans44
2015-12-21 07:56:28 +08:00
可以尝试把 64bit efi shell 拷贝到 u 盘 efi/boot/bootx64.efi ,用 u 盘启动,执行 bcfg 命令或可直接修改 efi 启动顺序
styx
2015-12-21 09:38:33 +08:00
@Solitudechn 你的意思就是你想要重命名 grub 脚本自动生成的 chainloader 引导文件是吧?那 debian 的话用 os_prober 可以用 @whatot 的方法,也可以我说的 40_custom 的方法,自己手写一个 menuentry ,当然也可以自己手写 chainloader 咯。
Solitudechn
2015-12-21 09:49:03 +08:00
@whatot 你好我看见了这段代码,但是我不能知道${EFIPATH}在哪里修改
Solitudechn
2015-12-21 09:49:55 +08:00
@styx 也就是说,我可以自己写一个这样的例子?请问有没有范文?
BOYPT
2015-12-21 10:07:56 +08:00
其实用 reFind 来做 EFI 引导会比较专业点。
styx
2015-12-22 00:32:10 +08:00
@Solitudechn 回复有点晚,不知道你解决没有。就是楼上的代码改一下

menuentry 'WIndows 10' --class windows --class os {
insmod part_dos
insmod ntfs
insmod part_gpt
set root='hd0,gpt1'
chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

insmod 看需要增减, root 的话你可以进 grub rescue 模式下试探一下或者大概也能才出来

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/244887

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX