分析和排查系统故障

分析和排查系统故障

 
1. 分析日志文件
1.1主要日志文件
v日志的功能
     ■ 用于记录系统、程序运行中发生的各种事件
     ■ 通过阅读日志,有助于诊断和解决系统故障
v日志文件的分类
     ■ 内核及系统日志
      ●  由系统服务syslog统一进行管理,日志格式基本相似
     ■ 用户日志
      ●  记录系统用户登录及退出系统的相关信息
     ■ 程序日志
      ●  由各种应用程序独立管理的日志文件,记录格式不统一
#日志文件是用于记录Linux系统中各种运行消息的文件,相当于Linux主机的“日记”
#日志文件对于诊断和解决系统中的问题很有帮助,系统一旦出现问题时及时分析日志就会“有据可查”。此外,当主机遭受攻击时,日志文件还可以帮助寻找攻击者留下的痕迹
#不同的日志文件记载了不同类型的信息,例如Linux内核消息、用户登录记录、程序错误等等 
 
v日志保存位置
     ■ 默认位于:/var/log 目录下
v主要日志文件介绍
➣   /var/log/messages:记录Linux内核消息及各种应用程序的公共日志信息,包括启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服务,一般都可以从该日志文件中获得相关的事件记录信息。
➣   /var/log/cron:记录crond计划任务产生的事件信息。
➣   /var/log/dmesg:记录Linux系统在引导过程中的各种事件信息。
➣   /var/log/maillog:记录进入或发出系统的电子邮件活动。
➣   /var/log/lastlog:记录每个用户最近的登录事件。
➣   /var/log/rpmpkgs:记录系统中安装的各rpm包列表信息。
➣   /var/log/secure:记录用户认证相关的安全事件信息。
➣   /var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件。
➣   /var/run/btmp:记录失政的、错误的登录尝试及验证事件。
 
1.2 日志文件分析
内核及系统日
v由系统服务 syslogd 统一管理
     ■ 软件包:sysklogd-1.4.1-39.2
     ■ 主要程序:/sbin/klogd、/sbin/syslogd
     ■ 配置文件:/etc/syslog.conf
[root@localhost ~]# grep  -v  "^#"  /etc/syslog.conf  |  grep  -v  ^$
*.info;mail.none;authpriv.none;cron.none        /var/log/messages
authpriv.*                  /var/log/secure
mail.*                      -/var/log/maillog
cron.*                      /var/log/cron
……
由sysklogd软件包提供了klogd、syslogd两个程序,分别用于记录系统内核的消息和各种应用程序的消息
在 /etc/syslog.conf 配置文件中,配置记录的格式如下(具体参考 man syslog.conf):
设备类别.日志级别                       日志消息发送位置
如果需要在同一行中设置多个“设备.级别”组合,每组之间用分号隔开。
发送位置可以是本机的用户名; “-/var/log/maillog” 中前面的”-“号表示每次记录日志时并不马上进行数据同步
 
v日志消息的级别(数字等级越小,优先级越高,消息越重要)
➣   0  EMERG(紧急):会导致主机系统不可用的情况
➣   1  ALERT(警告):必须马上采取措施解决的问题
➣   2  CRIT(严重):比较严重的情况
➣   3  ERR(错误):运行出现错误
➣   4  WARNING(提醒):可能会影响系统功能的事件
➣   5  NOTICE(注意):不会影响系统但值得注意
➣   6  INFO(信息):一般信息
➣   7  DEBUG(调试):程序或系统调试信息等
 
v日志记录的一般格式
[root@localhost ~]# tail  -5  /var/log/messages
Sep 14 11:22:44 localhost kernel: sdb: cache data unavailable
Sep 14 11:22:44 localhost kernel: sdb: assuming drive cache: write through
Sep 14 11:22:44 localhost kernel: sdb: sdb1
Sep 14 11:23:37 localhost kernel: VFS: Can't find ext3 filesystem on dev sdb1.
Sep 14 16:54:48 localhost NetworkManager: <information> starting...
#内核及系统日志文件中的每一行表示一条消息,每个消息由4个字段的固定格式组成:
➣   时间标签:消息发出的日期和时间
➣   主机名:生成消息的计算机的名字
➣   子系统名称:发出消息的应用程序名称
➣   消息:消息的具体内容
 
