1)重视报错提示信息。每个错误的出现都是给出错误提示信息,一般情况下这个提示信息基本定位了问题的所在,因此一定要重视这个报错信息,如果对这些错误信息视而不见,问题永远得不到解决。
2)查阅日志文件。有时候报错信息只是给出了问题的表面现象,要想更深入地了解问题,必须查看相应的日志文件。日志文件又分为系统日志文件(/var/log)和应用日志文件,结合这两个日志文件,一般就能定位问题所在。
3)分析、定位问题。这个过程是比较复杂的,根据报错信息,结合日志文件,同时还要考虑其他相关情况,最终找到引起问题的原因。
4)解决问题。找到了问题出现的原因,解决问题就是很简单的事情了。从这个流程可以看出,解决问题的过程就是分析、查找问题的过程,一旦确定问题产生的原因,故障也就随之解决了。看似简单明了的思路,但是真正能重视这个思路的、按照这个思路处理问题的却很少,在处理故障的时候,能静下心来,先整理思路,然后有目的地去处理问题。
## 仅供参考
忘记Linux root密码这个问题出现的概率是很高的,也是Linux运维基础的技能。要解决这个问题,在Linux下非常简单,只需重启Linux系统,然后引导进入Linux的单用户模式(init 1)就可以搞定了,由于单用户模式是不需要输入登录密码的,因此,可以直接登录系统,修改root密码即可解决问题。目前企业的线上环境,最常用的Linux是CentOS6.x和CentOS7.x版本,那么这里首先以RHEL/CentOS6.x版本为例,介绍如何进入单用户并重置root密码,操作步骤如下所述。
1)重启系统,待Linux系统启动到GRUB引导菜单时,按〈Esc〉键,找到当前系统引导选项,如图所示,如果有多个可用内核,这里就有多个引导选项。
2)通过〈↑〉〈↓〉键将光标放到需要使用的系统引导内核选项上,然后按〈E〉键,进入编辑状态,如图所示。
3)然后通过〈↑〉〈↓〉键,选中带有kernel指令的一行,继续按〈E〉键,编辑该行,在行末尾加个空格,然后添加single,如图所示。
4)修改完成,按〈Enter〉键,返回到刚才的界面。
5)最后按〈B〉键,系统开始引导。
这样系统就启动到了单用户模式下,这里的单用户与Windows下的安全模式类似,在单用户模式下,只是启动最基本的系统,网络以及应用服务均不启动。单用户模式启动完毕,系统会自动进入到命令行状态下,直接执行命令passwd,按〈Enter〉键,系统会提示输入新的root密码两次,最后会看到修改密码成功的提示,这样就完成了root密码的修改。如果需要正常启动系统,现在只需输入init3,就进入了多用户模式。用root用户重新登录系统,看看设置的新密码是否生效。
在RHEL/CentOS7.x版本之后,Linux的机制发生了较大变化,在系统引导方面,使用了GRUB2代替了之前的GRUB引导,init初始化程序也更换成了systemd初始化,随之带来的root密码重置的方法也有所改变。下面就介绍一下在CentOS7.5版本中,忘记root密码的处理方法,操作步骤如下所述。
1)重启系统,待Linux系统启动到GRUB2引导菜单时,找到当前系统引导选项,如果有多个可用内核,这里就有多个引导选项,按〈E〉键,如图所示。
2)按〈E〉键后,出现如图所示的界面,通过〈↑〉〈↓〉键将光标放到Linux16引导行所在行尾,然后添加以下内容:init=/bin/sh
3)添加完成,按〈Ctrl+X〉组合键启动shell引导,最后进入单用户模式。
4)挂载根分区为可读写模式,执行如下命令:
touch /.autorelabel
5)密码修改完成后,直接执行reboot命令已经无效,此时需要输入全路径命令,操作如下:
exec /sbin/init
这样就完成了密码重置,正常登录系统,查看密码是否修改成功。
导致Linux无法启动的原因有很多,常见的原因有如下几种。
➢ 文件系统配置不当,例如/etc/inittab文件、/etc/fstab文件等配置错误或丢失,导致系统错误,无法启动。
➢ 非法关机,导致root文件系统破坏,也就是Linux根分区破坏,系统无法正常启动。
➢ Linux内核崩溃,从而无法启动。
➢ 系统引导程序出现问题,例如,GRUB丢失或者损坏,导致系统无法引导启动。
➢ 硬件故障,例如,主板、电源和硬盘等出现问题,导致Linux无法启动。
从这些常见的故障可知,导致系统无法启动主要有两个原因,硬件原因和操作系统原因。对于硬件出现的问题,只需通过更换硬件设备,即可解决;而对于操作系统出现的问题,虽然出现的问题可能千差万别,不过多数情况下都可以用相对简单统一的一些方法来恢复系统。下面针对上面提出的几个问题,结合RHEL/CentOSLinux系统环境,给出一些常用的、普遍的解决问题的方法。
(1)/etc/fstab文件丢失导致系统无法启动
/etc/fstab文件存放了系统中文件系统的相关信息,如果正确配置了该文件,那么在Linux启动时,系统会读取此文件,自动挂载Linux的各个分区;如果此文件配置错误或者丢失,就会导致系统无法启动。具体的故障现象在检测mount partition时出现:
starting system logger
针对这个问题的思路是想办法恢复/etc/fstab这个文件的信息,只要恢复了此文件,系统就能自动挂载每个分区,正常启动。可能首先想到的是将系统切换到单用户模式下,然后手动挂载分区,最后结合系统信息,重建/etc/fstab文件。但是这种方法是行不通的,因为/etc/fatab文件丢失导致Linux无法挂载任何一个分区,即使Linux还能切换到单用户下。此时的系统也只是一个Read-Only的文件系统,无法向磁盘写入任何信息。
介绍另外一个方法,就是利用Linux Rescue修复模式登录系统,进而获取分区和挂载点信息,重构/etc/fstab文件。
这里以CentOS6.9为例,其他版本方法类似。首先将系统第1张光盘放入光驱,设置BOIS从光驱启动,这样系统就从光驱引导,如图8-6所示,选择“Rescueinstalled system”一项,然后按〈Enter〉键,系统开始引导进入Rescue模式。
接着系统自动开始引导,进入如下图所示的界面。
这里是选择模式使用的语言,可以按照自己需要设定,这里选择“English”,然后按〈TAB〉键,选中“OK”,按〈Enter〉键进入下一步。下面出现的是键盘选择对话框,如下图所示,这里选择默认的“us”即可。
接着出现的是网络配置对话框,如图所示。
这里是选择是否启用网络,由于系统已经无法启动,现在已经在Linux系统上进行操作了,无所谓是否启用网络。这里选择不启用。
下面到了最关键的步骤了,如下图所示,修复模式会自动将系统的所有分区挂载到/mnt/sysimage目录下,选择“Continue”,则修复环境进入到Read-Write状态下,可以对分区进行读写操作,选择“Read-Only”,修复环境进入到只读模式。由于要重建fstab文件到/etc目录下,因此选择“Continue”进入可读写模式下。
会出现一个友情提示对话框,如下图所示。由于fstab文件丢失,修复模式找不到任何可挂载的分区,从这里可知,修复模式在这里也读取/etc/fstab文件,按〈Enter〉键进入下一步。
选择下一步要执行的动作,如下图所示,这里选择“shell Start shell”进入修复模式命令行。
最后,就进入了修复环境下,可以进行操作了。如下图所示。
上面详细演示了如何进入Linux的修复模式,其实很多情况下,Linux无法启动时,都可以通过这个方式登录系统进行修复和更改操作。
下面是恢复/etc/fstab文件的详细过程,首先查看一下系统分区情况,如下所示:
因为分区并没有损坏,通过fdisk命令可以查看到系统分区的完整信息,但是每个分区对应的label name信息还不知道,下面通过tune2fs命令查看每个分区对应的label name:
这样,就得到了所有分区的挂载点信息,接下来就可以构造一个fstab文件了。
小技巧:可以参考其他系统中fstab文件的格式,结合本系统的分区和挂载点信息,构造出自己的fstab文件来。
由于fstab文件是存放在系统根目录下的,因此需要挂载原来系统的根分区,从上面可知根分区对应的设备名为/dev/sda3,接着在修复模式创建的临时根分区下创建一个挂载点,然后挂载原来系统的根分区。操作过程如下所示:
这样一来,原有根分区的文件全部挂载到了/temp目录下,接着就可以创建需要的fstab文件了。
重构好的fstab文件内容如下:
配置完毕,保存退出,然后重启系统,看系统是否能正常启动。(这个方法个人认为使用在物理机上的操作系统环境,平时做好备份很重要,如果是虚拟化环境,在每次更改操作前先做一个快照更为方便快捷)
(2)CentOS下误删除/boot目录的修复方法
误删除/boot目录经常发生在新手(新手在此)、研发人员身上。误删除的原因很多,但是并不重要,作为专业运维人员,要了解误删除后怎么恢复,先来看一下这个现象,如下图所示。
出现这个情况的原因可能有:系统引导出现问题、/boot目录误删除和grub配置错误。
要解决这个问题,还是要用到一个CentOS的U盘镜像或者光盘镜像,通过系统镜像进入Rescue修复模式,然后就可以大展拳脚了。
下面看看如何在CentOS7.x版本下,进入Rescue修复模式,然后修复系统引导。首先通过系统镜像盘进入系统引导模式,如下图所示。
然后选择“Troubleshooting”,按〈Enter〉键进入如图所示的界面。
这里选择“Rescue a CentOS system”,按〈Enter〉键进入如图所示的界面。
这是进入Rescue修复模式的几个选项,跟CentOS6.x版本类似,这里选择数字1,进入可读、写模式。等待片刻,即可进入如图所示的界面。
按〈Enter〉键进入命令行模式,然后执行chroot命令,如图所示。
这样,就变更到了root目录下,相当于进入到了真实系统环境下了。接着,将系统镜像挂载到任意一个目录下,这里挂载到/mnt下,挂载系统镜像的目的是将系统镜像作为YUM源,然后安装系统丢失的内核模块,并安装GRUB2引导程序。
bash-4.2# mount /dev/cdrom /mnt
下面开始创建一个YUM源仓库,用于从本地系统镜像中读取RPM包,进行内核模块的安装,如图所示。
重点来了,第1步是重新安装内核,这里使用YUM的reinstall命令,千万别用install来安装,执行如下命令:
bash-4.2# yum reinstall kernel
这样,内核模块安装完成了,接下来,还需要重新安装GRUB2,并重新生成GRUB2配置文件grub.cfg,执行如图所示的操作。
执行完成后,两次执行exit命令退出后,系统会自动重启,完成boot引导的修复,不出意外的话,系统已经可以畅通无阻地启动了。
Linux服务器在长期运行后,难免出现无响应现象。在系统死机后,屏幕一般会输出故障信息,键盘失去响应,这种情况的常见处理办法就是重启系统,不过在重启前,要重点关注一下屏幕的输出信息,因为其提示的可能是引起死机的主要原因,对解决问题是有很大帮助的。
其实还有另一个方法,就是通过串口直连线连接客户机和服务器,将服务器的出错详细信息发送到客户机上。引起服务器死机的原因有很多,但主要有两个方面:软件问题和硬件问题。下面总结了造成Linux系统死机的常见原因和解决问题的思路。
➢ 系统硬件问题主要是由SCSI卡、主板、RAID卡、HBA卡、网卡、硬盘等硬件设备导致。在这种情况下需要定位硬件故障细节,通过更换硬件来解决问题。
➢ 外围硬件问题主要是网络问题导致的。此时就需要检查网络设备、网络参数等方面查找和解决问题。
➢ 软件问题主要是系统内核bug、应用软件bug、驱动程序bug等。在这种情况下就需要从升级内核、修复程序bug、更新驱动程序等方面来解决问题。
➢ 系统设置问题主要是系统参数设置不当导致,可以通过恢复系统到默认状态,关闭防火墙等方面来解决问题。