1、grub.conf配置文件丢失
首先说明:在grub命令提示符中所有类型的磁盘(不论是SATA还是SAS的)都被识别成以hd开头的设备(如 hd0),没有sda等等。
当/boot/grub/grub.conf配置文件丢失后,系统重新启动时就找不到linux启动的菜单了,就会直接进入grub提示符界面,界面如下:
这时可使用帮助命令help查看都有哪些命令可以使用。
完整的恢复步骤如下:
如果知道/boot目录在哪个磁盘分区可以省略第一步,直接使用root命令指定磁盘分区,如果不知道的话,可以使用find命令进行查找。
输入find (hd0,0)代表从第一块磁盘的第一个分区,在输入时直接输入find (hd0,0)/vmlinuz,后面使用tab键进行补全,如果能补全,就代表在这个分区能找到内核文件。
再使用root指定磁盘分区;
然后指定内核并传递参数给内核文件,ro代表以只读方式,root=/dev/sda2中的/dev/sda2是根文件系统所在的分区;(因此装系统时要注意一下根文件系统所在分区的名称,如果是根文件系统在逻辑卷上,就要写逻辑卷分区的名称)
最后指定initrd文件,initrd是一个用内存来模拟磁盘的文件,是一个小型的根文件系统,其包含了 当前系统 的真正根文件系统的 驱动,有了这些驱动linux内核才能去挂载真正的根文件系统。
kernel后面的内核文件名 和 initrd后面指定的文件都可以使用tab键进行自动补全
前面几步设置好后使用boot命令启动。
启动后,进入/boot/grub目录重新编写grub.conf文件,文件内容大致就是上面操作的几步,内容如下:
其中default=0代表title如果有多个的话,默认选择第一个title的启动;timeout=3代表启动时在grub选择界面停留3秒,title后面的可以自己随便定义。编辑完保存好,下次启动就不会出现问题了。
在上面的步骤中,若是kernel的参数 root= 这里指定的根文件系统所在分区的名称不正确的话,是会报错的,报错界面如下所示
2、MBR的前446字节丢失(如果是中间64字节丢失,此方法不适用,中间64字节丢失是分区表被破坏)
MBR总共有512字节,前446字节存放BootLoader程序,接下来的64字节存放分区表信息,最后2字节存放特殊标志。这里主要说明bootloader遭到破坏后如何修复。
当bootloader遭到破坏后重新启动后的界面如下:
这时就要启动使用光盘紧急救援模式。
挂载好光盘后,设置启动项从光驱启动,进入安装界面
选择Rescue installed system
回车后根据提示选择语言Lanaguage,键盘类型keyboard type,一般默认就行。然后到以下界面。
这一步是否启用网络,如果需要启用,可以选Yes,进入界面进行IP等的配置,这里不启用。
这里不用启用,选NO。进入下面的界面
默认Continue即可,接下来几步默认即可,一直到下面这一步。
这一步是在选择OK后,出现最下面的命令提示符,接下来就要进行操作了
第一步使用chroot /mnt/sysimage 切换到/mnt/sysimage目录所在的根文件系统,根文件系统会被挂载到此目录下,然后使用grub进入命令提示符,同样是使用root (hd0,0)指定磁盘分区,然后使用setup (hd0)直接开始进行恢复MBR,MBR不在任何分区,所有setup后面直接跟(hd0),直接指定磁盘即可。
恢复成功后,使用quit退出grub命令提示符界面,再使用exit退出/mnt/sysimage目录所在的根文件系统,回到从光盘中加载的根文件系统中,重启系统后即可正常进入系统
3、grub目录丢失
当/boot/grub目录丢失后,系统也不能进入系统,重启系统后报错如下:
这时仍然是进入紧急救援模式,具体步骤见上面的MBR丢失。
进入到救援模式后,使用chroot切换到/mnt/sysimage所在根文件系统中,使用grub-install命令重新安装grub目录,grub-install --root-directory=/ /dev/sda2 这个命令中--root-directory= 应该格式boot目录的根目录——也就是根/ 后面再指定根文件系统所在的磁盘设备,这里就算根文件系统所在的分区是逻辑卷,也不能使用逻辑卷名称;而是要像上面一样使用原始的设备名称/dev/sda2或/dev/sda1或/dev/sda,总之执行完grub-install命令后要能出现下面的(fd0) /dev/fd0和 (hd0) /dev/sda这样的行才算安装成功。
安装好后就可以看到/boot目录下已经有grub目录了。
还有最后一步,要到grub目录中手动创建grub.conf文件,文件内容如下:
其中kernel那行如果根文件系统所在的分区是逻辑卷的话,就应该使用逻辑卷的名称,而不能像上面grub-install命令中那样使用/dev/sda2。如果是逻辑卷时应该像下面这样
参数还使用了quiet selinux=0代表使用静默模式、关闭selinux。
如果不关闭selinux时,启动时会报错如下