
正文
linux故障排查命令 linux故障分析方法
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
linux中检测、修复磁盘的命令是啥?
chkdsk。
chkdsk的全称是checkdisk,就是磁盘检查的意思。这个东西是当你的系统崩溃或者非法关机的时候由系统来调用检查磁盘的,也可以由手工通过命令行调用来检查某一个磁盘分区。
该工具基于被检测的分区所用的文件系统,创建和显示磁盘的状态报告。Chkdsk 还会列出并纠正磁盘上的错误。如果不带任何参数,chkdsk 将显示当前驱动器中的磁盘状态。
扩展资料
chkdsk检查适用情况:
1、windows7系统进入到欢迎界面,无法输入用户密码,即键盘没反应,但键盘操作bios、F8功能键等进入欢迎界面之前的操作都正常,可以进入安全模式;
2、系统启动过程中蓝屏,即蓝底白字屏幕显示,低端显示stop:0x???????字样,即蓝屏代码。
3、磁盘分区变成ram格式。
4、突然断电,重启电脑无法进入系统;
5、电脑运行速度非常慢,磁盘指示灯非常忙,杀毒软件检测不到病毒。
参考资料来源:百度百科--chkdsk
相关问答
Q1: 如何查看linux strace 排查定时器故障
可以使用yum -y install strace来安装,centos系统安装使用使用yum命令。 yum命令说明: yum命令是在Fedora和RedHat、centos以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动...
Q2: Linux系统CPU/内存使用率过高的问题排查
服务器出现由内存问题引发的故障linux故障排查命令,例如系统内部服务响应速度变慢、服务器登录不上、系统触发 OOM(Out Of Memory)等。通常情况下当实例内存使用率持续高于90%时linux故障排查命令,可判断为实例内存使用率过高。CPU/内存使用率过高的问题原因可能由硬件因素、系统进程、业务进程或者木马病毒等因素导致。
笔者以前写过一篇文章- Linux 下的 60 秒分析的检查清单 ,适用于 任何性能问题 的分析工作,这一篇文章是关于CPU/内存使用率的具体的排查思路总结。
执行 top 命令后按 M ,根据驻留内存大小进行排序,查看 “RES” 及 “SHR” 列是否有进程占用内存过高。按 P,以 CPU 占用率大小的顺序排列进程列表,查看是否有进程占用cpu过高。
如果有异常进程占用linux故障排查命令了大量 CPU 或内存资源,记录需要终止的进程 PID,输入k,再输入需要终止进程的 PID ,按 Enter。
另外说明一下,top 运行中可以通过 top 的内部命令对进程的显示方式进行控制,最常用的是M和P。
CPU 空闲但高负载情况,Load average 是 CPU 负载的评估,其值越高,说明其任务队列越长,处于等待执行的任务越多。执行ps -axjf命令,查看进程状态,并检查是否存在 D 状态进程。D 状态指不可中断的睡眠状态,该状态进程无法被杀死,也无法自行退出。若出现较多 D 状态进程,可通过恢复该进程依赖资源或重启系统进行解决。
Linux 系统通过分页机制管理内存的同时,将磁盘的一部分划出来作为虚拟内存。而 kswapd0 是 Linux 系统虚拟内存管理中负责换页的进程。当系统内存不足时,kswapd0 会频繁的进行换页操作。换页操作非常消耗 CPU 资源,导致该进程持续占用高 CPU 资源。
执行top命令,找到 kswapd0 进程。观察 kswapd0 进程状态,若持续处于非睡眠状态,且运行时间较长并持续占用较高 CPU 资源,执行 vmstat ,free,ps 等指令,查询系统内进程的内存占用情况,重启系统或终止不需要且安全的进程。如果 si,so 的值也比较高,则表示系统存在频繁的换页操作,当前系统的物理内存已经不能满足您的需要。 si 表示每秒从交换区写入内存的大小(单位:kb/s) , so 每秒从内存写到交换区的大小。
执行cat/proc/meminfo |grep-i shmem命令查看共享内存。
buddy可以以页为单位获取连续的物理内存linux故障排查命令了,即4K为单位。slab负责需要频繁的获取/释放并不大的连续物理内存,比如几十字节。执行cat /proc/meminfo | grep -i SUnreclaim命令查看slab 内存。
标准的 4KB 大小的页面外,内存大页管理内存中的巨大的页面,处理较少的页面映射表,从而减少访问/维护它们的开销。执行cat /proc/meminfo | grep -iE "HugePages_Total|Hugepagesize" 查看内存大页。
内存使用率计算:
(Total - available)100% / Total
(Total - Free - Buffers - Cached - SReclaimable + Shmem)* 100% / Total
cat /proc/meminfo查看信息含义:
Q3: 详解SELinux故障排查和陷阱规避
维护我们服务器的安全是一项艰巨的工作,与第三方解决方案提供商打交道时尤为如此。在许多情况下,面临的挑战是要求禁用SELinux,以便应用程序可以顺利运行。幸好,这种情况越来越少了。在大多数情况下,一番分析足以找到正确的故障排查或解决方法。
SELinux是一个标签系统,它告诉我们系统中的每个文件、目录或对象都有对应的标签(Label)。策略控制这些元素之间的交互关系,内核则执行这些规则。
两个最重要的概念是标签(文件、进程和端口等)和类型强制(根据进程的类型将进程彼此隔离开来)。
标签使用的格式为:user:role:type:level(可选)。
要找出当前配置,请运行getenforce和sestatus两个命令:
# getenforce
Enforcing
# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policyname: targeted
Current mode: enforcing
Modefrom config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Memory protection checking: actual (secure)
Max kernel policy version: 32
最佳实践告诉我们,我们测试一个新的第三方应用程序时,应该在许可模式下临时配置SELinux,以便确定哪些策略或布尔值(更改行为的简单字符串)必不可少。运行该命令:
# setenforce 0
查看日志,您可以找到SELinux使应用程序正常运行所需的条件。
SELinux试图告诉我什么?
SELinux中生成警报的错误只有四个主要原因:
标签。
SELinux需要知道。
SELinux策略及/或应用程序可能有错误。
您的信息可能被泄露。
最后一种情况是由于对攻击漏洞进行了修改或避免了活动跟踪,不过在这两种情况下,都必须查看这些警报,这点暂且不介绍。
标签
标签问题:/srv/myweb中的文件未正确标记,因而无法访问。
SELinux为同一服务所涉及的每个元素分配一个标签:
二进制文件:/usr/sbin/httpd→httpd_exec_t
配置文件:/etc/httpd→httpd_config_t
日志文件:/var/log/httpd→httpd_log_t
内容目录:/var/www/html→httpd_sys_content_t
启动脚本:/usr/lib/systemd/system/httpd.service→httpd_unit_file_t
进程:/usr/sbin/httpd→httpd_t
端口:80/tcp,443/tcp→httpd_t和httpd_port_t
在Web服务器上,在httpd_t上下文中运行的进程只能与带有httpd_something_t标签的对象进行交互。
解决方案:正确标记文件。
如果您知道正确的标签,请运行:
# semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
如果您知道拥有相等标签的文件,请运行:
# semanage fcontext -a -e /srv/myweb /var/www
针对这两种情况,恢复文件的默认上下文:
# restorecon -vR /srv/myweb
标签问题:如果某个文件被移动而不是被拷贝,它保留原始标签。
$ mv index.html /var/www/html/
解决方案:正确标记文件。
将上下文更换成正确的标签:
# chcon -t httpd_system_content_t /var/www/html/index.html
更换拥有参考标签的上下文:
# chcon --reference /var/www/html/ /var/www/html/index.html
针对这两种情况,恢复文件的默认上下文:
# restorecon -vR /var/www/html/
SELinux需要知道
服务定制:Web服务器将在端口8585上侦听请求。
要把所需的端口添加到上下文,请运行:
# semanage port -a -t http_port_t -p tcp 8585
为服务添加功能:Web服务器将能够发送电子邮件。
要启用邮件发送功能,开启布尔值,运行:
# setsebool -P httpd_can_sendmail 1
-P标志使变更在布尔值中具有持久性。
要获得所有布尔值,运行:
# getsebool -a
要检查布尔值的状态,运行:
# semanage boolean -l
策略故障排查
服务未运行:使用wicd而不是NetworkManager服务来处理无线连接。
检查audit.log文件,查找被拒绝的访问:
# grep denied audit.log | cut -d{ -f2 | sort -n | uniq -u
create } for pid=2670 comm="wicd" scontext=system_u:system_r:NetworkManager_t:s0 tcontext=system_u:system_r:NetworkManager_t:s0 tclass=appletalk_socket permissive=1
create } for pid=2670 comm="wicd" scontext=system_u:system_r:NetworkManager_t:s0 tcontext=system_u:system_r:NetworkManager_t:s0 tclass=ax25_socket permissive=1
ioctl }for pid=2670 comm="wicd" path="socket:[52681]" dev="sockfs" ino=52681 ioctlcmd=0x8b01 scontext=system_u:system_r:NetworkManager_t:s0 tcontext=system_u:system_r:NetworkManager_t:s0 tclass=ax25_socket permissive=1
ioctl }for pid=2670 comm="wicd" path="socket:[52684]" dev="sockfs" ino=52684 ioctlcmd=0x8b01 scontext=system_u:system_r:NetworkManager_t:s0 tcontext=system_u:system_r:NetworkManager_t:s0 tclass=appletalk_socket permissive=1
setattr }for pid=2214 comm="wicd" name="dhclient.conf.template" dev="dm-0" ino=437068 scontext=system_u:system_r:NetworkManager_t:s0 tcontext=unconfined_u:object_r:etc_t:s0 tclass=file permissive=0
注意:上下文NetworkManager_t和etc_t所涉及的一些元素需要权限,需要访问不同的文件和套接字创建。
创建type enforcement (.te)文件,拥有策略的必要权限:
# vi my_wicd.te
module my_wicd 1.0;
require {
type NetworkManager_t;
type etc_t;
class ipx_socketcreate;
class ax25_socket {create ioctl };
class appletalk_socket {create ioctl };
class file setattr;
}
#============= NetworkManager_t ==============
allow NetworkManager_t etc_t:file setattr;
allow NetworkManager_t self:appletalk_socket {create ioctl };
allow NetworkManager_t self:ax25_socket {create ioctl };
allow NetworkManager_t self:ipx_socketcreate;
要编译策略,安装软件包selinux-policy-devel,并生成策略软件包:
# make -f /usr/share/selinux/devel/Makefile my_wicd.pp
要激活刚生成的模块,运行:
# semodule -i my_wicd.pp
策略错误信息:试图访问我的网站时,我在日志中看到了SELinux错误。
为SELinux错误信息排查故障时常见的陷阱之一是,根据发现的所有错误信息创建策略。在大多数情况下,如果setroubleshoot包已安装,同样的提醒会给出所有可能的变通选项,按最好到最差的顺序排列。
要查看今天生成的setroubleshoot提醒,运行:
# journalctl -t setroubleshoot --since today
Dec 08 13:08:33 lab.example.com setroubleshoot[12013]: failed to retrieve rpm info for /var/www/html/index.html
Dec 08 13:08:34 lab.example.com setroubleshoot[12013]: SELinux is preventing /usr/sbin/httpd from getattr access on the file /var/www/html/index.html. For complete SELinux messages run: sealert -l 011df984-4eb6-4079-98ab-cba173c4342e
Dec 08 13:08:34 lab.example.com setroubleshoot[12013]: SELinux is preventing /usr/sbin/httpd from getattr access on the file /var/www/html/index.html.
***** Plugin restorecon (99.5 confidence) suggests ************************
If you wantto fix the label
/var/www/html/index.html default label should be httpd_sys_content_t.
Then you can run restorecon. The access attempt may have been stopped due to insufficient permissions to access a parent directory, in which case try to change the following command accordingly.
Do
# /sbin/restorecon -v /var/www/html/index.html
***** Plugin catchall (1.49 confidence) suggests **************************
If you believe that httpd should be allowed getattr accesson the index.html file by default.
Then you should report this as a bug.
You can generate alocal policy module to allow this access.
Do
allow this accessfor now by executing:
# ausearch -c'httpd' --raw | audit2allow -M my-httpd
# semodule -X 300 -i my-httpd.pp
在这里,最好的解决办法就是修复文件的标签。
小结
为SELinux排查故障可能很难,但如果运用这里介绍的几个概念,并了解服务的组成,您就可以处理它带来的各种难题。
切记:SELinux是一种标签系统。
Q4: Linux启动故障处理
【摘要】
当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考证
关于linux故障排查命令和linux故障分析方法的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







