更新(13.04)后,grub.cfg 显示有无效命令

更新(13.04)后,grub.cfg 显示有无效命令

通过调整原始 windows8 分区的大小、禁用安全启动并在 EFI 模式下安装,在华硕 vivobook(X202E,但周围有很多类似型号)上安装了 ubuntu 12.10。

这是我的分区表

Model: ATA Hitachi HTS54505 (scsi)
Disk /dev/sda: 500GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt

Number  Start   End     Size    File system     Name                          Flags
 1      0.00GB  0.32GB  0.31GB  fat32           EFI system partition          boot
 2      0.32GB  0.94GB  0.63GB  ntfs            Basic data partition          hidden, diag
 3      0.94GB  1.08GB  0.13GB                  Microsoft reserved partition  msftres
 4      1.08GB  201GB   200GB   ntfs            Basic data partition
 5      201GB   210GB   8.39GB  linux-swap(v1)  Basic data partition
 6      210GB   262GB   52.4GB  ext4            Basic data partition
 7      262GB   479GB   217GB   ext4            Basic data partition
 8      479GB   500GB   21.5GB  ntfs            Basic data partition          hidden, diag

起初我无法启动 Windows 8。但在这里搜索后,我编辑了 /etc/grub.d 中的 custom40 文件,并添加了

insmod part_gpt
insmod ntfs
root '(hd0,gpt4)'
(and here i think it was Chainloader +1, not sure)

一切都很好,直到 13.04 更新。现在我在 grub.cfg 中有以下内容:

cat /boot/grub/grub.cfg
...
menuentry 'Windows 8 (loader) (on /dev/sda4)' --class windows --class os $menuentry_id_option 'osprober-chain-BEE60B1AE60AD317' {
    insmod part_gpt
    insmod ntfs
    set root='hd0,gpt4'
    if [ x$feature_platform_search_hint = xy ]; then
      search --no-floppy --fs-uuid --set=root --hint-bios=hd0,gpt4 --hint-efi=hd0,gpt4 --hint-baremetal=ahci0,gpt4  BEE60B1AE60AD317
    else
      search --no-floppy --fs-uuid --set=root BEE60B1AE60AD317
    fi
    drivemap -s (hd0) ${root}
    chainloader +1
}

我的 40_custom 文件不见了!好吧,并没有消失,但是它还有初始内容……

当我选择此选项时,我得到 can't find command 'drivemap'invalid EFI file path

我认为现在有几个问题:

1)为什么更新删除了我的自定义 grub 文件?

2)为什么 grub 使用它一无所知的命令来生成配置文件?

3)我该怎么做才能解决这个问题?

对于第 3 点,如果我可以挑剔的话,我想要一些比安装启动修复更有见地的东西,并且我真的很想开始将我对 GPT 和 EFI 的了解提升到我对(合理)分区的水平。

非常感谢您的任何意见。

答案1

drivemap选项chainloader +1用于引导BIOS 模式来自的操作系统BIOSGRUB 版本;但你的系统基于 EFI并且有一个EFI模式Windows 安装,因此任何带有这些选项的 GRUB 条目都注定会失败。相反,您需要类似以下内容:

menuentry "Windows 8" {
    insmod part_gpt
    insmod chain
    set root='(hd0,gpt1)'
    chainloader /EFI/Microsoft/Boot/bootmgfw.efi
}

但是,我不保证这一定会起作用;GRUB 在启动 Windows 时非常挑剔,在一台计算机上有效的方法在另一台计算机上往往会失败。

我不知道为什么你的/etc/grub.d/40_custom文件被清除了。这是我第一次听说这种情况。我唯一的猜测是 Boot Repair 或其他旨在帮助修复 GRUB 问题的工具可能是罪魁祸首。

您可能更愿意用其他启动管理器替换或补充 GRUB,例如橡胶靴或者我自己的重新索引。这些程序对于启动 Windows 的要求较低,它们还可以启动包含 EFI 存根加载器的 Linux 内核,这意味着大多数 3.3.0 及更高版本的内核。对于 rEFInd,安装 Debian 二进制包应该可以正确设置一切,前提是你已经不是运行 Boot Repair。如果您运行 Boot Repair,您应该在继续之前撤消其文件处理操作;如果不这样做,您将在尝试启动 Windows 时得到 GRUB。

既然你说你想了解更多关于这个主题的知识,我推荐我的有关 EFI 引导加载程序的网页。另外,请查看马修·加勒特 (Matthew Garrett) 的博客;它涵盖了许多主题,包括一些(主要是技术性的)关于 EFI 启动问题的讨论。

相关内容