问题表现:联想扬天老台式机grub2命令行启动linux,机械硬碟安装有windows10和UbuntuStudio,后改装一块SSD后在其上安装了Manjaro,安装的时侯并未关掉机械硬碟,重启后Manjaro的grub主引导菜单正常显示,可以启动三个系统,点ubuntu可步入ubuntu的grub引导菜单,日本套娃的表现是意料之中的,开始用了几天倒也正常,后来可能是两个linux更新时因update-grub带来一个问题,Manjaro的grub引导菜单出不来,按F12也只显示机械硬碟SATA2上的ubuntu和windows,致使未能启动Manjaro。其实UbuntuStudio的grub启动菜单上显示有Manjaro引导项但未能启动,屏幕显示LENOVO标示但仍然没反应。两个硬碟都是GPT格式,在SSD上安装Manjaro时并未预先分区是整盘安装的,没有预留ESP分区,有16M的MSR分区。本想杀死ubuntu的grub并以Manjaro的grub作为主引导菜单,在Manjaro下无论是sudogrub-install/dev/sda还是sudogrub-install/dev/sdb都无法在SATA1即SSD硬碟上成功搞定grub引导(grub仍然都存在于/boot/grub下,只是由于从一个c盘上使用UEFI模式启动,c盘上必需要先有一个EFI分区,但是这个分区已被标志为boot才具备引导功能),都是首次可以出现Manjaro的grub启动菜单,但只要步入任一系统后再重启Manjaro引导菜单又消失了。
单硬碟安装双系统或多系统不是难事鸟哥的linux私房菜,只要先安装windows再安装linux的话grub手动搞定多系统启动菜单问题linux伊甸园论坛,除非重装windows或则分区发生调整,通常不会带来问题。但多硬碟多linux系统确实要复杂些,可能与显卡也有关系。系统未能引导问题都能修补,只要硬碟没坏、数据未倒塌,我曾数十次地遇到过这种问题都能逢凶化吉,此时也从未着急。
我的解决思路:
1.无引导菜单启动Manjaro。LliveCD可以解决,但复杂些,启动步入后须要挂载硬碟文件系统再chroot。好在UbuntuStudio的grub可用,点c步入grub命令行模式,执行四条命令即可启动。setroot=(hd0,gpt3);setprefix=(hd0,gpt3)/boot/grub;insmodnormal;normal,分别回车即可。hd0,gpt3因机而异,例如我的Manjaro的ext4分区一开始是gpt2,后来降低ESP分区后变为gpt3,可用ls查询其所在分区。
2.解决两个grub启动引导器互相干扰的问题。我希望起码各管各的,一个硬碟装一个,既互不相干,也互相调用。用分区软件无损调整SSD,压缩ext4分区,为ESP和MSR分区调出400多M的空间。将其新建为ESP和MSR两个分区,起码ESP是必须的,通常300M,大一点无妨,是安装grub的EFI引导文件须要占用的。低格为fat32格式前或后,须设置boot(还有个选项是bios-grub)标志,我是在Manjaro的KDE分区管理器右键点击sda1即ESP分区选择属性对勾选择的,不标示可能难以正确安装grub,此前多次安装再查看该分区一点空间都没有被占用,也有可能与之前未挂载ESP分区有关,也未可知。分区并标示后,执行sudomount/dev/sda1/boot/efi(正式ESP分区挂载到/boot/efi下,/boot/efi本是空的,挂载后可向ESP分区写文件);再执行sudogrub-install--target=x86_64-efi--efi-directory=/boot/efi--bootloader-id=Manjaro(安装grub的EFI引导文件到ESP分区下,使该硬碟具备UEFI引导grub功能。可能须要提早安装efibootmgr)。再sudoupdate-grub。
操作完成后重启笔记本,原先SATA1依赖STAT2硬碟引导的问题得以解决,启动时按F12可以发觉SATA1具备了grub引导功能,标示是Manjaro,点击后步入Manjaro的grub引导菜单。问题得以解决,对grub、GPT、EFI等知识点有了一些认识,但还是不甚了解,须要再学习。如今两个硬碟各有各的grub引导管理器,在BIOS里关掉任何一块硬碟都不影响硬碟本有的系统的正常运行,两块硬碟都不关掉也可互相引导,只是仍然存在的ubuntu的grub未能引导manjaro的问题尚未解决,检测了分区uuid没发觉异常,再寻思。
收获:分辨BIOS系统、UEFI系统和c盘分区表对象及概念上的不同。BIOS难以辨识GPT分区,BIOS下GPTc盘不能用于启动操作系统,在操作系统提供支持的情况下可用于数据存贮。UEFI可同时辨识MBR分区和GPT分区,UEFI下MBRc盘和GPTc盘都可用于启动操作系统和数据储存,不过谷歌限制UEFI下使用Windows安装程序安装操作系统是只能将系统安装在GPTc盘中(ESP和MSR分区就是Windows系统安装时手动创建的,我们常常没注意,而本文中我在一个新c盘上安装的是linux系统,尽管c盘分区表是GPT,但因为另一块c盘已有ESP分区,grub就手动选择有ESP分区的c盘作为启动c盘。我里面的操作是基于UEFI系统+GPT分区表,在操作中因混淆概念走了一些弯路,将BIOS的一些过时的操作用在UEFI系统上,例如sudogrub-install/dev/sda就是基于BIOS的,一度因张冠李戴耽搁了太多时间。使用UEFI安装时,一定要让安装介质以UEFI模式启动,否则efibootmgr将难以添加GRUBUEFI启动项,但是要从一个c盘上使用UEFI模式启动,c盘上必需要先有一个EFI分区,在其上安装grub必须先挂载EFI分区也就ESP分区能够写入GRUBEFI应用(引导文件)并在固件启动管理器中创建一个条目(也就是我们看见的引导菜单项目)。
BIOS下启动操作系统之前,必须从硬碟上指定磁道读取系统启动代码(包含在主引导记录即MBR中),之后从活动分区中引导启动操作系统,而在UEFI下,这种都不须要,不再须要主引导记录,不再须要活动分区,只要有ESP分区并在其中写入引导文件即可,其他的事交给UEFI系统来做。UEFI会启动EFI应用程序。诸如引导加载程序、引导管理器和UEFIShell等等。这种应用程序一般以文件方式储存在EFI系统分区中,厂商可以将其特定文件储存在EFI系统分区中的/EFI/vendor_name文件夹下,应用程序可以通过在NVRAM中添加引导项或从UEFIshell中启动。假如要用多系统,某块硬碟未安装过windows且今后可能安装windows,例如先装linux后装windows,在安装其他操作系统前最好先用分区软件构建ESP和MSR分区非常是后者,这将因此后安装windows留有空间。同时,还是注意grub版本的不同以及针对不同分区表c盘的处理方法的不同,可参照以下引用。
引用:
GUIDPartitionTable(GPT)是一种更灵活的分区方法。它正在逐渐代替MasterBootRecord(MBR)系统。GPT相对于诞生于MS-DOS时代的MBR而言,有许多优点。新版的fdisk(MBR)和gdisk(GPT)促使使用GPT或则MBR在可靠性和性能最大化上都十分容易。
在作出选择前,须要考虑如下内容:
假如使用GRUBlegacy作为bootloader,必须使用MBR。
假如使用传统的BIOS,但是双启动中包含Windows(无论是32位版还是64位版),必须使用MBR。
假如使用UEFI而不是BIOS,但是双启动中包含Windows64位版,必须使用GPT。
特别老的机器须要使用MBRgrub2命令行启动linux,由于BIOS可能不支持GPT.
假如不属于上述任何一种情况,可以随便选择使用GPT还是MBR。因为GPT更先进,建议选择GPT。
建议在使用UEFI的情况下选择GPT,由于有些UEFIfirmware不支持从MBR启动。
注意:为了使GRUB从一台有GPT分区的基于BIOS的系统上启动,须要创建一个BIOS启动分区,这个分区和/boot没关系,仅仅是GRUB使用,不要构建文件系统和挂载。