GRUB引导故障排除(转)

el/2024/5/23 1:16:55

GRUB引导故障排除

在工作和教学中,经常发现同事和同学在碰到Linux启动直接进入GRUB界面但没有启动选单(只剩下一个“grub>”提示符)的状况,这时就认定系统已经没救,开始重新安装,甚至包括一些接触Linux已久的人也是如此。其实出现此种状况,只要了解Linux系统引导过程中GRUB的作用以及工作流程,就非常容易解决。
Linux系统在启动过程中,首先是固件(PC上大多是CMOS/BIOS)的物理检测,诸如检测系统的显卡、CPU和硬盘等,可从系统按下电源后看到此检测信息;检测无问题,将读取硬盘的MBR(主引导记录)中的自举程序,Linux中常用的自举程序如LILO和GRUB。自举程序GRUB在系统启动期间只有一个作用,就是载入内核;内核在引导期间有两个主要的作用,一个是驱动系统硬件,另一个将启动系统进程init;init进程将读取其配置文件/etc/inittab完成后续所有的引导。
所以其实GRUB在引导期间只有一个最重要的作用,就是载入系统内核。那么GRUB在引导期间到底是如何执行引导的呢?让我们来看以下的GRUB配置文件/boot/grub/grub.conf(一定要注意/etc/grub.conf只是此文件的一个软链接)片断示例:
title Thiz Linux Server 7.0
root (hd0,5)
kernel /boot/vmlinuz-2.4.22-3Thiz ro root=LABEL=/
initrd /boot/initrd-2.4.22-3Thiz.img
此段是加载GRUB的最重要的设置段,其中“title”段指定了GRUB引导界面系统的标题;“root”段指定了/boot分区所在的位置;“kernel”段指定了内核所在位置(kernel /boot/vmlinuz-2.4.22-3),内核加载时权限属性为只读(“ro”),以及指定根分区所在位置(root=LABEL=/);initrd指定了Linux镜像文件所在位置。
当Linux系统中GRUB配置文件/boot/grub/grub.conf内容修改错误或损坏时,系统启动后会自动进入GRUB命令行模式(“grub>”),最常见的原因无外乎两个,一是GRUB配置文件中此三段修改错误;二是GRUB配置文件丢失。(还有少数原因,如内核文件或镜像文件损坏、丢失,/boot目录误删除等)此时可以使用如下几种方法进行恢复。
存在GRUB配置文件备份
如果存在GRUB配置文件备份,那么比较省事的办法就是对其进行备份恢复,可以按如下方法进行:
◆ 把安装盘的第一张放到光驱,然后重新启动机器,在BOIS中设定系统用光驱引导;
◆ 等安装界面出来后,按F4键(不同Linux版本此快捷键可能稍有不同,如即时Linux是按F5键盘),进入“boot:”命令提示行输入命令“linux rescue”,进入Linux维护模式;
◆ 一系列键盘以及几项简单的配制(如设置键盘等),这里不多做介绍,然后会出现如下字符:
sh#
此时就可以在此命令行下执行操作了:
sh#cp /backup/grub.conf.bak /mnt/sysimage/boot/grub/grub.conf
假设备份文件为/backup/grub.conf.bak ,因绝大多数Linux光盘修复模式中会将硬盘系统的“/”分区chroot到“/mnt/sysimage”处(在之前的配制中可以看到提示),所以拷贝的目标为“/mnt/sysimage/boot/grub/grub.conf”而非“/boot/grub/grub.conf”
◆ 退出此模式,重启即可。
内核文件、镜像文件、/boot目录等文件损害或丢失,也可以使用此种方法修复。
如果没有GRUB配置文件备份
如果没有备份GRUB配置文件,或者想通过此试验更多了解GRUB的引导过程,可以利用GRUB强大的交互功能,采用如下方法:
在“grub>”命令行下可以进行如下操作:
◆ 查找/boot/grub/grub.conf分区所在目录可用如下命令:
grub> find /boot/grub/grub.conf (hd0,5)
需要注意的是,将得到grub.conf配置文件所在系统的分区,(hd0,5)即表示它在分区hda6。
◆ 查看grub.conf文件错误可用如下命令:
GRUB>cat (hd0,5)/boot/grub/grub.conf
需要注意的是,可以查看到配置文件到底什么地方出现了错误,以便进入后修改。
◆ 指定/boot分区可用如下命令:
root (hd0,5)
需要注意的是,从此步骤开始,即为本文前面所提到的GRUB配置文件中的主要引导步骤,只是一般都是系统读取GRUB配置文件引导,出现问题时我们可以手工指定引导。
◆ 指定内核加载可用如下命令:
kernel /boot/vmlinuz ro root=LABEL=/
◆ 指定镜像文件所在位置可用如下命令:
initrd /boot/initrd-2.4.22-3Thiz.img
◆ 从/boot分区启动可用如下命令:
boot (hd0,5)
此时,即可正常启动,实际上,以上步骤就是执行了GRUB引导期间加载grub.conf文件的步骤,当系统正常引导后将GRUB配置文件修改正确后即可。以上这个方法也可以用于测试新编译的内核。对此故障排除的了解可以加深对GRUB引导以及Linxu系统引导的了解。
此外,还有一种情况是在安装Windwos时,把GRUB从MBR上清除,启动后根本连GRUB的影子都看不到。如出现此问题,可以进入Linux维护模式,执行如下命令:
sh#grub-install /dev/had
之后退出重新启动系统,即可实现GRUB对Linux和Windows的多系统引导(此情况假设将Linux安装于第一块IDE硬盘上,若安装于第二块硬盘或SCSI硬盘上,请做相应更改)。