用户日志分析
v保存了用户登录、退出系统等相关信息
     ■ /var/log/lastlog:最近的用户登录事件
     ■ /var/log/wtmp:用户登录、注销及系统开、关机事件
     ■ /var/run/utmp:当前登录的每个用户的详细信息
     ■ /var/log/secure:与用户验证相关的安全性事件
v分析工具
     ■ users 、who、w、last、lastb
#除了 /var/log/secure 文件以外,其他三个用户日志文件都是二进制的数据文件,无法直接使用tail、less等文本查看工具浏览。因此,分析用户登录相关信息通常需要借助专门的命令工具
 
user命令简单输出当前登录的用户名称和会话数
[root@sky ~]# users
xiaoqi  root  root  root       <==root用户打开了3个终端
 
who命令显示当前登录到系统的每个用户信息,包括用户名、终端类型、登录日期及远程主机
[root@sky ~]# who
root     pts/0        2015-05-26 09:27 (172.16.1.22)
root     tty1         2015-05-26 10:49 (:0)
 
W命令显示当前系统中每个用户及其所运行的进程信息
[root@sky ~]# w
 10:51:02 up  1:25,  2 users,  load average: 0.32, 0.18, 0.07
USER     TTY      FROM              LOGIN@   IDLE   JCPU   PCPU WHAT
root     pts/0    172.16.1.22      09:27    0.00s  0.33s  0.09s w
root     tty1     :0               10:49     ?     1.94s  1.94s /usr/bin/Xorg :0 -nr -verbose -audit -auth /var/run/gdm/auth-for-gdm-M8zl8n/database -noli
 
last查询成功登陆到系统的用户记录,最近登录的显示在最前面
[root@sky ~]# last
root     tty1         :0               Tue May 26 10:49   still logged in   
root     pts/0        172.16.1.22      Tue May 26 09:27   still logged in   
reboot   system boot  2.6.32-358.el6.x Tue May 26 09:25 - 10:54  (01:28)    
root     pts/0        172.16.1.22      Mon May 25 15:16 - 20:51  (05:34)    
reboot   system boot  2.6.32-358.el6.x Mon May 25 15:16 - 10:54  (19:37)    
root     pts/0        172.16.1.22      Mon May 25 10:01 - down   (05:14)    
reboot   system boot  2.6.32-358.el6.x Mon May 25 10:01 - 15:16  (05:14)
 
lastb命令查询登录失败的用户记录,比如用户名、密码错误等情况
[root@sky ~]# lastb
root     ssh:notty    172.16.1.22      Fri May 22 17:26 - 17:26  (00:00)    
btmp begins Fri May 22 17:26:31 2015
 
程序日志分析
v由相应的应用程序独立进行管理
     ■ Web服务:/var/log/httpd/
      ●  access_log、error_log
     ■ 代理服务:/var/log/squid/
      ●  access.log、cache.log、squid.out、store.log
     ■ FTP服务:/var/log/xferlog
v分析工具
     ■ 文本查看、grep过滤检索、Webmin管理套件中查看
     ■ awk、sed等文本过滤、格式化编辑工具
     ■ Webalizer、Awstats等专用日志分析工具
 
日志管理策略
v及时作好备份和归档
v延长日志保存期限
v控制日志访问权限
     ■ 日志中可能会包含各类敏感信息,如账户、口令等
v集中管理日志
     ■ 便于日志信息的统一收集、整理和分析
     ■ 杜绝日志信息的意外丢失、恶意篡改或删除
 
v应用示例:
     ■ 调整syslogd服务设置,建立集中管理的日志服务器
     ■ 将客户机B中crond服务产生的日志消息,自动发送到服务器A的/var/log/cron文件中
