![更新(13.04)后,grub.cfg 显示有无效命令](https://linux22.com/image/1115577/%E6%9B%B4%E6%96%B0%EF%BC%8813.04%EF%BC%89%E5%90%8E%EF%BC%8Cgrub.cfg%20%E6%98%BE%E7%A4%BA%E6%9C%89%E6%97%A0%E6%95%88%E5%91%BD%E4%BB%A4.png)
通过调整原始 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 启动问题的讨论。