一、Linux的日志分析与故障排查
作为一个合格的运维人员对于系统问题的排查,故障的解决,需要有一个清晰明确的思路(即:当系统出现故障时,有一个明确的思路是【1、问题出现后,首先要重视的就是报错,通过报错信息大致可以解决80%的问题;2、出现问题后,需要查阅相关的日志,日志会记录出错的原因;3、分析问题并定位问题;4、解决问题】)。
1.1、Linux系统日志与分类
|--------|-----------------|--------------------------------------------------------------------------------|
| 序号 | Linux系统日志分类 | 说明 |
| 1 | 内核及系统日志 | 该日志数据由系统服务【syslog】统一管理,根据其主配置文件【/etc/syslog.conf】中的设置决 定将内核消息及各种系统程序消息记录到什么位置。 |
| 2 | 用户日志 | 该日志数据用于记录Linux系统用户登录及退出系统的相关信息,包括用户名、登录的终端、 登录时间、来源主机、正在使用的进程操作等。 |
| 3 | 程序日志 | 有些应用程序运会选择自己来独立管理一份日志文件(而不是交给syslog服务管理),用于 记录本程序运行过程中的各种事件信息。 |
[Linux系统日志与分类]
1.2、Linux的日志文件
Linux系统自己和大部分服务器程序的日志文件默认是存放在【/var/log】目录中。
|--------|-----------------------|--------------------------------------------------------------------------------------------------------------------|
| 序号 | Linux的日志文件 | 说明 |
| 1 | /var/log/messages | 公共日志文件,记录Linux内核消息及各种应用程序的公共日志信息,包括启动、 IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该文件获得相关的事件记录信息。 |
| 2 | /var/log/cron | 记录crond计划任务产生的事件消息。 |
| 3 | /var/log/dmesg | 包含内核缓冲信息(kernel ring buffer)。在系统启动时,会在屏幕上显示许多与硬件有关的信息。此文件记录的信息是系统上次启动时的信息。 而用dmesg命令可查看本次系统启动时与硬件有关的信息,以及内核实时缓冲信息。 |
| 4 | /var/log/maillog | 记录进入或发出系统的电子邮件活动。 |
| 5 | /var/log/boot.log | 记录系统启动时的软件日志信息(如:可查看系统启动后哪些软件启动成功,哪些失败)。 |
| 6 | /var/log/secure | 记录用户远程登录、认证过程中的事件信息(如:SSH的登录与认证事件,登录的IP、次数、成功与否等数据;可通过查看该文件来分析我们的系统是否被攻击,有一部分攻击时采用暴力破解方式来尝试的)。 |
| 7 | /var/log/wtmp | 记录系统所有登录进入和退出纪录。 可执行【last】命令查看 (注意:该文件是一个二进制文件,只能通过last命令查看) |
| 8 | /var/log/btmp | 记录错误登录进入系统的日志信息,可执行【lastb】命令查看(也是一个二进制文件)。 |
| 9 | /var/log/lastlog | 记录最近成功登录的事件和最后一次不成功的登录事件。可执行【lastlog】命令查看。 |
[Linux的日志文件]










二、忘记Linux用户密码问题解决
2.1、进入单用户模式
在日常生活中,忘记Linux用户(如:root)用户密码的概率还是较高的,不过你可以在接触到物理主机或虚拟机管理工具的情况下是很方便就可以解决了(即:需要重启系统,然后引导进入Linux的单用户模式后就可以直接修改指定用户密码了)。
|--------|----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 序号 | 系统 | 进入单用户模式方法 |
| 1 | CentOS6.X 及其之前的版本 | 《1》系统重启后进入GNU GRUB界面后按下【e】键; 《2》选中【kernel /vmlinuz】开头的内容后按下【e】键进入编辑模式; 《3》然后在末尾(如:quit后面输入【 single】)后按下【Enter键】; 《4》选中【kernel /vmlinuz】开头的内容后按下【b】键进行系统引导进入单用户模式; 《5》修改指定用户密码(如修改root用户密码【passwd root】根据提示输入密码后重启电脑【reboot -f】即可)。
|
| 2 | CentOS7.X 及其之后的红帽系版本 | 《1》系统重启后进入GRUB菜单引导界面(最底部会倒计时6秒)后选择内核(默认是第一个)按下【e】键进入编辑界面; 《2》在编辑界面找到【linux】开头内容的末尾添加【rw init=/bin/bash enforcing=0】后按下【ctrl+x】键即可自动引导进入单用户模式界面; 《3》在单用户模式界面重新挂载根为可读写(因为默认是只读的)【mount -o remount,rw /】(在编辑界面添加了rw可不用执行); 《4》查看并临时修改系统当前的编码格式(查看系统当前编码格式命令【locale】;临时修改系统编码格式为英文【export LANG=en_US】); 《5》修改指定用户密码(如修改root用户密码【passwd root】根据提示输入密码后重启电脑【exec /sbin/init】即可)。
|
[忘记Linux密码后进入单用户模式修改方法]
2.2、系统引导文件解析
|--------|--------------------------------------------|------------------------------------------------------------------------------------------------------------------------|
| **Linux的系统启动引导文件是【/boot/grub/grub.conf】或【/boot/grub/grub2.conf】**这个文件十分重要,若修改不得当会导致系统无法启动!!! |||
| 序号 | Linux系统的引导文件参数 | 说明 |
| 1 | default=0 | 定义了没有选择内核菜单的启动项时选择第一个内核启动。 |
| 2 | timeout=5 | 定义了没有任何操作时5s的超时时间。 |
| 3 | splashimage=(hd0,0)/grub/splash.xpm.gz | 定义了开机时内核选择菜单的背景图片,可以不写这一行,但是写错也会导致机器无法启动! |
| 4 | hidemenu | 隐藏内核选择菜单,按任意键出现选择菜单,可以不写这一行。 |
| 5 | title | 内核名字标题。 |
| 6 | root(hd0,0) | 相对下面的内核和initrd全局定义root为第一块磁盘的第一个分区,此处的root不是真的root,而是开机时的/boot 分区,因为bootloader开机还没有加载内核以及/分区。加载的内核需要通过/boot分区加载/分区和内核。 |
| 7 | kernel | 定义内核文件位置,向内核文件传递必要的参数。并且指定 / 分区所在的位置 |
| 8 | initrd | 包括加载根分区的必要的驱动以及可以在内存当中解压释放出虚根用于加载真正的内核文件 |
[Linux系统引导文件解析]



