天天看点

sata硬盘和nvme硬盘grub rescue以及MBR、grub、lilo、uefi 、legacy的解释

01 grub rescue修复–sata接口的硬盘(适用于sata固态和机械硬盘)

  前几天买了块SSD回来,想把之前的win10+ubuntu16.04都迁移到SSD上。做法是下载分区助手,完成了win10系统C盘和软件盘D盘的迁移,但是ubuntu则是不能用分区助手迁移的,因为分区助手就没有linux版,所以ubuntu就必须重装到ssd上。重装的时候,采用了uefi方式安装,安装好后重启系统,发现无法进入bios,只出现grub rescue界面,在网上看了一些教程,说什么拔硬盘、给bios rom放电、装ubunt到u盘上然后从u盘进入ubuntu,吓了我一跳。当时确实有点慌了,因为我的观点是装系统可以随便玩,只要不去动bios就行,而这次竟然进不了bios所以有点头疼,以为得去维修店刷bios了。其实不然,出现grub rescue命令行,只要之前安装的ubuntu还在,就修复一下grub即可。方法如下:

ls		#列出磁盘上的所有分区
ls (hd0,msdos12)		#查看msdos12是否是ext文件系统,假设是则下面都用msdos12,如果不是则继续查看(hd0,msdosXX)XX是ls中列出的数字序号
ls (hd0,msdos12)/grub	#我目前的硬盘上是hd0 12和hd0 5上有ubuntu
ls (hd0,msdos12)/boot/grub
set root=(hd0,msdos12)		#这条命令可以没有
set prefix=(hd0,msdos12)/boot/grub	#如果是第四行没有显示unknow file,如果是第三行显示unknow file则/boot/grub改成 /grub
insmod normal
normal		#就可以进入那个熟悉的grub菜单界面了
#在进入ubuntu后需要执行以下两条命令
sudo update-grub
sudo grub-install /dev/sda		#sda后不加数字
           

几点注意的地方:

1)ls (hd0,msdos12)/grub #ls后有一个空格,中间的逗号后边没有空格,右括号后也没有空格,如果是多加或少写了空格会出现 unknown command,即命令输错了,而不会是unknown file 和unknown file system

2)ls (hd0,msdos12)可以写成ls(hd0,12),即省略掉msdos这几个字符

3)可以先ls (hd0,12)看是否是ext文件系统,如果是再去检查/grub或者/boot/grub是否含有grub的引导文件 ,这样会比较节省时间

4) 在修复好grub后,也能正常进入bios了(有点奇怪)

02 grub rescue修复–nvme协议m.2接口的硬盘

方法和上面的是一样的,只是需要根据nvme硬盘的特点做一点修改

ls # 列出所有分区,因为我是nvme+gpt+efi模式,所以显示的是(hd0,gpt1)这种形式
ls (hd0,gpt2)/efi # 因为我的ubuntu引导分区efi在(hd0,gpt2),就是第一块硬盘的2分区,所以此处直接用它示范了
# 输出: ubuntu/ boot/
set root=(hd0,gpt2)
set prefix=(hd0,gpt2)/efi/ubuntu	# 因为grub在efi/ubuntu目录下
insmod normal
normal
#在进入ubuntu后同样需要执行下面的命令
sudo update-grub
sudo grub-install /dev/nvme0n1	# 这里的设备号nvme0n1很关键,因为我的efi分区装在nvme0n1p2中的,所以此处是nvme0n1
           

需要注意的是:

  (01) ls找efi分区时,只要efi下有ubuntu的,那就是它了,如果您记得是在那个硬盘哪个分区,就直接ls它确认下即可.

  (02) 比较坑的一点是,我经过上面的操作后,重启系统又进入了grub rescue,后来发现是因为我有两块硬盘,但是bios中的默认启动顺序不是nvme0n1, 而是另一块硬盘,所以如果您也有这个问题的话,则需要设置bios的启动顺序

03 MBR、主分区、扩展分区、逻辑分区、活动分区、系统分区、启动分区解释

版本1

http://blog.51cto.com/matthewfjnd/2294325

版本2

https://www.cnblogs.com/wincai/p/5482301.html

04 Linux启动过程

https://www.ibm.com/developerworks/cn/linux/l-linuxboot/

05 uefi bios和legacy bios mbr和gpt

这两个都是bios,legacy是传统的bios,而uefi则是新出的bios标准

https://blog.csdn.net/a3192048/article/details/82975745

06 grub和lilo都可以用于linux的系统加载程序,在传统mbr模式下,它们是在执行mbr引导程序后加载到内存执行的,其作用是加载操作系统内核。现在linux用grub引导的居多。

继续阅读