http://www.ngui.cc/el/4967332.html

相关文章

Linux系统文件目录简介

一、简介: Linux操作系统中,以文件来表示所有的逻辑实体与非逻辑实体。逻辑实体系指文件与目录; 非逻辑实体则泛指硬盘、终端机、打印机等。 一般而言,Linux文件名称的组成除由连续字母、标点符号、数字等构成外,中间不能有空格符、路径名称符号 / 或 # * % & {} [] …….…

CentOS5.3下源码编译安装XEN3.4.2虚拟机

如果你对VMware很熟悉,那么你一定很想了解大名鼎鼎的XEN和KVM,XEN是20多年前由剑桥大学开发的,现在属于思杰公司(Citrix),其目前最新版本是3.4.2,而KVM是新崛起的新星,是XEN不容忽视的强有力的竞争对手,呵呵…

JVM中的数据类型、堆与栈介绍

数据类型 Java虚拟机中,数据类型可以分为两类:基本类型和引用类型。基本类型的变量保存原始值,即:他代表的值就是数值本身;而引用类型的变量保存引用值。“引用值”代表了某个对象的引用,而不是对象本身,对…

java中设置无参构造函数的必要性

先看一下的java代码:class Person { private String name""; private int age0; public Person() { System.out.println("person无参数构造函数"); } public Person(String name,int age) { this.namename; this.ageage; Sys…

CentOS5.3源配置

说明: CentOS 的网络源配置文件是:/etc/yum.repos.d/ 下的 CentOS-Base.repo。 配置方法: 配置方法一般是: ① . 进入到repos.d 目录 $ cd /etc/yum.repos.d ② . 备份原来的源 $ mv CentOS-Base.repo CentOS-Base.r…

外企面试英语收录

(1)How are you today? 你今天怎么样?   (2)Did you have any trouble ? 你有什么困难么?()What do you think of the weather lately? 最近天气怎么样?   …

shell下进程的前台与后台运行

跟系统任务相关的几个命令:fg、bg、jobs、&、ctrlz1. & 最经常被用到 这个用在一个命令的最后,可以把这个命令放到后台执行2. ctrl z 可以将一个正在前台执行的命令放到后台,并且暂停3. jobs 查看当前有多少在后台运行的命…

centos打开ftp服务

首先,安装的时候要勾选ftp服务,centos会帮你装上vsftpd这个ftp服务器并把它标为系统服务。 启动命令:/etc/rc.d/init.d/vsftpd start 此外,还要看看防火墙是否允许了ftp服务。 这时候可以使用ftp客户端连接。 vsftpd的权限貌似…

Linux tty/pty/pts 概念区别

tty0-6是linux本地终端,pts/x是远程登陆需要的终端,比如某人要telnet到你的机子,就需要你的系统有pts/x。 基本概念:   1. tty(终端设备的统称):   tty一词源于Teletypes,或者teletypewriters&#xff…

制作本地DVD yum源

1: 在/home/目录下建立存放DVD光盘的包的目录localyum 执行命令:mkdir –p /home/localyum 2:挂载DVD光驱到/mnt/ 执行命令:mount /dev/hdc /mnt/ 3:复制/mnt/Server/下所有文件和子目录到/home/localyum/下 执行命令&…