您当前的位置:首页 > 电脑百科 > 软件技术 > 操作系统 > linux

Linux系统故障问题汇总,值得永久收藏

时间:2019-09-05 10:52:24  来源:  作者:

一、 处理linux系统故障的思路

作为一名优秀的linux运维工程师,一定要有一套清晰、明确的解决故障思路,当问题出现时,才能迅速定位、解决问题,在开始本文学习之前,我根据多年工作和处理问题和故障的经验,总结出了一套处理问题的一般思路,供大家参考:

1、 重视报错提示信息:每个错误的出现,都是给出错误提示信息,一般情况下这个提示基本定位了问题的所在,因此一定要重视这个报错信息,如果对这些错误信息视而不见,问题永远得不到解决。

2、 查阅日志文件:有时候报错信息只是给出了问题的表面现象,要想更深入的了解问题,必须查看相应的日志文件,而日志文件又分为系统日志文件(/var/log)和应用的日志文件,结合这两个日志文件,一般就能定位问题所在。

3、 分析、定位问题:这个过程是比较复杂的,根据报错信息,结合日志文件,同时还要考虑其它相关情况,最终找到引起问题的原因。

4、 解决问题:找到了问题出现的原因,解决问题就是很简单的事情了。

从这个流程可以看出,解决问题的过程就是分析、查找问题的过程,一旦确定问题产生的原因,故障也就随之解决了。看似简单明了的思路,但是真正能重视这个思路的、按照这个思路处理问题的却很少,衷心的希望大家在处理故障的时候,能静下心来,先整理思路,然后有目的的去处理问题。

二、 忘记linux root密码或进入单用户方法

这个问题出现的几率是很高的,也是linux运维最基础的技能,要解决这个问题,在linux下非常简单,只需重启linux系统,然后引导进入linux的单用户模式(init 1)就可以搞定了,由于单用户模式是不需要输入登录密码的,因此,可以直接登录系统,修改root密码即可解决问题。

目前企业线上环境,最常用的Linux就是centos6.x和7.x版本,那么这里首先以RHEL/Centos6.x版本为例,介绍下如何进入单用户并重置root密码,操作步骤如下:

1、 重启系统,待linux系统启动到grub引导菜单时,按esc键,找到当前系统引导选项,如图所示:如果有多个可用内核,这里就有多个引导选项。

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

2、 通过方向键将光标放到需要使用的系统引导内核选项上,然后按键盘字母“e”,进入编辑状态,如图所示:

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

3、然后通过上下键,选中带有kernel指令的一行,继续按键盘字母“e”,编辑该行,在行末尾加个空格,然后添加single,类似下图所示:

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

4、 修改完成,按回车键,返回到刚才的界面。

5、 最后按键盘“b”,系统开始引导。

这样系统就启动到了单用户模式下,这里的单用户与windows下的安全模式类似,在单用户模式下,只是启动最基本的系统,网络以及应用服务均不启动。单用户模式启动完毕,系统会自动进入到命令行状态下,然后直接执行命令“passwd”,接着敲回车,系统会提示输入新的root密码两次,最后会看到修改密码成功的提示,这样就完成了root密码的修改。如果需要正常启动系统,现在只需输入“init 3”,就进入了多用户模式。用root用户重新登录系统,看看设置的新密码是否生效。

在RHEL/Centos7.x版本之后,Linux的机制发生了较大变化,在系统引导方面,使用了grub2代替了之前的grub引导,init初始化程序也更换成了systemd初始化,随之带来的root密码重置的方法也有所改变,,下面就介绍一下在Centos7.5版本中,忘记root密码的处理方法,操作步骤如下:

1、 重启系统,待linux系统启动到grub2引导菜单时,找到当前系统引导选项,如果有多个可用内核,这里就有多个引导选项,按e键,如下图所示:

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

2、 按e键后,出现如下图所示界面,通过方向键将光标放到linux16引导行所在行尾,然后添加以下内容:

init=/bin/sh
Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

3、 添加完成,按键Ctrl+x启动shell引导,最后进入单用户模式。

4、 挂载根分区为可读写模式,执行如下命令:

mount -o remount,rw /

