- Ubuntu 服务器 14.04 efi-gpt 磁盘有三个分区,1=启动,2=主,3=恢复
我想:默认在 gpt2 上启动,grub 回退到 gpt3,然后 grub-reboot 从主目录重新启动进入恢复。
我得到了什么根本无法启动,只是立即重启循环。
GNU 文档让我有点困惑。我需要能够对 40_custom 文件和 /etc/default/grub 进行所有更改,以使其可重复且稳定。
以下是一些链接: http://www.gnu.org/software/grub/manual/grub.html#Simple-configuration https://www.gnu.org/software/grub/manual/legacy/Booting-fallback-systems.html “wiki.ubuntuusers.de/GRUB_2/Skripte/#Fallback-Skript”
这是/etc/default/grub:
# If you change this file, run 'update-grub' afterwards to update
# /boot/grub/grub.cfg.
# For full documentation of the options in this file, see:
# info -f grub -n 'Simple configuration'
GRUB_DEFAULT=0
#GRUB_HIDDEN_TIMEOUT=0
GRUB_HIDDEN_TIMEOUT_QUIET=true
GRUB_TIMEOUT=5
GRUB_DISTRIBUTOR=""
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""
# fallback addition
export GRUB_FALLBACK="1 2"
GRUB_DEFAULT=saved
GRUB_SAVEDEFAULT=true
# Uncomment to enable BadRAM filtering, modify to suit your needs
# This works with Linux (no patch required) and with any kernel that obtains
# the memory map information from GRUB (GNU Mach, kernel of FreeBSD ...)
#GRUB_BADRAM="0x01234567,0xfefefefe,0x89abcdef,0xefefefef"
# Uncomment to disable graphical terminal (grub-pc only)
#GRUB_TERMINAL=console
# The resolution used on graphical terminal
# note that you can use only modes which your graphic card supports via VBE
# you can see them in real GRUB with the command `vbeinfo'
#GRUB_GFXMODE=640x480
# Uncomment if you don't want GRUB to pass "root=UUID=xxx" parameter to Linux
GRUB_DISABLE_LINUX_UUID=true
# Uncomment to disable generation of recovery mode menu entries
GRUB_DISABLE_RECOVERY="true"
# Uncomment to get a beep at grub start
#GRUB_INIT_TUNE="480 440 1
“
以下是 grub.cfg 的相关部分:
## BEGIN /etc/grub.d/40_custom ###
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
menuentry 'ITH Robot Base Main (on /dev/sda2)' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
insmod part_gpt
insmod ext2
set root='hd0,gpt2'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt2 --hint-efi=hd0,gpt2 --hint-baremetal=ahci0,gpt2 208a7546-da6b-4d07-82ab-0f04e8db6fd0
else
search --no-floppy --fs-uuid --set=root 208a7546-da6b-4d07-82ab-0f04e8db6fd0
fi
linux /boot/vmlinuz
initrd /boot/initrd.img
savedefault fallback
}
menuentry 'ITH Robot Base Recovery(on /dev/sda3)' {
insmod part_gpt
insmod ext2
set root='hd0,gpt3'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt3 --hint-efi=hd0,gpt3 --hint-baremetal=ahci0,gpt3 89ad84a4-3fe5-4409-a702-96ae698872d2
else
search --no-floppy --fs-uuid --set=root 89ad84a4-3fe5-4409-a702-96ae698872d2
fi
linux /boot/vmlinuz
initrd /boot/initrd.img
savedefault fallback
}
### END /etc/grub.d/40_custom ###
答案1
我通过确保我的磁盘设置为 EFI/GPT(不是必需的,但如果没有正确设置,在我已经感到困惑的情况下就无法按照说明操作)、使用 gparted(或 parted)创建启动 EFI 分区以及编辑正确的文件解决了这些问题。以下指南可能会有所帮助:
- 为了正确获取磁盘,请使用 gparted 创建 GPT 磁盘表,然后创建一个较小的 Fat32 分区,将标志设置为“启动”并设置一个挂载点
/boot/efi
。(挂载点是常规的,但我建议遵循惯例)。 - 根据需要添加其他分区,但根分区不会像平常一样具有启动标志。
- 安装 Ubuntu 后,你会发现 Grub 已经为启动菜单设置了它能找到的所有分区。你可能不想要这个,或者你可能有自定义设置。
- 检查 /etc/fstab 以确保 /boot/efi mount 命令存在,并检查文件系统以确保存在 /boot/efi 挂载点。
- 建议:在运行 update-grub 之前,请备份、,
/boot/grub
并准备好可启动的闪存驱动器或某种方法来挂载新的分区,以便在更改无法启动时可以修复它们。/etc/default/grub
/etc/grub.d
- 您只需要在 中更改几件事
/etc/default/grub
,大部分更改都应该在 中,/etc/grub.d/40_custom
另外根据需要对 10* 20* 30* 脚本进行 chmodding 以防止它们执行操作。 - 您可以将菜单节从中剪切并粘贴
/boot/grub/grub.cfg
到40_custom
- 注意 Grub(可能是 EFI?) 从零(hd0) 开始计数磁盘,从一开始计数分区。
- 运行 update-grub 来创建 grub.cfg 文件
- 你不需要对 Fat32 启动分区做任何事情
- 注意:我在具有两个可启动闪存驱动器和一个 HD 的系统上遇到了问题,HD 使用闪存驱动器上的启动 EFI 分区,而不是其自身上的。这都是因为连接了无关的驱动器 - 尝试断开您不想更改的任何内容。
- 注意:如果您正在保存和恢复多个驱动器,则必须使用 tune2fs 重置 UUID,否则会发生冲突。