Linux系统故障分析与排查—系统启动类故障排除
在处理Linux系统出现的各种故障时,故障的症状是最先发现的,而导致这以故障的原因才是最终排除故障的关键。熟悉Linux系统的日志管理,了解常见故障的分析与解决办法,将有助于管理员快速定位故障点。“对症下药”及时解决各种系统问题。
在处理Linux系统出现的各种故障时,故障的症状是最先发现的,而导致这以故障的原因才是最终排除故障的关键。熟悉Linux系统的日志管理,了解常见故障的分析与解决办法,将有助于管理员快速定位故障点。“对症下药”及时解决各种系统问题。
本文以RHEL5版本系统为例讲述系统启动时的故障排除的具体做法。
1、系统启动类故障排除
在Linux系统的启动过程中,涉及到哦MBR主引导记录、GRUB启动菜单、系统初始化配置文件、分区挂载配置文件等各方面,其中任何一个环节出现故障都可能会导致系统启动的失常,因此一定要注意做好相关文件的备份功能。下面是一些系统启动类的故障情况:
> MBR扇区故障
MBR引导记录位于物理硬盘的第一个扇区(512个字节),该扇区又称为主引导扇区(MBR扇区),除了包含系统引导程序的部分数据以外,还包含了整个硬盘的分区表记录。当主引导扇区发送故障时,将可能无法进入主引导菜单,或者因无法找到正确的分区位置而无法加载系统,通过该硬盘引导主机时很可能进入黑屏状态。
下面将介绍对MBR扇区进行备份、破坏、修复的过程,嘿嘿!
>:备份MBR扇区数据
由于MBR扇区包含了整个硬盘的分区表记录,因此该扇区的备份文件必须存在其他的存储设备中,否则在恢复时将无法读取带备份文件。
使用dd命令将第1块硬盘(sda)的MBR扇区备份到第2块硬盘的sdb1分区中(挂载到/backup目录)
- mkdir /backup
- mount /dev/sdb1 /backup
- dd if=/dev/sda of=/backup/sda.mbr.bak bs=512 count=1
>:模拟MBR扇区故障
仍然使用dd命令,我们人为将MBR扇区的记录覆盖,以便模拟出MBR故障、
- dd if=/dev/zero of=/dev/sda bs=512 count=1
完成上述操作后重启系统,将会出现"Operating system not found "的提示信息,表示无法找到可能的操作系统,因此无法启动主机。
> 从备份文件中恢复MBR扇区数据
由于MBR扇区被破坏以后,已经无法再从该硬盘启动系统,所以需要使用其他硬盘中的操作系统进行引导,或者直接使用RHEL5系统的安装光盘进行引导。不管使用哪种方式,目地都是相同的:获得一个可以执行命令的Shell环境,以变从备份文件中恢复MBR扇区中的数据,
以使用RHEL5安装光盘引导为例,当出现安装向导的:“boot”提示符时,在后边输入“linux rescue‘并回车,将以”急救模式“引导光盘中的Linux系统。之后一次按回车键接受默认的语言、键盘合适,提示是否配置网卡时一般选择”No’,然后系统会自动查看硬盘中的Linux分区并尝试将其挂载到"/mnt/sysimage"目录(选择“Continue”确认并继续)。接下需要特别输液椅:当出现是否初始化磁盘的警告窗口时如:
一定要选择"No",以免对硬盘数据造成进一步损坏。
最好选择“OK”确认后进入到带"sh-3.1#"提示符的Bash Shell环境,只要执行相应的命令挂载保存有备份文件的硬盘文件(sdb1),并将数据恢复到硬盘"/dev/sda"中即可。需要注意的是,当前使用的系统环境是光盘中的Linux目录结构。
*>:确认第1块硬盘的分区情况(已无法获得有效分区表信息,并恢复MBR扇区的数据)。
- fdisk -l /dev/sda
- mkdir /tmpdir
- mount /dev/sdb1 /tmpdir
- dd if=/tmpdir/sda.mbr.bak of=/dev/sda bs=512 count=1 //恢复备份数据
完成恢复操作以后,执行"reboot"重启主机即可(注意取出RHEL5的安装光盘)。
2、GRUB引导故障
GRUB是大多数Linux系统默认使用的引导程序,可以通过启动菜单的方式选择进入不同的操作系统(如果有的话)。当"/boot/grub.conf'配置文件丢失,或者关键配置出现错误,或者MBR记录中的引导程序遭到破坏时,Linux主机启动后可能会出现"grub>“的提示符,无法完成进一步的系统启动过程。
如果在该提示符,可以进行编辑,通过输入对应的引导命令(可以参考”/boot/grub/grub,conf"文件中的配置),再执行"boot'命令也可以进行引导Linux系统。
eg>:通过在"grub>"环境中手动输入引导命令启动Linux系统。
- grub>root (hd0,0)
- grub>kernel/vmlinux-2.6.18-8.e15 ro root=/dev/VolGroup00/LogVo100 rhgb quiet
- grub>inited /initrd-2.6.18-8.e15.img
- grub>boot
之后的启动成功与正常启动RHEL5系统的过程是一模一样的。登录进入系统以后,需要找到配置文件"/boot/grub/grub.conf',并修复其中的错误,或者直接重建该文件。具体内容可以参考其他正常主机的同名文件。
.>>>>>>>>>:查看grub.conf启动菜单配置文件的主要内容。 grep -v "^#" /boot/grub/grub.conf
其中,各主要配置项的含义说明:
>:title:指定在启动菜单中显示的操作系统名称。
>:root:指定包含内核等引导文件的/boot分区所在的位置。
>:kernel:指定内核文件所在的位置,内核加载时权限为只读"ro",并通过"root="指定根分区设备文件的位置。
>:initrd:指定启动内核所使用的临时系统镜像文件所在的位置。
由于在"grub>"环境中使用的命令较为复杂,而且一般难以记得相关的命令选项,内核加载参数等。因此用户可以采用另一种修复办法,同样使用RHEL5的安装光盘进入急救模式,如果分区表并未被破坏,则急救模式将会找到硬盘中的Linux根分区,并将其挂载到光盘目录结构中的"/mnt/sysimage/"文件夹中。
进入"sh-3.1"的Shell环境以后,执行"chroot /mnt/sysimage"命令可以将目录结构切换到待修复的Linux系统中。然后重新建立新的grub.conf配置文件即可。
eg:确认待修复的Linux系统分区的挂载情况,并重建grub.conf文件。
- chroot /mnt/sysimage //切换到待修复的Linux系统根环境。
- mount
- .....省略部分内容
- vi /boot/grub/grub.conf //重建grub.conf文件,内容就不写了
- exit //退出chroot环境
- exit //退出sh-3.1环境,系统会自动重启
在上例中,若为执行"chroot /mnt/sysimage"命令,则重新建立的grub.conf配置文件应该位于"/mnt/sysimage/boot/grub/grub.conf"
如果是MBR扇区中的引导程序出现损坏,可能在重建grub.conf配置文件后仍然无法成功启动系统,这时候可以在救援模式的Shell环境重新安装grub
eg:进入待修复的Linux系统根环境,重新将grub引导程序安装到第一块硬盘(sda)中的MBR扇区中。
- chroot /mnt/sysimage
- grub-install /dev/sda
- exit
- exit
上述方法同样适用于在Linux主机中那种Windows系统(不覆盖Linux系统)后导致Linux系统无法启动的情况。因为i对于使用双操作系统的主机,后安装的Windows系统将使用自己的引导数据覆盖MBR扇区中的记录,导致开机后不再出现GRUB菜单从而无法进入Linux系统。如果是后安装Linux系统,GRUB程序将会自动识别硬盘中的Window系统并将其加载到GRUB菜单配置中。
> /etc/inittab文件丢失
"/etcinittab"文件是系统初始化进程init的配置文件,当该文件被误删或者存在错误配置时,可能导致无法启动系统。丢失"/etc/inittab"文件后,启动后将会出现"INIT:No inittab file found"的错误提示信息。
这类故障同样可以在RHEL5安装光盘的急救模式下进行修复。如果文件配置错误,则进行纠正或者从备份文件中进行恢复即可。默认情况下,如果并未使用chroot命令切换环境,则需要修改的文件"/mnt/sysimage/etc/inittab"。
若inittab文件已经丢失,且没有可用的备份。则需要从RHEL5的光盘目录中重新安装initscript软件包。
eg:在急救模式的"sh-3.1#"环境中挂载RHEL5光盘设备,并重新安装initscript软件包,结合rpm 命令的"--replacepkgs"选项用于替代现有文件。
- chroot /mnt/sysimage
- mount /dev/hdc /media/cdrom
- rpm -vhi --replacepkgs /media/cdrom/Server/initscripts-8.45.14.EL.i386.rpm
在急救模式的Shell环境中通常不再保留cdrom连接文件,而直接通过设备文件"/dev/hdc'使用光盘。安装完毕重启系统即可。
> /etc/fstab文件丢失
"/etc/fstab"配置文件决定了Linux系统在启动后如何加载各分区,例如根分区"/"、"/boot"分区等,若这些分区无法挂载,系统也就无法成功启动。丢失"/etc/fstab"文件后,启动时将会出现如下错误提示信息。
同样使用RHEL5的安装光盘进入急救模式的Shell环境中,由于缺少fstab文件,光盘系统将无法找到待修复的Linux分区,因此必须通过手动的方式查找并挂载根分区,然后重建fstab配置文件后重启系统即可。
eg:在急救模式的Shell环境中扫描逻辑卷组,激活逻辑卷,以便找到根分区设备,然后手动挂载根分区,并重建fstab配置文件。
- lvm vgscan //查找逻辑卷
- lvm vgchange -ay /dev/VolGroup00 //激活找到的逻辑卷
- mkdir /tmpdir
- mount /dev/VolGroup00/LogVol00 /tmpdir //挂载根分区到/tmpdir目录
- vi /tmpdir/etc/fstab //重建fstab配置文件,或直接复制备份的文件
3、遗忘root用户的密码
>:通过单用户模式重设root账号的密码(不再说明);
>:通过急救模式重设root账号的密码
若使用RHEL5的安装光盘进入急救模式的Shell环境,则只需切换到待修复Linux系统的根目录环境,直接执行"passwd root"命令重设root用户的密码即可;或者修改 "/etc/shadow"文件,将root用户的密码字段清空,重启,正常进入系统再修改密码。
eg:在急救模式中,切换到待修复的Linux根分区环境,修改root账号的密码。
- chroot /mnt/sysimage
- passwd root
- ....