然后,就可以执行“passwd”命令重置密码了,这里有一点需要注意,如果系统中开启有selinux,还需在根分区创建autorelabel文件,否则系统无法正常启动,操作命令如下:

touch /.autorelabel

5、密码修改完成后,直接执行reboot命令已经无效,此时需要输入全路径命令,操作如下:

exec /sbin/init

这样就完成了密码重置,正常登录系统,查看密码是否修改成功。

三、 linux系统无法启动的解决办法

导致linux无法启动的原因有很多,常见的原因有如下几种:

1、 文件系统配置不当,比如/etc/inittab文件、/etc/fstab文件等配置错误或丢失,导致系统错误,无法启动。

2、 非法关机,导致root文件系统破坏,也就是linux根分区破坏,系统无法正常启动

3、 Linux内核崩溃,从而无法启动

4、 系统引导程序出现问题,比如grub丢失或者损坏,导致系统无法引导启动。

5、 硬件故障,比如主板、电源、硬盘等出现问题,导致linux无法启动。

从这些常见的故障可知,导致系统无法启动的主要有两个问题,硬件原因和操作系统原因,对于硬件出现的问题,只需通过更换硬件设备,即可解决,而对于操作系统出现的问题,虽然出现的问题可能千差万别,不过在多数情况下都可以用相对简单统一的一些方法来恢复系统,下面我们就针对上面提出的几个问题,结合RHEL/Centos Linux系统环境,给出一些常用的、普遍的解决问题的方法。

3.1、/etc/fstab文件丢失,导致系统无法启动

/etc/fstab文件存放了系统中文件系统的相关信息,如果正确的配置了该文件,那么在linux启动时,系统会读取此文件,自动挂载linux的各个分区,如果此文件配置错误,或者丢失,就会导致系统无法启动,具体的故障现象是在检测mount partition时出现:

starting system logger

此后系统启动就停止了。

针对这个问题,我们的第一思路就是想办法恢复/etc/fstab这个文件的信息,只要恢复了此文件,系统就能自动挂载每个分区,正常启动。可能很多读者首先想到的是将系统切换到单用户模式下,然后手动挂载分区,最后结合系统信息,重建/etc/fstab文件。

但是这种方法是行不通的,因为fatab文件丢失导致linux无法挂载任何一个分区,即使linux还能切换到单用户下,那么此时的系统也只是一个read-only的文件系统,无法向磁盘写入任何信息。

我们介绍另外一个方法,就是利用linux rescue修复模式登录系统,进而获取分区和挂载点信息,重构/etc/fstab文件。

这里以Centos6.9为例,其它版本方法类似,首先将系统第一章光盘放入光驱,设置BOIS从光驱启动,这样系统就从光驱引导,如下图所示,选择“Rescue installed system”一项,然后回车,系统开始引导进入rescue模式。

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

接着系统自动开始引导,进入下图所示画面:

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

这里是选择模式使用的语言,可以按照自己需要设定,我们这里选择“English“,然后按tab键,选中“ok”,回车进入下一步。

下面进入的是键盘选择界面,如下图所示,这里选择默认的“us”即可。

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

下面进入网络配置界面,如下图所示:

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

这里是选择是否启用网络,由于系统已经无法启动,我们已经在linux系统上进行操作了,启用网络与否都无所谓。这里选择不启用。

下面到了最关键的步骤了,如下图所示,修复模式会自动将系统的所有分区挂载到/mnt/sysimage目录下,选择“Continue”,则修复环境进入到read-write状态下,可以对分区进行读写操作,选择“Read-Only”,修复环境进入到只读模式,由于我们要重建fstab文件到/etc目录下,因此选择“Continue”进入可读写模式下。

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

下面是一个友情提示界面,如下图所示,由于fstab文件丢失,修复模式找不到任何可挂载的分区,从这里可知,修复模式在这里也读取/etc/fstab文件,回车,进入下一步。

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

下面是选择下一步要执行的动作,如下图所示,这里选择“shell Start shell”进入修复模式命令行。

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

最后,就进入了修复环境下,可以进行操作了。如下图所示

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

