常见linux系统故障排查与修复

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了常见linux系统故障排查与修复相关的知识,希望对你有一定的参考价值。

一、常见系统故障:


  服务器能正常启动固然是极好的,但是由于管理员误操作,或者是磁盘的物理扇区损坏等都有可能对系统造成致命的打击,让系统无法启动,这时作为管理员的你不能坐视不管了吧?这就要求管理员的你要能应对系统的各种错误导致的系统无法启动。

  我们知道系统的启动是分为多个步骤的,任意一个环节的错误都会使系统无法启动所以像是关键性的数据最好要做好备份工作以免出错时无法应对。因为有的数据可以修复,有的数据也是无法修复的,下面探讨一下可修复部分的数据的修复吧:

    1.  MBR中grub损坏,1_5阶段的数据损坏,2阶段的grub损坏

    2.  initramfs*.img文件损坏,内核文件损坏

    3.  /boot/grub/grub.conf文件丢失

    4.  /etc/fstab丢失,无法挂载根等文件系统

    5.  /boot 目录全部的文件丢失

    6.  root密码忘记

    7.  为grub设置密码,开机时生效,保护root密码被恶意修改等

二、常见故障的判断:

  在系统无法启动时,会有许多不同的错误提示或者错误现象,管理员可以针对不同的现象判断究竟是哪个环节除了问题,才能针对问题,对症下药

1.  1阶段和1_5阶段出问题时会开机执行完Bios自检后直接报错

技术分享


2.  前面两个阶段顺利通过,到了执行/boot/ 下面的第二个阶段时的程序调用/boot/grub/grub.conf 时文件丢失或者/boot/下内核文件和initramfs*.img 文件丢失都会造成卡在第二个阶段:丢失initramfs文件时会在过了开机选择内核启动之后卡住不动,没有任何提示(在/boot/grub /grub.conf 配置文件中定义了timeout时间,会过了倒计时,然后没有任何提示)如果是丢失grub.conf 是会进入grub>提示符由管理员指定内核文件和initramfs文件位置

内核文件丢失报错:

技术分享

grub.conf文件丢失:

技术分享

3.  /etc/fstab丢失:

系统可以开机,但是开机时会卡好长时间,因为许多服务等待超时无法启动,此时磁盘按照默认以只读挂载根,这个挂载是在开机时挂载的,因为没有fstab文件所以无法重新挂载根文件系统以及其他的系统,没有运行级别

4.  为grub设置了密码会在开机进入内核启动时,想要修改grub和内核的参数或者进入系统时需要输入密码,当然忘记这样的密码也只能使用光盘引导进入救援模式修改配置文件/etc/grub/grub.conf 把相应的密码行删除即可

技术分享

修改grub需要密码

技术分享

开机需要密码:

技术分享

 

三、故障修复:

1.  使用光盘引导进入救援模式:

  之所以介绍这种模式是因为,系统的绝大部分修复都需要进入这种模式,因此先来介绍这种模式如何进入吧!

(1) 开机执行BIOS时看提示一般是按ESC键或者F2等键,进入启动项选择,不同的版本bios差别较大,这里将不一一介绍,当然如果是优盘或者网络引导,只是选择的时候做相应的选择

技术分享

(2) 通过光盘引导便可进入经典的救援模式界面:

技术分享

注:其中第一项是安装或者升级现有的系统,第二项是完全全新安装新的操作系统,系统没有操作系统是可选这一项。第三项就是我们要说的救援模式了!第四项和第五项分别是从本地硬盘启动和内存检测

(3)选择了救援模式之后就是一大串光盘启动时的启动日志内核加载等信息,最后会让我们选择语言,选择键盘类型,默认选择英语和us类型的键盘模式就行了!

技术分享

(4)接下来就是设置网络,如果是从本地直接引导则不需要网络了,如需网络当然选择yes即可

技术分享

(5) 最后在进入rescue模式是会提示将你的系统根挂载至 /mnt/sysimage,以及存储在SAN时选择高级等提示信息,因为我是从本地修复,直接continue即可

技术分享

    接 下来内核会检测你的根文件系统在哪个硬盘上,并将返回提示信息,这里我将修复第一个Centos 6.8的系统选择OK即可,选择后再次确认,你的根挂载至/mnt/sysimage,你可以通过执行chroot /mnt/sysimage 将文件系统的根切换至你原来操作系统的根,因为你现在是在光盘的根上面,最后还会再次提示你的根文件系统挂载路径,选择ok即可,接着会有三个选项选择启 动一个shell。

 技术分享

技术分享



(6)终于进入了shell,又回到了我们熟悉的命令行模式了!进入了shell后我们就可以进行各种修复啦!


2.  修复grub程序:

  根据前面图形化的提示修复grub需要:进入rescue模式,切换根,安装grub,安装完后两次退出,选择重启即可,需要注意的是安装grub有时可能需要执行两次才能修复,如果报错,可以再次执行

技术分享

修复grub的grub-install的命令依赖于/boot/grub/目录下的文件

技术分享

