GRUB是多启动规范的实现,它允许用户可以在计算机内同时拥有多个操作系统,并在计算机启动时选择希望运行的操作系统。

GRUB可用于选择操作系统分区上的不同内核,也可用于向这些内核传递启动参数。

grub是多重引导加载程序。通俗点说,它就是用来一个可以让你选择运行什么操作系统的程序。在你开机的时候,它是第一个运行的程序。它决定着,将计算机的控制权给哪个系统内核。然后系统内核将进一步初始化、处理操作系统的其他部分。

出现grub的原因,是因为GNU GRUB找不到引导文件,引导系统内核了。所以,要想解决这个问题,需要让GNU GRUB找到相关的引导文件,进行正确的引导。

处理方法1:

1.查找内核所在的分区

grub上打开bios 怎么在gnu grub界面怎么进入_linux

 

 

root (hd0, 在这里按tab键,出现下面的分区,我们只需要type为83的分区,所以我们输入root (hd0,0)

2.指定启动内核所在位置

grub上打开bios 怎么在gnu grub界面怎么进入_参考资料_02

 

 

kernel /boot/vm

3.指定临时镜像文件所在位置

grub上打开bios 怎么在gnu grub界面怎么进入_处理方法_03

 

 

 

输入initrd / 按tab后发现有很多文件夹,我们知道临时镜像放在boot文件夹下,所以输如initrd /boot/initra

最后输入boot按照我们设定的内核文件和临时镜像文件启动系统,如:grub>boot

处理方法2:

1. 首先利用ls命令,找到Ubuntu安装在哪个磁盘分区;

  • 比如输入ls后我的机器列出的磁盘分区信息如下:

(hd0),(hd1),(hd1,gpt3),(hd1,gpt2),(hd1,gpt1)

  • 查找包含grub.cfg文件的分区
假定通过 ls (hd1,gpt2)/boot/grub 发现了grub.cfg文件,则表明Linux安装在这个分区

2.  找到Linux的/boot分区,以及/根分区所在的磁盘位置

输入 cat (hd0,gpt2)/etc/fstab
会输出类似下面的信息
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda2 during installation
UUID=dd6e0539-1369-4938-8af5-378f02cf05cf /               ext4    errors=remount-ro 0       1

3. 指定Linux内核,及/所在分区

grub> linux /boot/vmlinuz-4.8.0-36-generic ro text root=/dev/sda2

4. initrd命令指定initrd文件

grub> initrd /boot/initrd.img-4.8.0-36-generic

5. boot引导系统,结束

grub> boot


处理方法3:

1.首先,在grub>指令处,输入ls指令。这个指令能让你看到当前路径下的文件和文件夹。使用这个指令,你可以类似这样的输出,(hd0)(hd0, msdos1)类似的。这些是磁盘的分区,我们需要在这些分区内找到能够正确引导系统的文件配置。

2.使用指令ls (hd0)/来一个个测试,看输出有没有vmlinuz或者linuxinitrd.imgroot这样的字样。比如第一步出现(hd0)(hd0, msdos1),在这一步的时候,你需要使用ls (hd0)/ls (hd0, msdos1)/来一个个去试,直至出现上文提示的那些字样,那个分区就是引导文件所在的地方。如果ls (hd0, msdos1)/出现unknown filestystem,你可以尝试使用ls /(hd0, msdos1)/,以此类推ls (hd0, msdos1)/可以简写为ls (hd0, 1)/

3.找到引导文件所在位置,比如在(hd0,5)。输出以下指令

set root=(hd0,5)
set prefix=(hd0,5)/boot/grub
insmod normal
normal

这一步来设置引导文件的位置。
4. 如果还是不行,尝试以下指令

linux (hd0,5)/vmlinuz root=/dev/sda5
initrd (hd0,5)/initrd.img
boot

这里是让引导程序去引导。至此,应该可以正常开机了。