Linux故障处理系统启动类故障
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux故障处理系统启动类故障相关的知识,希望对你有一定的参考价值。
Linux故障处理(一)系统启动类故障
在Linux系统的启动过程中,涉及MBR主引导记录、GRUB启动菜单、系统初始化配置文件等各方面,其中任何一个环节出现故障都可能会导致系统启动的失常,因此一定要注意做好相关文件的备份工作。(本实验环境为RHEL6)
一、MBR扇区故障
MBR引导记录位于物理硬盘的第一个扇区(512B),该扇区又称为主引导扇区(MBR扇区),除了包含系统引导程序的部分数据以外,还包含了整个硬盘的分区表记录。当主引导扇区发生故障时,将可能无法进入引导菜单,或者因无法找到正确的分区位置而无法加载系统,通过该硬盘引导主机很可能进入黑屏状态。
1、备份MBR扇区数据
由于MBR扇区中包含了整个硬盘的分区表记录,因此该扇区的备份文件必须存放到其他的存储设备中,否则在恢复时将无法读取到备份文件。下面将添加一块/sdb硬盘,将MBR扇区备份到/sdb1分区中(挂载到/hlj目录下)
[[email protected] ~]# mkdir /hlj [[email protected] ~]# mount /dev/sdb1 /hlj [[email protected] ~]# dd if=/dev/sda of=/hlj/sda.mbr.bak bs=512 count=1 记录了1+0 的读入 记录了1+0 的写出 512字节(512 B)已复制,0.000180294 秒,2.8 MB/秒
2、模拟MBR扇区故障
这里使用dd命令,人为地将MBR扇区的记录覆盖,以便模拟MBR扇区被破坏的故障情况(切记要做好备份,而且将备份文件存放到其他硬盘)。例如,执行以下操作可以从设备文件zero中读取512字节的数据,将其覆盖到第1块硬盘(sda),从而破坏MBR扇区中的数据。
[[email protected] ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1
完成上述命令之后重启系统,这是将会出现“Operating system not found”的提示信息,表示无法找到可用的操作系统,因此无法启动主机。
3、从备份文件中恢复MBR扇区数据
由于MBR扇区被破坏以后,已经无法再从该硬盘启动系统,所以需要使用其它硬盘中的操作系统进行引导,或者直接使用RHLH6系统中的安装光盘进行引导。不管使用哪种方法,目的都是相同的,获得一个可以执行命令的Shell环境,以便从备份文件中恢复MBR扇区中的数据。
接下来以用RHEL6安装光盘引导为例,当出现安装向导界面,选择“Rescue installed system”,将以“急救模式”引导光盘中的Linux系统。
之后依次按Enter键接受默认的语言、键盘格式,提示是否配置网卡时一般选择“NO”,然后系统会自动查找硬盘中的Linux分区并尝试将其挂载到“/mnt/sysimage”目录(选择“Continue”确认并继续)。接下来会出现rescue窗口,单击“ok”按钮。
最后,进入到带“bash-4.1#”提示符的Bash Shell环境,只要执行相应的命令挂载保存有备份的硬盘分区(sdb1),并将数据恢复到硬盘“/dev/sda”中即可。当前使用的系统环境是光盘中的Linux目录结构。
因为MBR损坏,已经无法获得有效的分区列表,所以新建一个目录hou,将“sdb1”挂载到目录“/hou”下。
bash-4.1# mkdir /hou bash-4.1# mount /dev/sdb1 /hou
使用dd命令再把sdb1中的MBR备份文件写入到被破坏的sda中。
bash-4.1# dd if=/dev/hou/sda.mbr.bak of=/sda
完成后,执行“reboot”重新启动系统。
二、GRUB引导故障
1.修复grub.conf文件丢失或损坏
GRUB是大多数Linux系统默认使用的引导程序,可以通过启动菜单的方式选择进入不同的操作系统。当配置文件/boot/grub/grub.conf丢失,或者关键配置出现错误,或者MBR记录中的引导程序遭到破坏时,Linux主机启动后只能出现“grub>”的提示符,无法完成进一步的系统启动过程。
这里需要把grub.conf文件提前备份好,如果没有备份则只能重写一份grub.conf文件
[[email protected] ~]#mkdir /hlj
[[email protected] ~]#mount /dev/sdb1 /hlj
[[email protected] ~]# cp /boot/grub/grub.conf /hlj/grub.conf
[[email protected] ~]# rm -rf /boot/grub/grub.conf
[[email protected] ~]# reboot
若在该提示符后可以进行编辑,则通过输入对应的引导命令(可参考其他相同版本RHEL系统中/boot/grub/grub.conf文件的引导语句),然后在执行“boot”命令即可正常引导Linux系统。
grub>root (hd0,0) grub>kernel /vmlinuz-2.6.32-71.el6.i686 ro root=/dev/mapper/VolGroup-lv_root rd_LVM_LV=VolGroup/lv_root rd_LVM_LV=VolGroup/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us crashke rnel=auto rhgb quiet grub>initrd /initramfs-2.6.32-71.el6.i686.img grub>boot
之后的启动过程与正常启动RHEL6系统的过程是一样的。登录进入系统以后,需要找到配置文件/boot/grub/grub.conf,并修复其中的错误,或者直接重建该文件。具体内容可以参考其他正常主机中的同名文件。
在RHEL6中,执行以下命令可以查看GRUB配置文件的grub.conf的默认内容。
[[email protected] ~]# grep -v "^#" /boot/grub/grub.conf default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Red Hat Enterprise Linux (2.6.32-71.el6.i686) root (hd0,0) kernel /vmlinuz-2.6.32-71.el6.i686 ro root=/dev/mapper/VolGroup-lv_root rd_LVM_LV=VolGroup/lv_root rd_LVM_LV=VolGroup/lv_swap rd_NO_LUKS rd_NO_MD rd_NO_DM.UTF-8 KEYBOARDTYPE=pc KEYTABLE=us crashkernel=auto rhgb quiet initrd /initramfs-2.6.32-71.el6.i686.img
其中,各主要配置项含义如下。
■ title:指定在启动菜单中显示的操作系统名称。
■ root: 指定包含内核等引导文件的/boot分区所在的位置。
■ kernel:指定内核文件所在的位置,内核加载时权限只读“ro”,并通过“root=”指定根分区的设备文件位置。
■ initrd: 指定启动内核所使用的临时系统镜像文件所在的位置。
由于在“grub>”环境中使用的命令较为复杂,而且一般也难以记住相关的命令选项、内核加载参数等,因此用户可以采用另一种修复办法,同样使用RHEL6的安装光盘引导进入急救模式(参考上面修复MBR),若分区表未被破坏,则急救模式将会找到硬盘中的Linux根分区,并将其挂载到光盘目录结构中的/mnt/sysimage/文件夹中。
进入“bash-4.1#”的Shell环境以后,执行“chroot /mnt/sysimage”命令可以将目录结构切换到待修复的Linux系统中,然后重写(或通过之前备份的文件恢复)grub.conf配置文件即可。
2.MBR中的grub引导程序损坏
如果是MBR扇区中的引导程序出现损坏,可能在重建grub.conf配置文件后仍然无法成功启动系统,这时候可以通过RHEL6救援模式的Shell环境重新安装grub引导程序。切换到待修复的Linux系统根环境,执行“grub-install /dev/sda”命令可以重新将grub引导程序安装到第一块硬盘(sda)的MBR扇区。(grub.conf文件丢失或损坏此方式不可用)
上述方法同样适用于在Linux主机中重装windows系统(不覆盖Linux系统)后导致Linux系统无法启动的情况。因为对于适用双操作系统的主机后,安装的Windows系统将适用自己的引导数据覆盖MBR扇区中的记录,导致开机后不再出现GRUB菜单从而无法进入Linux系统。如果是后安装的Linux系统,GRUB程序将会自动识别硬盘中的Windows系统并将其加载到GRUB菜单配置中。
以上是关于Linux故障处理系统启动类故障的主要内容,如果未能解决你的问题,请参考以下文章