在没有这些文件时,grub-install可以生成这些文件。


3.  内核文件或者initramfs*.img文件丢失


  这两个文件丢失时系统会卡在grub>提示符下。同样进入rescue模式安装内核,或者生成initramfs*.img文件

  进入rescue模式重新安装内核文件:安装内核文件可以将内核文件和initramfs文件同时生成,也可以使用命令单独生成

技术分享

  单独生成initramfs文件命令:其中使用反向单引号将当前内核版本号生成,并在命令后面给命令传一个版本的参数,因为版本和当前版本一样,所以同样使用反向单引号生成版本号:下面有两条命令第一条是用于rhel6的版本,下面的是rhel5的版本的

技术分享


4.  grub.conf 配置文件格式与修复:

技术分享


default=0:  定义了没有选择内核菜单的启动项时选择第一个内核启动。

timeout=5 : 定义了没有任何操作时5s的超时时间

splashimage=(hd0,0)/grub/splash.xpm.gz   定义了开机时内核选择菜单的背景图片,可以不写这一行,但是写错也会导致机器无法启动!

hidemenu:   隐藏内核选择菜单,按任意键出现选择菜单,可以不写这一行

title:内核名字标题

root(hd0,0) :  相对下面的内核和initrd全局定义root为第一块磁盘的第一个分区,此处的root不是真真的root,而是开机时的/boot 分区,因为bootloader开机还没有加载内核以及 / 分区。加载的内核需要通过/boot 分区驱动加载 / 分区和内核

kernel :  定义内核文件位置,向内核文件传递必要的参数。并且指定  /  分区所在的位置

initrd:  包括加载根分区的必要的驱动以及可以在内存当中解压释放出虚根用于加载真正的内核文件

 如果仅仅丢失/boot/grub/grub.conf 文件,可以在开机时看到grub>的命令行,直接指定kernel和initramfs文件的目录即可启动,然后开机编写文件即可,当然也可以在救援模式编写该文件,保存重启机器即可


5.  /etc/fstab文件丢失:

  如 果是第一次丢失,系统会根据/etc/mtab 文件启动,第二次时就会报许多错误,文件系统无法正常挂载,系统日志,系统服务等许多就会出现问题,因为系统默认是以只读启动的,等很长时间后系统会启 动,此时系统没有挂载根等必要文件系统,没有运行级别,可以重新挂载文件系统为读写模式,当然也可以在系统启动时修改根为读写模式。编写/etc /fstab


6.  如果/boot目录和/etc/fstab 文件均丢失:

   需要第一次先进入rescue模式编写/etc/fstab文件重启,再次进入系统修复/boot .再此需要注意的是如果文件系统是建立在逻辑卷上面的话,在丢失/etc/fstab时,需要进入系统后先激活逻辑卷的卷组,卷组激活后,逻辑卷相应激 活,使用命令vgchange  -ay激活所有逻辑卷,把激活的根,boot等分区挂载至临时目录下面,并将/etc/fstab信息写入挂载的根分区,(注意此时要是/usr/  /var 等目录是单独的分区也需要写入/etc/fstab 文件中,因为如果没有挂载这两个分区许多的命令和库文件会调用失败,系统的许多命令都依赖这两个目录下面的库文件等),写好之后,重启,让系统识别现在的 挂载的根分区重新安装grub,和内核,并编写/boot/grub/grub.conf 文件重启即可


7.  修复root密码忘记:


(1) rhel6及其之前的版本

开机过了bios自检之后按任意键,进入内核选择菜单,由下面的提示信息可知,按a可以给内核传递参数

技术分享

  系 统启动的第一个用户程序本来是init,根据inittab文件的配置进入系统初始化,可以在后面直接输入数字1,s,S,single,中任意一个,或 者init=/bin/bash,前面的是进入了单用户模式,后面的是直接启动了/bin/bash 没有进入用户模式。

技术分享

  进入之后直接修改root密码即可:

技术分享

(2) rhel7的版本:

同样进入内核选择界面:

技术分享

  按e键进入编辑模式:找到linux16开头这一行:移动光标至ro ,将之后的后半行删掉,注意不要删除initrd这一行!删完之后输入rd.break,并且键入ctrl+x执行

技术分享

emergency 模式:

技术分享

  执行重新挂载根分区为读写模式,改变当前根,修改root密码,执行

touch /.autorelabel (因为默认开启了selinux,所以要对系统文件重新打标签,在退出时执行这一过程有点慢,需要耐心等待),两次退出exit。

技术分享

技术分享

  等待结束开机时,此时rhel7的密码已经更新!


  linux的修复也非一日之功需要我们共同努力长久的积累经验,维护好它!



本文出自 “jackcui” 博客,转载请与作者联系!

以上是关于常见linux系统故障排查与修复的主要内容,如果未能解决你的问题,请参考以下文章

linux系统故障分析与排查

Linux的系统故障分析与排查

Linux系统故障分析与排查--日志分析

linux运维系统故障排查思路及常见故障处理

linux运维系统故障排查思路及常见故障处理

排查一些常见的系统故障