三、Linux系统无法启动问题解决
3.1、异常断电或不正常关机后系统无法正常启动
当Linux服务器由于异常断电、不正常关机,从而引起文件系统结构不一致时,系统重启后无法正常进入系统,会直接显示"紧急模式(emergency mode)"如下图所示:

bash
#解决异常断电、不正常关键后系统无法启动显示进入紧急模式的方法
#1-输入root用户的密码进入单用户模式
#2-在单用户模式的命令行中查看问题的详细信息
journalctl -xb
#3-查看详细信息后我们可以发现问题(如:/dev/sda5分区挂载失败)
#4-解决这类分区挂载失败问题
#4.1-若我们的分区是ext4格式,则修复命令如下:
umount /dev/sda5
fsck -y /dev/sda5
#4.2-若我们的分区是xfs格式,则修复命令如下:
umount /dev/sda5
xfs_repair /dev/sda5
#5-问题分区修复后使用尝试挂载所有未挂载的文件系统(若没有任何报错信息显示则执行重启命令就可以解决了)
mount -a
reboot
3.2、/etc/fstab文件丢失导致系统无法启动
【/etc/fstab】文件存放了系统中文件系统的相关信息,在linux启动时,系统会读取此文件,自动挂载linux的各个分区,如果此文件配置错误,或者丢失,就会导致系统无法启动,具体的故障现象是在检测mount partition时出现(如:starting system logger;或者启动到一部分没有反应停止了无法正常进入系统中)。


bash
#解决【/etc/fstab】文件配置错误或丢失导致系统无法成功启动方法【先进入救援模式】
#1-插入存有与故障系统一致的ISO镜像文件的系统启动U盘(或有与该系统同一网段的PXE服务器,但没配置系统自动安装)
#2-系统开机后进入BIOS选择U盘启动(或EFI Network)后选择【Troubleshooting】后按下Enter键
#3-选择带有【Rescue(救援)】字样的内容后按下Enter键等待进入救援模式
#4.1-针对【/etc/fstab】文件修改错误,则需要进入救援模式挂载的根分区中编辑(如:vi /mnt/sysimage/etc/fstab)【防范这类错误的最好办法就是定期备份系统,还有就是在编辑这些重要文件前先备份,在操作】
#4.2-针对【/etc/fstab】文件被误删除(需要构造一份fstab文件)
#4.2.1-查看系统的分区信息
parted -l
#4.2.2-查看分区与挂载点的对应关系
#若磁盘分区格式为ext格式则使用如下命令
tune2fs -l /dev/sda1 | more
#若磁盘分区格式为xfs格式则使用如下命令
xfs_admin -p /dev/sda1







【防范这类错误的最好办法就是定期备份系统,还有就是在编辑这些重要文件前先备份,先备份,先备份,最后才操作】。
四、Linux文件系统只读错误解决
现象1:我们在创建文件或文件夹就提示"无法创建xxx:只读文件系统"。

现象2:某个应用程序日志报错无法创建文件或目录(如:java.lang.RuntimeException: Cannot make directory: file:/www/data/html/2018-03-21)。
思路分析:
《1》可能是服务器磁盘故障(磁盘空间满了或者磁盘无法写入了【可先用【df -hT】命令查看】)。
《2》磁盘分区出现了问题,导致文件系统结构不一致,文件系统关闭了写功能,需要修复文件系统结构
bash
#修复分区文件机构方法
#1-先卸载故障分区(如:/data)
umount -l /data
#2-若卸载故障分区提示"目标忙"则需要排查占用挂载点的进程,然后在杀死占用进程后再重试卸载故障分区即可
fuser -mv /data
kill <PID>
#3-修复故障分区
#3.1-若我们的分区是ext4格式,则修复命令如下:
umount /dev/sda5
fsck -y /dev/sda5
#3.2-若我们的分区是xfs格式,则修复命令如下:
umount /dev/sda5
xfs_repair /dev/sda5
#4-重新挂载修复好的分区
mount /dev/sda5 /data
#5-验证在该分区创建对应的文件或目录(此时应该是可以正常创建了)