博客 > Linux知识:Linux常见故障的排查和修复
浏览量:2218次评论:0次
作者:锐成网络整理时间:2024-08-06 15:19:42
我们在使用Linux时,偶尔会遇到一些故障,比如系统无法启动、系统网络故障、MBR扇区故障等,出现这些故障的原因各不相同,解决方法也不同,以下是Linux常见故障的排查和修复,仅供大家参考。
一、系统故障
No.1 linux系统无法启动
原因1:文件系统配置不当,比如/etc/fstab文件等配置错误或丢失,导致系统错误无法启动。一般是人为修改错误或者文件系统故障。
排查方法:系统配置/etc/fstab错误或丢失而无法启动,当启动的时候,出现starting system logger后停止了;
解决方法:想办法恢复/etc/fstab文件,利用linux rescue修复模式登录系统,从而获取挂载点和分区信息,重构/etc/fstab文件。
原因2:非法关机,导致root文件系统破坏,也就是linux根分区破坏,系统无法正常启动。
排查方法:
Linux下普遍采用的是ext3文件系统,ext3是一个具有日志记录功能的日志文件系统,可以进行简单的容错和恢复,但是在一个高负荷读写的ext3文件系统下,如果突然发生掉电,就很有可能发生文件系统内部结构不一致,导致文件系统破坏。
Linux在启动时,会自动去分析和检查系统分区,如果发现文件系统有简单的错误,会自动修复,如果文件系统破坏比较严重,系统无法完成修复时,系统就会自动进入单用户模式下或者出现一个交互界面,提示用户介入手动修复,现象类似下面所示:
checking root filesystem
/dev/sdb5 contains a file system with errors, check forced
/dev/sdb5:
Unattached inode 68338812
/dev/sdb5: UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY
(i.e., without -a or -p options)
FAILED
/contains a file system with errors check forced
an eror occurred during the file system check
*dropping you to a shell;the system will reboot
when you leave the shell
Press enter for maintenance
(or type Control-D to continue):
give root password for maintenance
从这个错误可以看出,系统根分区文件系统出现了问题,
系统在启动时无法自动修复,然后进入到了一个交互界面,提示用户进行系统修复。
这个问题发生的机率很高,引起这个问题的主要原因就是系统突然掉电,引起文件系统结构不一致。一般情况下解决此问题的办法是采用fsck命令,进行强制修复。
解决方法:
根据上面的错误提示,当按下“Control-D”组合键后系统自动重启,当输入root密码后进入系统修复模式,在修复模式下,可以执行fsck命令,具体操作过程如下:
[root@localhost /]#umount /dev/sdb5
[root@localhost /]#fsck .ext3 -y /dev/sdb5
e2fsck 1.39 (29-May-2006)
/ contains a file system with errors, check forced.
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Inode 6833812 ref count is 2, should be 1. Fix? yes
Unattached inode 6833812
Connect to /lost+found? yes
Inode 6833812 ref count is 2, should be 1. Fix? yes
Pass 5: Checking group summary information
Block bitmap differences: -(519--529) -9273
Fix? yes…… ……
/: * FILE SYSTEM WAS MODIFIED **
/: 19/128520 files (15.8% non-contiguous), 46034/514048 blocks
需要注意的是,在执行fsck的时候,一定要先卸载要修复的分区,然后再执行修复操作!
原因3:linux内核文件丢失或者崩溃,从而无法启动,也可能是因为内核升级错误或者内核存在bug。
这种情况一般linux系统启动会报错找不到内核文件,而内核文件存储在/boot分区,主要包括内核文件和初始化文件:
1、vmlinuz:内核镜像文件,包含内核代码和数据
显示error: file'/vmlinuz'not found
解决方案:
a. 使用可启动修复介质启动系统,并挂载系统磁盘的/boot分区;
b. 从安装介质或系统备份中提取vmlinuz内核文件,复制到/boot分区;
c. 更新引导配置(grub.cfg),将menuentry块中的linux行指向vmlinuz内核文件;
d. 重启系统,在引导菜单选择更新后的菜单项启动系统。
2、initrd/initramfs:初始化RAM磁盘,包含启动时需要的模块和驱动
显示error: file'/initrd.img'not found
解决方案:
a. 参考内核文件丢失的解决步骤a,挂载/boot分区和获取initrd.img文件;
b. 将initrd.img文件复制到/boot分区;
c. 更新grub.cfg,找到initrd相关行,将其指向新文件;
d. 重启系统,启动更新后的菜单项。
原因4:硬件故障,比如主板、电源、硬盘等出现问题,导致linux无法启动。
解决方法:一般来说由硬件造成的故障,只需更换硬件设备即可解决。
No.2 linux系统网络故障
排查1:检查网络硬件
检查网络故障,首先要排除网络硬件设备是否存在问题。比如网卡,网线,路由器,交换机等设备是否正常。
这些是网络正常运行的基本条件,如果发现某些设备出现故障,只需更换硬件即可解决问题。
排查2:检查网卡是否正常工作
1、检查网卡是否正常加载
可以通过 ifconfig 命令判断网卡是否正常加载。如果通过 ifconfig 可以显示网络接口的配置信息,表示系统找到网卡驱动程序,网卡加载正常;
解决方法:如果发现问题网卡,我们可以使用 ethtool 工具查看问题网卡的具体状态信息
(注意:Speed / Link deteced 等字段 )
2、检查网卡IP设置是否正确
接下来就要检查网卡的软件设定,比如IP是否配置,配置是否正确,确保IP的配置和局域网其它计算机配置没有冲突。
排查3:检查局域网内主机能否互连
检查网络之间的连通是否存在故障,可以先通过ping命令测试局域网主机之间的连通性,然后ping网关,检测主机到网关的通信是否正常。
排查4:检查系统路由表信息是否正确
检查系统路由表状态是处理网络故障的一种很重要的方法。很多时候都是 ip 地址没有配错,网卡也正常加载但是路由配置不正确,而导致网络问题的出现。
因此需要检查系统的路由表设置是否正确,如果一个linux系统有两块网卡,同时两块网卡设置的IP不在一个网段,要特别注意系统路由表的设置。例如下面这个系统的网络接口信息:
从上面输出可知,本系统有两块网卡,分别配置不同网段的IP地址,假定eth0通过映射的方式对外提供ssh连接服务,而eth1仅供局域网主机之间共享数据使用。
现在的问题是,外界无法ssh远程登录到此系统,而网卡加载没有问题,网卡IP设置也没问题,接下来看看此系统的路由设置:
至此问题已经基本排查出来了:从route的输出可知,linux的缺省路由是192.168.200.1,而192.168.200段的IP仅仅供局域网主机之间共享数据使用,没有连接出去的访问权限,因而,外界无法连接到linux系统。
解决方法:删除192段的缺省路由,然后增加10段的缺省路由即可:
[root@webserver ~]# route delete default
[root@webserver ~]#route add default gw 10.10.1.254
此时外界就可以通过ssh服务远程连接到linux系统了。
排查5:检查DNS解析
在Linux系统中,有两个文件用来指定系统到哪里寻找相关域名解析的库。分别是文件/etc/host.conf和/etc/nsswitch.conf。
/etc/host.conf文件指定系统如何解析主机名,Linux通过域名解析库来获得主机名对应的IP地址。
下面是RedHat Linux安装后缺省的/etc/host.conf内容:
order hosts,bind
其中,order指定主机名查询顺序,这里表示首先查找/etc/hosts文件对应的解析,如果没有找到对应的解析,接着就根据/etc/resolve.conf指定的域名服务器进行解析。
/etc/nsswitch.conf文件是由SUN公司开发的,用于管理系统中多个配置文件查询的顺序,由于nsswich.conf提供了更多的资源控制方式,nsswich.conf文件现在已经基本取代了hosts.conf,虽然LINUX系统中默认这两个文档都存在,但实际上起作用的是 nsswitch.conf文件。
nsswitch.conf文件每行的配置都以一个关键字开头,后跟冒号,紧接着是空白,然后是一系列方法的列表。例如这段信息:
hosts: files dns
表示系统首先查询主机库文件,如果没有找到对应的解析,接着会去DNS配置文件指定的DNS服务器进行解析。
清楚了linux下域名解析的原理和过程,我们就可以根据这两个文件的设定,确定解析的顺序,从而判断出域名解析可能出现的问题。
排查6:检查相关服务是否开启
在一个应用出现故障时,必须要检测服务本身。比如服务是否开启,配置是否正确等。
检查服务是否正确打开,分为两步,第一步是查看服务的端口是否打开:
例如,我们不能用root用户ssh登录到192.168.60.133这台linux服务器,首先检查sshd服务的22端口是否打开:
[root@localhost init.d]# telnet 192.168.60.133 22SSH-2.0-Open
SSH_4.3
这个输出表示192.168.60.133的22端口对外开放,或者可以说sshd服务是处于打开状态。如果没有任何输出,可能是服务没有启动,或者服务端口被屏蔽。也可以在服务器上通过netstat命令检查22端口是否打开:
可以看到,22端口在服务器上是打开的,同时,服务器上打开的还有3306、80端口。
接着进行第二步的检查,既然服务已经打开,可能是sshd服务配置的问题,检查sshd服务配置文件/etc/ssh/sshd_config是否正确,发现有下面一行信息:
PermitRootLogin no
由此可知是ssh服务端配置文件限制了root用户不能登录系统,如果需要root登录系统,只需更改为如下即可:
PermitRootLogin yes
到这里为止,我们通过对端口和服务配置文件的层层检查,最终找到了问题的根源。需要说明的是,这里的重点不是讲述如何让root登录linux系统,而是要通过这个例子学会处理类似问题的思路和方法。
排查7:检查访问权限是否打开
1、检查系统防火墙 iptables的状态
当某些服务不能访问时,一定要检查是否被linux本机防火墙iptables屏蔽了,可以通过iptables -L指令查看iptables的配置策略。
例如我们不能访问某台linux服务器提供的www服务,通过检查,系统网络、域名解析都正常,并且服务也正常启动,然后检查了服务器的iptables策略配置,信息如下:
从上面的输出可知,这个linux服务器仅仅设置了预设策略,而致命的是将INPUT链和OUTPUT链都设置为DROP,也就是所有外部数据不能进入服务器,服务器数据也不能出去,这样的设置相当于没有网络。为了能访问这台服务器提供的www服务,增加两条策略即可:
这样一来,internet上的其他人就能访问我们的www服务了。
2、检查 SELinux 是否打开
SELinux是个系统级的安全防护工具,可以最大限度的保障Linux系统的安全。但是selinux有时也会给linux下软件 的运行带来一些问题,这些问题大部分是对selinux不了解造成的。
为了迅速定位问题,最简单的方法是先关闭selinux,然后测试软件运行是否正常,这不是个好方法,但是对于判断问题往往是很有用的,selinux是个很好的安全访问控制软件,可是如果你还不能熟练运用selinux访问控制策略的话,还是建议将它暂时关闭,等到对linux有了更深入的认识后,再开启selinux不失为一个明智的策略。
No.3 MBR扇区故障
故障现象:
1、找不到引导程序,启动中断
2、无法加载操作系统,开机后黑屏
故障原因:
1、病毒、木马等造成的破坏
2、错误的分区操作,磁盘读写错误操作
解决方法:
1、备份MBR扇区数据
a.在关机状态下添加一块新硬盘:虚拟机-->硬盘-->添加-->选择硬盘-->下一步
b.启动主机进入Linux系统,并对新硬盘进行分区
查看硬盘分区情况:fdisk -l -->对新硬盘进行分区:fdisk/dev/sdb
c.建立新硬盘的文件系统(即格式化文件系统)
查看sdb磁盘的列表信息-->对磁盘进行格式化
d.挂载硬盘
创建挂载点-->挂载分区
e.备份MBR扇区数据
2、模拟MBR扇区被破坏的故障
重启计算机,当出现“Operating system not found”的提示信息,表示无法找到可用的操作系统,此时硬盘已经损坏,如果没有光盘引导,则系统一直处于如下状态,因此无法启动主机。
3、进入急救模式来修复MBR扇区故障
a.先关闭计算机-->虚拟机-->电源-->打开电源时进入固件(F)-->选择Boot-->将光盘放在第一位
b.选择进入急救模式[Rescue installed system]
c.[choose a language]选择English-->确认
d.[Keyboard type]选择us-->确认
e.[Unsupported Hardware Detected]选择OK
f.[Satup Networking]选择No
g.[Rescue]选择Skip
h.选择Shell Start shell-->选择Ok
i.查看/dev/sdb硬盘和/dev/sda硬盘,能看到sdb1分区,看不到sda设备,因为sda设备的MBR被破坏
j.将之前拷贝的文件重新写回来
4、重启计算机,发现可以正常启动计算机,说明修复了MBR扇区故障.
No.4 GRUB引导故障
故障现象:系统引导停滞,显示“grub>”提示符
故障原因:
有时Linux启动后会直接进入GRUB命令行界面(只有“grub>”提示符),此时很多用户就选择了重新安装GRUB甚至重新安装系统。其实一般而言此故障的原因最常见的有两个:
一是GRUB配置文件中选项设置错误;
二是GRUB配置文件丢失。
若是第一种情况,则一般显示error: you need to load the kernel first: 引导配置错误,内核文件没有被正确加载,提示先加载内核。
解决方案:
a. 启动系统修复介质,备份/boot分区文件;
b. 检查/boot/grub2/grub.cfg文件,找到menuentry块中linux和initrd行,确保它们正确指向vmlinuz和initrd.img文件;
c. 重启系统,进入BIOS将引导选项设置为启动磁盘,保存后重启;
d. 启动grescue grub>提示符,运行:
set prefix= (root) ′ /boot/grub2 ′configfile(prefix)/grub.cfg
boot
命令以修复并重新加载grub配置,然后启动系统。
若是第二种情况,GRUB rescue> : 当GRUB引导加载程序文件丢失或磁盘无法访问时,会结束在rescue提示符。
解决方案:
a. 启动系统安装或修复介质,备份数据并检查文件系统。使用fsck修复或使用娱乐用光盘工具修复磁盘问题;
b. 引导进入安装系统,运行grub2-install /dev/sda将GRUB重新安装至系统磁盘MBR;
c. 修改BIOS启动选项为从系统磁盘启动。重启系统,现GRUB菜单应可正常显示,启动系统;
d. 如果仍无法启动,可能需要重新安装系统或更换硬件。
NO.5 忘记linux root密码
很多人经常会忘记Linux系统的root密码,而着急选择重新安装系统,这里为大家整理了两个更加直接的解决方法:
1、进入急救模式重设root用户密码
进入急救模式,加载系统镜像,切换到系统根环境进行重置root密码:
a.打开电源时进入固件,将开机启动项boot中的CD-ROM调到第一项;
b.进入急救模式:
sh-4.2# chroot /mnt/sysimage
#重设root用户密码
bash-4.2# passwd root
bash-4.2# exit //退出镜像回到系统
sh-4.2# reboot //重启系统(注意重启后要进入固件将Hard-drive调至第一项)
c.重启进入登入界面后输入刚才设置的密码即可;
2、进入单用户模式进行修改root密码:
以Redhat linux为基准,操作步骤如下:
a.重启系统,待linux系统启动到grub引导菜单时,找到当前系统引导选项(可以按方向键展开隐藏的菜单,单处理器只有一个引导项,多处理器有3个或3个以上引导项,一般默认选项就是系统当前引导选项);
b.通过方向键将光标放到当前系统引导项上,然后按键盘字母“e”,进入编辑状态。
c.然后通过上下键,选中带有kernel指令的一行,继续按键盘字母“e”,编辑该行,在行末尾加个空格,然后添加single,类似与这样:kernel /vmlinuz-2.6.18-8.el5 ro root=LABEL=/ rhgb quiet single
d.修改完成,按回车键,返回到刚才的界面。
e.最后按键盘“b”,系统开始引导。这样系统就启动到了单用户模式下,这里的单用户和windows下的安全模式类似,在单用户模式下,只是启动最基本的系统,网络以及应用服务均不启动。
单用户模式启动完毕,系统会自动进入到命令行状态下,类似与“sh-3.1#”,然后直接执行passwd,回车,系统会提示输入新的root密码两次,最后会看到修改密码成功的提示,这样就完成了root密码的修改。
如果需要正常启动系统,现在只需输入“init 3”,就进入了多用户模式。用root用户重新登录系统,看看设置的新密码是否生效。
No.6 Read-only file system 错误解决
故障现象:涉及到修改/保存条目等需要写磁盘操作的命令都无法使用(如tar、cp、mv、rm、chmod、chown、wget下载等指令),总是提示Read-only file system,也就是说系统是只读的,什么也写不了。
故障原因:
①文件系统损坏;
②磁盘问题,磁盘又坏道;
③fstab文件配置错误,如分区格式错误错误(将ntfs写成了fat)、配置指令拼写错误等。
排查网站程序,看报错信息和服务日志错误,以及系统日志,来定位问题所在。
解决方法:
①如果能够确认数据和系统的文件没有被损坏,修复fstab文件配置后只要重新R/W加载或reboot就能够恢复正常。
以读写方式重新挂载文件系统
mount -o rw,remount /system
②如果是文件系统有问题,那就需要在umount状态下执行fsck命令来检查文件系统并修复文件系统中的错误。
nohup fsck -y /dev/VolGroup00/LogVol00 > /dev/shm/fscklog & # 检查好后重启 reboot
③如果是磁盘硬件损坏,最好的方法就是直接换一个新硬盘。如果觉得旧硬盘扔了可惜,还可以将它低格之后,再重新安装系统,系统重新安装后,磁盘会重新分区。
④如果仅仅是想将数据备份出来而且机器又在身边的话,你可以用live-cd从光盘启动系统,然后直接备份。当然此时你也可以修改硬盘中的配置文件,如/etc/fstab。
重要声明:本文来自一口Linux,经授权转载,版权归原作者所有,不代表锐成观点,转载的目的在于传递更多知识和信息。
相关文章推荐
2024-08-20 17:58:16
2024-08-19 17:49:29
2024-08-19 10:23:28
2024-08-16 17:06:33
2024-08-15 17:22:55
热门工具
标签选择
阅读排行
我的评论
还未登录?点击登录