可以考虑分析以下几点:
1、不要超频CPU,如果已经超频的先回复到原来的频率
虽然平时运行没有问题,但可能在高负载的使用中就会出现不可预料的故障了。特别是linux系统在某些应用上,是可以把硬件的性能发挥到极限的,但这样的硬件运行Windows可能是没有问题的。
2、确认电源供电充足
必须确保在高负载的状态下,电源可以满足负载。
3、使用memtest86检查内存状态
4、恢复BIOS到默认状态
对于服务器,可以使用自带的监测工具进行测试,也是一个不错的排错方法。
二、软件问题
如果已经基本排除硬件问题,那我们就必须考虑从软件上去获得死机状态的系统信息了。
1、运气足够好的话,系统死机不一定是完全死掉(此时键盘可能还能响应),那我们就可以使用Sysrq大法。
前提是我们必须先打开sysrq功能:
#echo "1" >/proc/sys/kernel/sysrq
#setterm -blank
这样,当系统出现问题的时候,我们可以使用:
引用
Alt+Sysrq-T 获得进程系统堆栈信息
Alt+Sysrq-M 获得内存分配信息
Alt+Sysrq-W 获得当前寄存器信息
更多的热键可以参考系统上的/usr/src/linux/Documentaion/sysrq.txt
其中,setterm -blank可以关闭字符下定时黑屏保护,方便记录屏幕信息。
2、为了让屏幕显示更多的内核调试信息,可以修改控制台的显示模式为80x25,在/boot/grub/menu.lst中对应的kernel一行最后,增加vga=0x305,如:
引用
kernel /boot/vmlinuz-2.4.21-9.30AXsmp ro root=/LABEL=/1 vga=0x305
3、万一键盘也不幸死掉了,那我们只能采用串口方式,把系统信息发送到另一台系统上,方法:
修改/boot/grub/menu.lst文件,在kernel一行最后增加核心参数"console=ttyS0 console=tty1",如:
引用
kernel /boot/grub/vmlinuz-2.4.21-9.30AXsmp ro root=/LABEL=/1 console=ttyS0 console=tty1
然后,修改/etc/sysconfig/syslog,加入klogd选项"-c 7",如:
引用
KLOGD_OPTIONS="-x -c 7"
重启服务器;进行测试:
1)使用串口直连线连接客户机和服务器,在客户机上运行:
cat /dev/ttyS0
服务器上运行:
echo hi >/dev/ttyS0
如果客户机有"hi"输出即可。
2)服务器上运行:
echo w >/proc/sysrq-trigger
看看客户机上是否有相应的内核信息输出
3)服务器上运行:
modprobe loop
看看客户机上是否有相应的内核信息输出
如果测试都通过的话,那么在客户机上运行:
cat /dev/ttyS0 | tee /tmp/result
当死机出现的时候,我们就可以从客户机上看到需要的内核信息了(查看/tmp/result)。
三、总结
一般造成Linux系统死机的原因有:
系统硬件问题(SCSI卡,主板,RAID卡,HBA卡,网卡,硬盘等)
外围硬件问题(网络等)
软件问题(系统、应用软件)
驱动bug(找新的驱动)
核心系统bug(到LKML看看,或更换核心再试)
系统设置(恢复到缺省状态,关闭防火墙等)
【摘要】当Linux系统出现故障无法正常启动系统时,Linux准备了单用户模式、救援模式等方式可以让我们有效的处理这类问题。本文简单分享一个利用救援模式解决Redhat系统无法启动的案例。
【正文】
一、 问题背景
1) 问题描述
一台部署了RHEL 7.2的物理服务器,突发死机故障,在尝试重启时,发现服务器无法正常进入 *** 作系统,直接进入emergency mode。本文主要分享 *** 作系统启动异常的问题排查过程。(服务器死机据后续日志分析,确定为内核的bug所致,本文不进行累述)
2) 故障现象
系统启动后,提示无法找到/dev/mapper/rhel-root,并直接进入emergency mode。
二、 排查思路
1) 收集系统启动异常的相关提示信息,获取到问题关键点:
Warning:/dev/rhel/root does not exist
初步定为配置文件问题或者逻辑卷root本身问题;
2) 尝试在应急模式下检查逻辑卷状态,发现当前情况并不稳定,常用命令无法使用、显示多为乱码;
3) 尝试进入单用户模式,发现情况和应急模式一样;
Redhat 7.2进入单用户模式:
1、开机启动至内核选择界面,选择第一项,按e进行编辑
2、定位到linux16这一行,找到ro,修改其为rw init=/sysroot/bin/sh
3、按ctrl+X启动至单用户模式
4) 利用系统安装光盘,进入Linux救援模式,进行排查。
Redhat 7.2救援模式启动方法:
1、把光盘加入光驱,然后启动,以光盘进行引导,选择救援模式(中间具体的步骤不再细说)
2、文件系统挂载到/mnt/sysimage目录下,这时切换到此目录下使用chroot /mnt/sysimage这条命令即可
5) 在救援模式下,首先查看服务器lv的情况,发现所有lv
status均为未激活状态。
查看lv
#Lvdisplay
修改lv
#vgchange -a y /dev/docker/root
6) 在尝试修改root的lv status时,发现root所在的vg名和启动时所指定的vg名不一致,基本确定问题点;
7) 修复
l 编辑文件/etc/default/grub
l 修改此文件中GRUB_CMDLINE_LINUX一行中rd.lvm.lv为合适的值
l 再执行以下命令重做grub :
n UEFI: grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg
n 非UEFI:grub2-mkconfig -o /boot/grub2/grub.cfg
l 查看文件grub.cfg中是否修改为rd.lvm.lv=rhel/root
l 修改/etc/grub2.cfg中root=后接的lv路径改为实际的路径。
8) 系统启动后,通过history日志,确定为该系统业务部署时,使用了vgrename命令修改了vg名。
三、 总结
对于Linux的问题处理,需要对Linux的运行原理有所理解,这此前提下才能根据有限的提示信息判断问题方向、确定排查范围、找到解决方法。同时,提醒各位初学linux的同事么,在进行linux的一些 *** 作时,需要充分考虑这些 *** 作可能造成的影响,避免类似上述的问题发生。
转自 嘉为教育-rhce认证_rhce培训_linux培训_linux认证_linux考证
如果问题能够再现,那么问题已经解决 80% 了。对于 *** 作系统核心而言,如果有问题的再现方法,那么可以说是已经解决 99% 了。经常遇到的问题是系统可以正常运行一段时间,然后死机。如果不好再现问题,那么只有根据死机现场遗留的东西来进行分析了。如果系统没有死干净,比如磁盘中断和文件系统是好的,那么也许能有日志信息保留在文件中,不过这样的好运气我是从来没有遇到过的。如果键盘中断还能响应 (按下Num Lock,可以看见键盘小灯亮灭),那么运气就算是足够好了,这时可以祭出 sysrq 大法,同时按下 Alt-Sysrq-T 获得进程系统堆栈信息,按下 Alt-Sysrq-M 获得内存分配信息,按下 Alt-Sysrq-W 获得当前寄存器信息。
linux/Documentation/sysrq.txt。另外,最好关闭终端的自动 blank 功能,这样系统死的时候至少能从屏幕上看到一些信息。设置方法是:
# echo 1 >/proc/sys/kernel/sysrq
# setterm -blank
这两个设置最好加到系统启动脚本中 (比如 /etc/rc.d/rc.local),保证每次启动都能得到运行。
如果很不幸,键盘也死悄悄了,(更为不幸的是,这种情况很常见),那么也不是只有等死一个办法,这时可以用串口终端 (serial console)将系统信息发送
到另一台系统上,这样可以通过对这些信息分析来定位问题。设置方法如下:
准备工作
1. 一台被监视的服务器,一台进行监视工作的PC。
2. 一根串口直连线。
配置
1. 在服务器上,加入一个新的 grub 项目,增加核心参数 "console=ttyS0 console=tty1",如:
kernel /boot/vmlinuz-2.4.21-9.30AXsmp ro root=LABEL=/1 console=ttyS0
console=tty1
2. 在服务器上,修改 /etc/sysconfig/syslog,加入 klogd 选项 "-c 7",保证更多内核信息得到输出。如:
KLOGD_OPTIONS="-x -c 7"
3. 重新启动服务器
4. 用串口直连线连接两台机器,测试:
1) 在PC上运行 "cat /dev/ttyS0",在服务器上运行 "echo hi >/dev/ttyS0",看在 PC 上是否有 "hi" 输出。
2) 在PC上运行 "cat /dev/ttyS0",在服务器上运行 "echo w >/proc/sysrq-trigger",看 PC 上是否有相应内核信息输出。
3) 在PC上运行 "cat /dev/ttyS0",在服务器上运行 "modprobe loop",看 PC 上是否有相应内核信息输出。
5. 如果测试通过,那么在 PC 上运行:cat /dev/ttyS0 | tee /tmp/result
另外,也可以用 Windows 超级终端获得串口信息。
that’s it.
此外,一些核心支持 LKCD, netdump 等调试功能,也可以一试。
剩下的,就只有靠经验和运气了,一般造成 Linux 系统死机的原因有:
系统硬件问题 (SCSI 卡,主板,RAID 卡,网卡,硬盘...)
外围硬件问题 (终端切换器,网络...)
软件问题
驱动 bug (去找更新的驱动试试)
核心系统 bug (去 LKML 上看看,或换个核心试试)
系统设置
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)