注意在主机A、B中所配置的是不同的文件:—— 在A中是 “/etc/sysconfig/syslog” ,在B中是 “/etc/syslog.conf”
A、B中都需要重新加载系统服务syslog,例如执行:service  syslog  reload
服务器A关于SYSLOGD_OPTIONS参数设置的解释(可以通过man  syslogd 查看手册页):
“-r”选项        表示允许接收其他主机发送过来的日志记录
“-x”选项        表示不进行DNS域名解析
“-m”选项      表示记录日志时的时间标记间隔(设为0禁用该功能)
 
 
2.排除系统启动类故障
2.1 MBR扇区故障
MBR引导记录位于物理硬盘的第1个扇区(512B),该扇区又称为主引导扇区(MBR扇区),除了包含系统引导程序的部分数据以外,还包含了整个硬盘的分区表记录,当主引导扇区发生故障时,将可能无法进入引导菜单,或者因无法找到正确的分区位置而无法加载系统,通过该硬盘引导主机时很可能进入黑屏状态,下面将通过示例介绍MBR扇区进行备份、模拟破坏,修复的过程。
修复MBR扇区故障
v故障原因
     ■ 病毒、木马等造成的破坏
     ■ 不正确的分区操作、磁盘读写误操作
v故障现象
     ■ 找不到引导程序,启动中断
     ■ 无法加载操作系统,开机后黑屏
v解决思路
     ■ 应提前作好备份文件
     ■ 以RHEL5安装光盘引导进入急救模式
     ■ 从备份文件中恢复
常见的系统启动类故障包括:MBR扇区故障、GRUB引导故障、丢失系统文件、遗忘root密码……
MBR即Master Boot Record,主引导记录,位于硬盘的第一个扇区(512字节),其中包含了系统引导程序、硬盘分区表信息
如果没有MBR的备份文件,恢复难度会比较大,可能需要使用“诺顿磁盘医生(Norton Disk Doctor)”之类能够按分区位置查找修复的磁盘工具
 
应用示例
1.备份MBR扇区数据
由于MBR扇区中包含整个硬盘的分区表记录,因此该扇区的备份文件必须存放到其他的存储设备中,否则在恢复时将无法读取到备份文件。例如执行以下操作可以将第1块硬盘(sda)的MBR扇区备份到第2块硬盘的sdb5分区中(挂载到/backup目录)。
[root@sky ~]# mkdir /backup
[root@sky ~]# mount /dev/sdb5 /backup/
[root@sky ~]# dd if=/dev/sda of=/backup/sda.mbr.bak bs=512 count=1
 
2.模拟MBR被破坏的故障
这里仍然使用dd命令,人为地将MBR扇区的记录覆盖,以便模拟出MBR扇区被破坏的故障情况(切记要先做好备份,而且将备份文件存放到其他硬盘)。列如执行以下操作可以从设备文件zero中读取512字节的数据,将其覆盖到第1块硬盘(sda),从而破坏MBR扇区中的数据。
[root@sky ~]# dd if=/dev/zero of=/dev/sda bs=512 count=1
[root@sky ~]# reboot
完成上述操作后重启系统,将会出现“Operating system not found"的提示信息,表示无法找到可用的操作系统,因此无法启动主机。
 
3.RHEL5光盘引导,进入急救模式
       由于MBR扇区被破坏以后,已经无法再从该硬盘启动系统,所以需要使用其他硬盘中的操作系统进行引导,或者直接使用RHEL5系统的安装光盘进行引导。不管使用哪种方式,目的都是相同的——获得一个可以执行命令的Shell环境以便从备份文件中恢复MBR扇区中的数据。
       以使用RHEL5安装光盘引导为例,当出现安装向导的”boot:“提示符时,在后边输入"linux rescue"并回车将以"急救模式"引导光盘中的Linux系统,之后依次按回车键接收默认的语言,键盘格式,提示是否配置网卡时一般选择”No“,然后系统会自动查找硬盘中的Linux分区并尝试将其挂载到”/mnt/sysimage"目录(选择''Continue"确认并继续)。接下来会出现是否初始化磁盘的警告窗口,建议选择“NO”,避免对硬盘数据造成不必要的损坏。
       最后选择“0K”确认后将进入到带“sh-4.1#"提示符的Bash Shell环境,只要执行相应的命令挂载保存有备份文件的硬盘分区(sdb5)并将数据恢复到硬盘"/dev/sda"中即可。需要注意的是,当前使用的系统环境是光盘中的Linux目录结构。
 
4.从备份文件中恢复MBR扇区
完成操作后,执行”exit“命令退出临时Shell环境,然后重启系统。
MBR扇区的备份文件应保存在不同的磁盘中,否则在恢复时将无法读取备份文件
在恢复之前,需要将包含备份文件的分区挂载到一个临时目录,以便能够读取到备份文件
在dd命令工具的强大功能的同时,注意强调要慎重使用,稍有操作失误则可能导致对硬盘数据的灾难性破坏
 