上面详细演示了如何进入linux的修复模式,其实很多情况下,linux无法启动时,都可以通过这个方式登录系统进行修复和更改操作。

下面是恢复/etc/fstab文件的详细过程,首先查看一下系统分区情况,如下所示:

bash-4.1# fdisk -l
Disk /dev/sda: 42.9 GB, 42949672960 bytes
255 heads, 63 sectors/track, 5221 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Device Boot Start End Blocks Id System
/dev/sda1 * 1 25 200781 83 Linux
/dev/sda2 26 1300 10241437+ 83 Linux
/dev/sda3 1301 1682 3068415 83 Linux
/dev/sda4 1683 5221 28427017+ 5 Extended
/dev/sda5 1683 1873 1534176 83 Linux
/dev/sda6 1874 2064 1534176 83 Linux
/dev/sda7 2065 2255 1534176 83 Linux
/dev/sda8 2256 2382 1020096 83 Linux
/dev/sda9 2383 2484 819283+ 82 Linux swap / Solaris
/dev/sda10 2485 5221 21984921 83 Linux

因为分区并没有损坏,通过fdisk命令可以查看到系统分区的完整信息,但是每个分区对应的label name信息我们还不知道,下面通过tune2fs命令查看每个分区对应的label name:

bash-4.1# tune2fs -l /dev/sda1 |grep mounted
Last mounted on: /boot
bash-4.1# tune2fs -l /dev/sda2 |grep mounted
Last mounted on: /usr
bash-4.1# tune2fs -l /dev/sda3 |grep mounted
Last mounted on: /
bash-4.1# tune2fs -l /dev/sda5 |grep mounted
Last mounted on: /var
bash-4.1# tune2fs -l /dev/sda6 |grep mounted
Last mounted on: /tmp
bash-4.1# tune2fs -l /dev/sda7 |grep mounted
Last mounted on: /home
bash-4.1# tune2fs -l /dev/sda8 |grep mounted
Last mounted on: /opt
bash-4.1# tune2fs -l /dev/sda10 |grep mounted
Last mounted on: /data

这样,就得到了所有分区的挂载点信息,接下来就可以构造一个fstab文件了。

小技巧:可以参考其它系统中fstab文件的格式,结合本系统的分区和挂载点信息,构造出自己的fstab文件来。

由于fstab文件是存放在系统根目录下的,因此需要挂载原来系统的根分区,从上面可知根分区对应的设备名为/dev/sda3,接着在修复模式创建的临时根分区下创建一个

挂载点,然后挂载原来系统的根分区。操作过程如下所示:

bash-4.1# pwd
/
bash-4.1# mkdir temp
bash-4.1# mount /dev/sda3 /temp
bash-4.1# df 
Filesystem 1K-blocks Used Available Use% Mounted on
/dev 515644 0 515644 0% /dev
/tmp/loop0 79872 79872 0 100% /mnt/runtime
/dev/sda3 2972268 259916 2558932 10% /temp

这样以来,原有根分区的文件全部挂载到了/temp目录下,接着就可以创建我们需要的fstab文件了。

重构好的fstab文件内容如下:

bash-4.1# cat /temp/etc/fstab
LABEL=/ / ext4 defaults 1 1
LABEL=/boot /boot ext4 defaults 1 2
devpts /dev/pts devpts gid=5,mode=620 0 0
tmpfs /dev/shm tmpfs defaults 0 0
LABEL=/home /home ext4 defaults 1 2
LABEL=/opt /opt ext4 defaults 1 2
proc /proc proc defaults 0 0
sysfs /sys sysfs defaults 0 0
LABEL=/data /data ext4 defaults 1 2
LABEL=/usr /usr ext4 defaults 1 2
LABEL=/var /var ext4 defaults 1 2
LABEL=SWAP-sda9 swap swap defaults 0 0

配置完毕,保存退出,然后重启系统,看系统是否能正常启动。

bash-4.1#reboot

3.2、CentOS下误删除/boot目录修复方法

这个问题经常发生在新手、研发身上,误删除的原因很多,但是并不重要,作为专业背锅侠,要的就是误删除后怎么回复,一起来看下这个现象吧,看下图:

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

