简记:/boot/grub/grub.cfg同/boot/efi/EFI/ubuntu/grub.cfg的区别
很简单:
/boot/grub/grub.cfg是给传统Legacy引导的GRUB用的配置文件。
/efi/ubuntu/grub.cfg是给现代UEFI引导的GRUB用的配置文件。
不同的GRUB会去找对应的grub.cfg看配置。
不过一般安装好后,打开/efi/ubuntu/grub.cfg你会看到里面只有这么几行字:
search.fs_uuid a4b1bb59-b7f9-41fb-90f1-35aa3c37aa6d root
set prefix=($root)'/boot/grub'
configfile $prefix/grub.cfg
想必您也猜出大意来了:
EFI版的GRUB一启动,就会先来找/efi/ubuntu/grub.cfg看配置。结果这个配置文件这么说的:
你先找一个uuid为a4b1bb59-b7f9-41fb-90f1-35aa3c37aa6d的分区去,把它标成root,
然后设了个变量叫prefix,把它设成这个root里/boot/grub这个路径
好了,去看这个路径下面另外那个叫grub.cfg的文件吧,我不管了。
再明显不过,这个root分区就是系统的/。
所以说,用efi引导GRUB,它找的配置文件不是/boot/grub/grub.cfg,而是在efi目录里的那个grub.cfg。不过这个文件把它指向了/boot/grub/grub.cfg。所以嘛,它最终还是去找了/boot/grub/grub.cfg。
这也给了个提示,grub-update等命令修改的是/boot/grub/grub.cfg。所以如果哪天改过什么然后发现这样改grub不生效的话,考虑打开efi分区里那个grub.cfg,看一看它search.fs_uuid所指的那个分区究竟是不是你的系统分区吧。(当然,如果你的boot就在一个单独分区里的话,这个东西指向的UUID会是您boot分区的UUID,然后下面prefix会set到($root)'/grub'。)
同时似乎也说明,把/boot/grub/grub.cfg直接copy到/efi/ubuntu/grub.cfg,应该也能用,不过会把grub-update淦蒙圈,所以最好别折腾了还是。