2.2 GRUB引导故障
修复GRUB引导故障
v故障原因
     ■ MBR中的GRUB引导程序遭到破坏
     ■ grub.conf文件丢失、引导配置有误
v故障现象
     ■ 系统引导停滞,显示“grub>”提示符
v解决思路
     ■ 尝试手动输入引导命令
     ■ 进入急救模式,从备份中恢复 grub.conf
     ■ 向MBR扇区中重建grub程序
GRUB是大多数Linux系统默认使用的引导程序,可以通过启动菜单的方式选择进入不同的操作系统(如果有的话) 当配置文件/boot/grub/grub.conf丢失,或者关键配置出现错误,或者MBR记录中的引导程序遭到破坏时,Linux主机启动后可能只出现“grub”的提示符,无法完成进一步的系统启动过程,如图所示。
如果在该提示符后可以进行编辑,则通过输入对应的引导命令(可参考其他相同版本RHEL系统中/boot/grub/grub.conf文件的引导语句),然后再执行“boot”命令即可正常引导Linux系统。
 
这是CentOS6.4系统中正常的grub.conf引导文件
[root@sky ~]# grep -v "^#" /boot/grub/grub.conf 
default=0
timeout=5
splashimage=(hd0,0)/grub/splash.xpm.gz
hiddenmenu
title CentOS (2.6.32-358.el6.x86_64)
    root (hd0,0)
    kernel /vmlinuz-2.6.32-358.el6.x86_64 ro root=/dev/mapper/vg_sky-lv_root rd_LVM_LV=vg_sky/lv_root rd_NO_LUKS rd_NO_MD crashkernel=auto LANG=zh_CN.UTF-8 rd_LVM_LV=vg_sky/lv_swap  KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
    initrd /initramfs-2.6.32-358.el6.x86_64.img
 
v应用示例1:
     ■ 在“grub>”提示符后,手动输入引导命令
     ■ 成功进入系统后,恢复或重建 grub.conf 配置文件
grub> root  (hd0,0)
grub> kernel  /vmlinuz-2.6.18-8.el5 ro root=/dev/VolGroup00/LogVol00 rhgb quiet
grub> initrd  /initrd-2.6.18-8.el5.img
grub> boot
[root@localhost ~]# cd  /boot/grub/
[root@localhost ~]# cp  grub.conf.bak  grub.conf      <==从备份文件恢复
此例子适用于丢失 grub.conf 配置文件的情况,可以在正常系统中将 grub.conf 文件改名,然后重启主机后进行演示
上述手动引导系统的grub命令,可以参考正常系统中的 grub.conf 配置文件,其中:
    root (hd0,0)        指定包含内核等引导文件的分区(即/boot分区),(hd0,0) 对应为 /dev/sda1
    kernel ……          指定内核文件所在的路径、根分区所在的设备位置
    initrd ……           指定引导过程中使用的缓存盘镜像文件位置
    boot                   用于启动进入系统 
 
v应用示例2:
     ■ 进入急救模式,从备份文件中恢复 grub.conf 文件
     ■ 向MBR扇区中重建GRUB程序
sh-3.1# chroot  /mnt/sysimage
sh-3.1# cd  /boot/grub/
sh-3.1# cp  grub.conf.bak  grub.conf
sh-3.1# grub-install  /dev/sda
/mnt/sysimage 为临时挂载的待修复的Linux系统根目录
“grub-install /dev/sda”操作适用于GRUB程序已被破坏的情况(例如重装Windows系统后),如果正常则不用修复
 
2.3  /etc/inittab文件丢失
v故障原因
     ■ inittab文件被误删除,或者存在配置错误
v故障现象
     ■ 启动中提示 “... INIT: No inittab file found”
     ■ 系统停滞,无法完成初始化
v解决思路
     ■ 进入急救模式,从备份文件中恢复
     ■ 或者,在急救模式中重新安装 initscripts 软件包
       ●  rpm  -ivh  --replacepkgs  initscripts-8.45.14.EL.i386.rpm
#rpm命令的 --replacepkgs 选项表示进行替换(覆盖)安装,即使系统中已经安装了这个包
 
2.4 遗忘root用户密码
v故障原因
     ■ 遗忘root用户的密码
