Bootstrap

GRUB2引导修复

本来是想把GRUB2装到U盘,却不小心把电脑的GRUB搞坏了。原因可能是我执行命令grub-install时没有加任何参数,由于不知道没有参数怎么执行,我赶紧ctrl+c终止了安装,最后重启后发现系统无法启动,进入了grub rescue模式。庆幸的是,重启之前我成功给u盘装了grub2,这可帮了我大忙了。其实恢复GRUB有多种方式,比如用系统盘或U盘启动盘,我这种方式主要是为了熟悉GRUB,虽然比较麻烦,却是一种很有效的方法。

再说重启后进入了grub rescue模式,它与grub正常模式类似,但是大部分指令都不能用,我只用了基本的lsset,连help也没有,貌似也没有linux等命令。无奈之下,我插上u盘,按下ctrl+alt+delete,电脑竟然重启了,再次启动后进入了u盘的grub(我设置电脑默认u盘启动)。

grub模式下输入ls可以查看电脑目前的所有分区,以(hdX,msdosY)的形式显示,注意“(”和“)”不能少,X代表磁盘序号,从0开始;Y代表分区号从1开始。这个时候有可能搞不清楚哪个是linux分区,所以可以输入ls  -l查看分区详细信息,仔细查看可以找到linux分区。这里我们假设为(hd1,msdos4)。这个时候输入ls(hd1,msdos4)/,按下enter会列出该分区下的文件,以此类推,(hd1,msdos4)/boot/会列出boot下的文件。为了启动电脑,我们需要找到系统启动内核vmlinuz*和内存映像initrd*,一般位于boot目录下。我的是Debian8,这两个文件位于hd1,msdos4/boot下。

准备好文件,开始配置环境,set命令可以查看当前配置情况,包括root、prefix等等变量的值。如果是u盘启动的,root默认位于u盘下,为了启动硬盘上的linux,要将root改为(hd1,msdos4),所以输入set  root=(hd1,msdos4,这样root目录指定到了电脑的linux分区下。

启动内核用linux  /boot/vmlinuz*  root=/dev/sda4确定,*代表通配符,一般是版本号。有时候你不知道是sda还是sdb,可以用UUID=××××××代替/dev/sda4,UUID是硬盘分区的唯一固定ID,这样就可以准确定位分区。下一步执行initrd  /boot/initrd*确定,之后再输入boot确定,系统会输出信息,如果没问题系统应该能够正常启动。

进入系统后,打开终端使用root权限进行grub修复,终端中输入fdisk -l查看磁盘信息,确定linux系统的设备号,这里用/dev/sda4,将它挂载到系统的某个目录下,这里我挂载到了/mnt下,输入grub安装命令grub-install --boot-directory=/mnt/boot  /dev/sda确定,就可以将grub重新安装到该硬盘的mbr,启动的根目录位于sda4分区。这时除掉u盘重启,熟悉友好的启动选择图形界面应该就能出现了,如果还是不行,那么重复上面的步骤到安装grub后,再执行grub-mkconfig确定,会重新生成grub.cfg文件,再重启应该就没问题了。

搞这么麻烦有些人觉得很没意义,那只能说明这些人不喜欢计算机技术而已。而我写这篇文章仅仅是纪录一下我遇到问题的解决过程,并且想分享给可能遇到和我一样问题的朋友,希望能帮助到需要的人。

;