出现这个情况,可能的原因有:系统引导出现问题、/boot目录误删除、grub配置错误。

不管是什么原因,这里给个终极方法,也就是一定能解决问题的方法,保证大家屡试不爽。

要解决这个问题,还是要用到一个centos的U盘镜像或者光盘镜像,通过系统镜像进入rescue修复模式,然后就可以大展拳脚了。

下面看看如何在centos7.x版本下,进入rescue修复模式,然后修复系统引导。

首先通过系统镜像盘进入系统引导模式,如下图所示:

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

然后选择Troubleshooting,回车进入下图界面:

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

这里选择"Rescue a Centos system", 回车,进入如下界面:

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

这是进入rescue修复模式的几个选项,跟centos6.x版本类似,这里选择数字1,进入可读、写模式。

等待片刻,即可进入下图所示界面:

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

敲回车,进入命令行模式,然后执行chroot命令,如下图所示:

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

这样,就变更多了root目录下,相当于进入到了真实系统环境下了。

接着,将系统镜像挂载到任意一个目录下,这里挂载到/mnt下,挂载系统镜像的目的是将系统镜像作为yum源,然后安装系统丢失的内核模块,并安装grub2引导程序。

bash-4.2# mount /dev/cdrom /mnt

下面开始创建一个yum源仓库,用于从本地系统镜像中读取rpm包,进行内核模块的安装。如下图所示:

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

重点来了,第一步是重新安装内核,这里使用yum 的reinstall命令,千万别用install来安装,执行如下命令:

bash-4.2# yum reinstall kernel

这样,内核模块安装完成了,接下来,还需要重新安装grub2,并重新生成 grub2 配置文件 grub.cfg,执行如下图所示操作:

Linux老鸟给出的Linux系统故障问题汇总,值得永久收藏

 

执行完成后,两次执行exit命令退出后,系统会自动重启,完成boot引导的修复,不出意外的话,系统已经可以畅通无阻的启动了。

四、 Linux系统无响应(死机)问题分析

Linux服务器在长期运行后,难免出现无响应现象,俗称“死机”。在系统死机后,屏幕一般会输出故障信息,键盘失去响应,这种情况的常见处理办法就是重启系统,不过在重启前,要重点关注下屏幕的输出信息,因为其提示的可能是引起死机的主要原因,对解决问题是有很大帮助的。

其实还有另一个方法,就是通过串口直连线连接客户机和服务器,将服务器的出错详细信息发送到客户机上。

引起服务器死机的原因有很多,但主要有两个方面:软件问题和硬件问题。下面总结了造成Linux系统死机的常见原因和解决问题的思路:

1)系统硬件问题,主要是有SCSI卡、主板、RAID卡、HBA卡、网卡、硬盘等硬件设备导致的。在这种情况下需要定位硬件故障细节,通过更换硬件来解决问题。

2)外围硬件问题,主要是网络问题导致的。此时就需要检查网络设备、网络参数等方面查找和解决问题。

3)软件问题,主要是系统内核bug、应用软件bug、驱动程序bug等。在这种情况下就需要从升级内核、修复程序bug、更新驱动程序等方面来解决问题。

4)系统设置问题:主要是系统参数设置不当导致,可以通过恢复系统到默认状态,关闭防火墙等方面来解决问题。

五、其它故障的一般解决方案

如果是linux的引导程序出现问题,那么也可以通过光盘引导或U盘引导的方式进入linux rescue模式,然后修改对应的引导程序或者重新安装引导程序。

如果linux内核崩溃或者丢失,同样可以先进入linux rescue模式下,然后加载root分区,最后重新编译内核。

如果出现了最坏的情况,文件系统破坏严重,同时内核也崩溃,那么此时重新安装系统反而比较容易,在这种情况下可以先将linux上有用的数据和文件备份转移到其它设备,然后对整个文件系统进行全新安装。

在这里我们不可能对每个出现的问题,都给出详细的解决方案,问题都是千差万别的,每个问题的处理都不尽相同,本专栏要传授给大家的是当linux系统出现问题后,解决问题的一般思路和通用策略,熟练掌握了这些技巧,处理任何linux问题都能游刃有余。