v故障现象
     ■ 无法进行需要root权限的管理操作
     ■ 若没有其他可用帐号,将无法登录系统
v解决思路
     ■ 引导进入单用户模式,然后重设密码
        ●  grub > kernel  ...  single 或 s 或 1
     ■ 或进入急救模式,然后重设密码
通过单用户模式重设root账号的密码
(1)重新启动主机,在出现GRUB菜单时按↑,↓箭头键取消倒计时,并定位到要进入的操作系统选择项(如“RedHat Enterprise Linux Server”),按e键进入编辑模式。
(2)定位到以kernel开头的一行并按e键,在行尾添加”single“的启动参数,“single”也可以换成字母“s”或者数字"1",也可以表示进入到单用户模式。
(3)回车确认后,按b键将系统引导进入单用户模式,直接进入Shell环境(不需要任何密码验证) 。
(4)在单用户模式的Shell环境中,可以执行“passwd root”命令重新设置root用户的密码。
通过急救模戈重设root账号的密码
若使用RHEL5的安装光盘进入急救模式的Shell环境,则只需切换到待修复Linux系统的根目录环境,直接执行”passwd root“命令重设密码即可。
sh-4.1# chroot /mnt/sysimage
sh-4.1# passwd root
 
3. 排除文件系统类故障
3.1修复文件系统
v故障原因
     ■ 非正常关机、突然断电、设备读写失误等
     ■ 文件系统的超级块(super-block)信息被破坏
v故障现象
     ■ 无法向分区中读取或写入数据
     ■ 启动后提示“Give root password for maintenance”
v解决思路
     ■ 根据提示输入root口令,进入修复状态
     ■ 使用fsck命令进行修复
 
v应用示例:
     ■ 模拟对/dev/sdb1分区的破坏操作
        ●  dd if=/dev/zero of=/dev/sdb1 bs=512 count=4
     ■ 检查是否能挂载该分区
        ●  报错:mount: you must specify the filesystem type
     ■ 对/dev/sdb1分区进行修复
        ●  fsck –y -t ext3 /dev/sdb1
     ■ 次挂载该分区
Linux系统开机后,当提示“Give root password for maintenance”时,只需输入root用户的密码,即可进入到一个临时的Shell环境,用户可以对出现错误的文件系统进行修复
必要时可以执行“dd if=/dev/zero of=/dev/sdb7 bs=512 count=4”命令模拟文件系统故障,然后演示修复过程
fsck命令的 “-y”选项可以在出现交互提问时,自动按“yes”处理
 
3.2 磁盘资源耗尽故障
v故障原因
     ■ 磁盘空间已被大量的数据占满,空间耗尽
     ■ 虽然还有可用空间,但文件数i节点耗尽
v故障现象
     ■ 无法写入新的文件,提示“… : 设备上没有空间”
     ■ 部分程序无法运行,甚至系统无法启动
v解决思路
     ■ 清理磁盘空间,删除无用、冗余的文件
     ■ 转移或删除占用大量i节点的琐碎文件
     ■ 进入单用户模式、急救模式进行修复
     ■ 为用户设置磁盘配额
 
检测磁盘坏道
v故障原因
     ■ 磁盘设备中存在坏道(逻辑的或物理的)
v故障现象
     ■ 读取磁盘中的数据时,磁盘设备发出异常声响。
     ■ 访问磁盘中的某个文件时,反复读取且出错,提示文件损坏。
     ■ 对于新建立的分区无法完成格式化。
     ■ 系统使用该磁盘时频繁死机
逻辑坏道主要由于软件操作不当造成,可以使用软件修复
物理坏道是物理性损坏,只能通过更改磁盘分区或扇区的占用位置来进行改善,排除掉包含有坏块的磁盘空间
注意是mkfs命令而不是fsck命令,检查坏道之前,应尽量先卸载该分区,退出正在访问设备的其他程序
 
v解决思路
     ■ 检测硬盘中是否存在坏道
     ■ 修复硬盘,或更换新的硬盘
root@localhost ~]# badblocks -sv /dev/sdb
Checking blocks 0 to 20971520
Checking for bad blocks (read-only test):         5192832/       20971520
Pass completed, 0 bad blocks found.
 
 





posted @ 2015-05-26 19:14  Hello-Sky  阅读(516)  评论(0编辑  收藏  举报