Linux常见系统故障案例说明并修复解决(上)

Linux系统故障排查思路实践教程(下)https://coffeemilk.blog.csdn.net/article/details/155903189

一、恢复Linux下的误删除文件

1.1、故障情况

在Linux系统上执行【rm -rf】误删除了指定分区的全部数据,且被删除的这个分区文件系统类型是【ext4】格式,现在需要将这个分区上被删除的数据恢复,如下图所示:

bash 复制代码
#直接执行【rm -rf】命令将指定分区(或当前分区)的数据全部删除了
rm -rf ./*

1.2、故障应急处理

若需要对这个分区的数据进行恢复,必须赶紧将这个需要恢复的分区卸载掉(或者立刻断电关机、或安全的将该分区所在硬盘移除;一定不能重启,不能重启,不能重启!!!【因此,生产环境的数据内容一定不要放在根分区,这样生产环境数据出问题后后续的操作会安全便利很多】)【主要目的是不能再给该分区中写入数据,这样会十分危险,继续写入数据会让被删除的数据被覆盖掉就很难恢复了】。

bash 复制代码
#1-卸载需恢复数据的分区(如:/data2)卸载前先查看当前磁盘情况
df -hT
umount /data2


#2-若在卸载分区时提示"目标忙",则是因为被一些进程或用户占用,查询到这些进程后强制杀死后再次卸载
#2.1-查看占用该分区的所属用户、进程PID、权限和对应命令
fuser -mv /data2
#2.2-查看所有打开该分区内文件的进程
lsof +D /data2
#2.3-强制杀死获取到的占用PID
kill -9 2648


#3-再次执行卸载分区操作
#3.1-【懒卸载】在分区不再繁忙时自动完成卸载,对数据的风险相对较低
umount -l /data2
#3.2-【强卸载】强制中断所有占用连接完成卸载,适用于部分网络文件系统,风险较高,非必要不使用
umount -f /data2

1.3、数据恢复

对于【ext4】格式的分区数据恢复可以使用【ext4magic】工具来恢复。

bash 复制代码
#使用【ext4magic】工具来恢复指定分区数据(ext4magic的下载地址是【https://rpmfind.net/linux/rpm2html/search.php?query=ext4magic%28x86-64%29&submit=Search+...&system=&arch=】)

#1-下载并安装ext4magic
rpm -ivh ext4magic-0.3.2-4.23.x86_64.rpm

#2-使用【ext4magic】先扫描指定分区后会显示可恢复的数据内容(未显示的就没法恢复了)
ext4magic /dev/sdb -f /
ext4magic /dev/sdb -I 2


#3-恢复指定分区的数据
#先创建 /dev/sdb 的只读映像,再从映像恢复(避免源设备写入)
ext4magic /dev/sdb -C /mnt/sdb_backup.img -r -d /mnt/recover -v

#3.1-将指定分区下的数据全部恢复到指定目录
ext4magic /dev/sdb -r -d /恢复目录

#3.2-将指定分区下当天10点到当前时间的数据都恢复到指定目录中
ext4magic /dev/sdb -r -a $(date -d "today 10:00:00" +%s)  -b $(date +%s)  -d /恢复目录
bash 复制代码
#可使用【PhotoRec】工具来恢复指定分区的数据
#官网地址是【https://www.cgsecurity.org/wiki/Main_Page】
#【该工具的下载地址是:https://www.cgsecurity.org/wiki/%E4%B8%8B%E8%BD%BD_TestDisk】

#1-下载【TestDisk & PhotoRec 7.2】
wget https://www.cgsecurity.org/testdisk-7.2.linux26-x86_64.tar.bz2

#2-解压
tar -jxvf testdisk-7.2.linux26-x86_64.tar.bz2

#3-运行【PhotoRec】工具来恢复指定磁盘数据
cd testdisk-7.2
photorec_static
bash 复制代码
#【优先推荐】若该服务器拥有图形化界面还可以使用【R-Linux】来恢复(下载地址是:https://www.r-studio.com/zhcn/free-linux-recovery/Download.shtml)
#1-下载【R-Linux】软件
wget https://www.r-studio.com/downloads/RLinux6_x64.rpm

#2-安装【R-Linux】软件
rpm -ivh RLinux6_x64.rpm

#3-启动【R-Linux】软件会显示图形界面操作(即:选中需要恢复数据的分区扫描,扫描完成后点击顶部的【显示文件】,然后选中左侧的【Root】后勾选右侧需要恢复的文件,最后点击顶部【恢复标记的】即可)
rlinux

二、修复Linux系统无法启动故障

2.1、故障情况

系统启动后不能正常进入系统内,而是停留显示在【grub】或【grub rescue】界面,如下图所示:

2.2、故障分析

看到grub字样,一般是关联系统引导内容(也就是说是系统引导相关的内容出问题了),可在故障界面直接先输入【ls】命令查看一下情况。系统无法正常启动,且进入单用户后好多命令是无法使用的,这个时候建议就是直接使用此系统的镜像文件配合系统启动U盘或者PXE来进入系统救援模式进行操作。

bash 复制代码
#故障分析方法(对于系统无法正常启动情况进入到系统中;建议【直接进入系统救援模式】排查操作)
#1-准备与该系统一致的系统镜像放置到系统启动U盘或PXE中

#2-将系统启动U盘插入该服务器并设置从该系统启动U盘启动

#3-选择【Troubleshooting】-->【Rescue a Kylin Linux Advanced Server system】-->【exit】后正式进入系统的救援模式中

#4-输入【1】以读写模式在系统救援模式中操作-->【df -h】查看系统当前挂载的情况(当前是有系统镜像挂载的类似Windows pe 环境的系统与原本的系统)-->【chroot /mnt/sysroot】实现只将原有系统正常挂载使用(这就是我们想要操作的界面效果)

#5-重点关注报错界面中查看了没有任何数据的分区(逐一查看后可以发现是/boot 这个系统引导的关键分区里面数据都没有了,定位到问题了)
cd /boot
ls

2.3、故障修复

bash 复制代码
#现在已经定位到是由于【/boot】系统引导分区的内容都没有了,接下来就是恢复【/boot】分区内容

#1-先安装基础系统引导内容到【/boot】所在的硬盘中(如:/dev/sda)
grub2-install /dev/sda

#2-还需要生成与该系统环境一致的内核文件【vmlinuz】与系统根文件【initrd.lz】相关内容(即:挂载系统镜像从系统镜像中安装对应的内核包【以 kernel-core 开头的rpm包(如:kernel-core-4.19.90-52.22.v2207.ky10.x86_64.rpm)】即可)
mount /dev/cdrom /mnt
df -hT
cd /mnt
cd Packages/
ls -al kernel-core-4.19.90-52.22.v2207.ky10.x86_64.rpm
rpm -ivh kernel-core-4.19.90-52.22.v2207.ky10.x86_64.rpm --force

#3-生成系统引导菜单文件
ll -a /boot/grub2
grub2-mkconfig > /boot/grub2/grub.cfg

#4-退出当前正常的系统救援模式后重启电脑
exit
reboot

#5-将系统引导U盘移除(系统能够正常引导进入系统,问题解决)

到这里表示恭喜你,故障修复完成,系统可以正常启动进入了。

三、修复系统资源配置错误故障

3.1、故障情况

使用ssh登录或服务器主机登录到服务器上提示"Permission denied(权限被拒绝)"或者无法登录到系统中,像是卡住了。如下图所示:

3.2、故障分析

当输入账号密码登录服务器的时候提示权限被拒绝(首先排查是否密码输入错误,其次排查是否该服务器的网络问题(如:网络不稳定【使用ping ip 方法排除】或者IP被其他设备使用));排除这两个问题后就只能进入系统救援模式进行排查问题了。

bash 复制代码
#进入系统救援模式排查问题
#1-准备与该系统一致的系统镜像放置到系统启动U盘或PXE中

#2-将系统启动U盘插入该服务器并设置从该系统启动U盘启动

#3-选择【Troubleshooting】-->【Rescue a openEuler system】后正式进入系统的救援模式中

#4-输入【1】以读写方式在系统救援模式中操作-->【df -h】查看系统当前挂载的情况(当前是有系统镜像挂载的类似Windows pe 环境的系统与原本的系统)-->【chroot /mnt/sysroot】实现只将原有系统正常挂载使用(这就是我们想要操作的界面效果)

#5-查看系统中SSH的日志内容排查问题(可以查看到显示【Could not set limit for 'nofile': Operation not permitted(即:无法为 'nofile' 设置限制:操作不允许)】那是不是这个nofile配置的太少了?)
tail -f /var/log/secure


#6-了解nofile并查看系统中配置文件【/etc/security/limits.conf】里面配置的是多少【nofile是类 Unix(如 Linux)系统中用于限制单个进程可打开的文件描述符最大数量的配置项。这里的文件描述符不仅指代普通文件,还涵盖网络套接字、管道、设备等各类 I/O 资源,它的核心作用是管控系统资源使用,避免单个进程过度占用资源而影响系统稳定性】
cat /etc/security/limits.conf

3.3、故障修复

bash 复制代码
#现在已经定位到故障是由于在【/etc/security/limits.conf】的配置文件中配置的(nofile【单个进程可打开的文件描述符最大数量】太大了,导致系统无法申请到这么多的资源分配,因此拒绝)

#1-现在只用编辑【/etc/security/limits.conf】文件修改配置的nofile值(一般在60万左右即可)后保存退出
vi /etc/security/limits.conf

* hard nofile 655360
* soft  nofile 655360

#2-重启系统让配置生效
exit
reboot

#3-重新登录验证(已经可以正常登录了)

系统重启后,可以正常登录到系统中,则恭喜你,问题修复了。

相关推荐
CIb0la6 小时前
Linux 6.19-rc1 释出,龙芯为内核加入 32 位架构支持
linux·运维
南棱笑笑生6 小时前
20251215给飞凌OK3588-C开发板适配Rockchip原厂的Buildroot【linux-6.1】系统时统计eth1的插拔次数
linux·c语言·开发语言·rockchip
model20056 小时前
Web 服务和 SFTP 用户 操作目录
linux·运维·服务器
刃神太酷啦6 小时前
Linux 进程核心原理精讲:从体系结构到实战操作(含 fork / 状态 / 优先级)----《Hello Linux!》(6)
java·linux·运维·c语言·c++·算法·leetcode
OurBMC社区6 小时前
玩转OurBMC第二十三期:OurBMC之PCIe接口应用(下)
linux·运维·网络
weixin_46686 小时前
K8S-Configmap
linux·容器·kubernetes
初圣魔门首席弟子6 小时前
核心 Bug:客户端与服务器端口不匹配(导致请求无法送达)
linux·网络
福尔摩斯张6 小时前
TCP协议深度解析:从报文格式到连接管理(超详细)
linux·c语言·网络·c++·笔记·网络协议·tcp/ip
刀刀是个萌妹子7 小时前
使用CloneZilla还原操作系统
linux·运维·服务器