Tags:Linux 故障   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
有时候会遇到一些疑难杂症,并且监控插件并不能一眼立马发现问题的根源。这时候就需要登录服务器进一步深入分析问题的根源。那么分析问题需要有一定的技术经验积累,并且有些问题涉及到的领域非常广,才能定位到问题。所以...【详细内容】
2019-09-16  Tags: Linux 故障  点击:(156)  评论:(0)  加入收藏
一、 处理linux系统故障的思路作为一名优秀的linux运维工程师,一定要有一套清晰、明确的解决故障思路,当问题出现时,才能迅速定位、解决问题,在开始本文学习之前,我根据多年工作...【详细内容】
2019-09-05  Tags: Linux 故障  点击:(195)  评论:(0)  加入收藏
▌简易百科推荐
作用显示文件或目录所占用的磁盘空间使用命令格式du [option] 文件/目录命令功能显示文件或目录所占用的磁盘空间一些写法的区别du -sh xxx 显示总目录的大小,但是不会列出...【详细内容】
2021-12-23  mitsuhide1992    Tags:du命令   点击:(12)  评论:(0)  加入收藏
什么是linux内核linux就像是一个哲学的最佳实践。如果非要对它评价,我真的不知道该怎么赞叹,我只能自豪地说着:“linux的美丽简直让人沉醉。”我只能说是我处在linux学习的修炼...【详细内容】
2021-12-23  linux上的码农    Tags:linux内核   点击:(15)  评论:(0)  加入收藏
本文将比较 Linux 中 service 和 systemctl 命令,先分别简单介绍这两个命令的基础用法,然后进行比较。从 CentOS 7.x 开始,CentOS 开始使用 systemd 服务来代替 service服务(dae...【详细内容】
2021-12-23  软件架构    Tags:systemctl   点击:(14)  评论:(0)  加入收藏
mv是move的缩写,可以用来移动文件或者重命名文件名,经常用来备份文件或者目录。命令格式mv [选项] 源文件或者目录 目标文件或者目录命令功能mv命令中第二个参数类型的不同(...【详细内容】
2021-12-17  入门小站    Tags:mv命令   点击:(23)  评论:(0)  加入收藏
大数据技术AI Flink/Spark/Hadoop/数仓,数据分析、面试,源码解读等干货学习资料 98篇原创内容 -->公众号 Linux sed 命令是利用脚本来处理文本文件。sed 可依照脚本的指令来处...【详细内容】
2021-12-17  仙风道骨的宝石骑士    Tags:sed命令   点击:(22)  评论:(0)  加入收藏
Node是个啥?  写个东西还是尽量面面俱到吧,所以有关基本概念的东西我也从网上选择性地拿了下来,有些地方针对自己的理解有所改动,对这些概念性的东西有过了解的可选择跳过这段...【详细内容】
2021-12-15  linux上的码农    Tags:node   点击:(25)  评论:(0)  加入收藏
难道只有我一个人觉得Ubuntu的unity桌面非常好用吗?最近把台式机上面的Ubuntu 16.04格式化了,装了黑苹果用了一周,不得不说,MacOS确实很精美,软件生态比Linux丰富很多,比Windows简...【详细内容】
2021-12-14  地球末日村    Tags:ubuntu   点击:(41)  评论:(0)  加入收藏
简介Netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 (Multicast Memberships) 等等。输出信息含义执行net...【详细内容】
2021-12-13  窥镜天    Tags:Linux netstat   点击:(28)  评论:(0)  加入收藏
对于较多数量的文件描述符的监听无论是select还是poll系统调用都显得捉襟见肘,poll每次都需要将所有的文件描述符复制到内核,内核本身不会对这些文件描述符加以保存,这样的设计...【详细内容】
2021-12-13  深度Linux    Tags:Linux   点击:(19)  评论:(0)  加入收藏
今天,我们来了解下 Linux 系统的革命性通用执行引擎-eBPF,之所以聊着玩意,因为它确实牛逼,作为一项底层技术,在现在的云原生生态领域中起着举足轻重的作用。截至目前,业界使用范...【详细内容】
2021-12-10  架构驿站    Tags:eBPF   点击:(29)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条