一、CentOS8.2 救援模式修复系统丢失文件
问题示例:系统中的libc.so.6动态库文件误删除
描述:glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。由于 glibc 囊括了几乎所有的 UNIX 通行的标准,可以想见其内容包罗万象。而就像其他的 UNIX 系统一样,其内含的档案群分散于系统的树状目录结构中,像一个支架一般撑起整个作业系统。在 GNU/Linux 系统中,其C函式库发展史点出了GNU/Linux 演进的几个重要里程碑,用 glibc 作为系统的C函式库,是GNU/Linux演进的一个重要里程碑。
Linux的很多命令都是依赖libc.so.6的动态链接库,如果您不小心把它给删除了,基本上所有命令都不能使用了,之前很多同学都通过重装操作系统来解决,今天介绍一种一条命令可以解决的办法:
LD_PRELOAD=/lib64/libc-2.12.so ln -s /lib64/libc-2.12.so /lib64/libc.so.6
注:目前centos 6.x 64位的glibc的版本是 v2.12 ;
故障现象:
第一种:文件存在,系统找不到
第二种:文件被删除,不存在了
造成系统找不到libc.so.6库的原因有三种:
*)文件的名字被更改了,即重命名。
*)文件被移动到别的目录了。
*)文件被删除了。
针对以上三种情况,前两种情况可以看作一种情况处理,文件还在,就是路径系统找不到了,这种情况相对来说要好办一点,对于第三种情况,文件整个都不存在了,这个时候我们就得借助外部的文件进行修复。
我们首先来看一下系统加载libc.so.6的路径信息:
从系统上看,libc.so.6 的路径指向/lib64/libc.so.6,如果这个路径发送变化,系统找不到这个共享文件,导致系统出现异常。
第一种:文件存在,系统找不到
模拟故障一、移动libc.so.6文件
mv /lib64/libc.so.6 /tmp/libc.so.6
系统执行命令异常
系统日志如下:
重启机器无法进入系统
恢复方法:
# LD_PRELOAD=/tmp/libc.so.6 mv /tmp/libc.so.6 /lib64/libc.so.6
这个时候我们就用到LD_PRELOAD这个环境变量了,经过上面的知识补充,我们知道,通过这个环境变量,我们可以在主程序和其动态链接库的中间加载别的动态链接库,甚至覆盖正常的函数库。现在我们可以使用这个环境变量来临时加载还存在但是不在原目录或是名字被篡改了的库文件,在临时添加环境变量的后面接上我们要执行的命令就可以将libc.so.6库恢复到原来的样子,让小编带你进行实验验证:
第二种:文件被删除,不存在了
对于这种情况比较复杂,我们不能通过本地直接进行恢复,我们必须借助外面的文件进行恢复,具体的思路就是通过加载光盘系统文件,将该函数库重新拷贝到本地系统中来,达到恢复的目的,让小编画图来说明:
目的:我们要借助光盘系统将光盘系统中的/lib64/libc.so.6拷贝到本地系统的/lib64/中,达到恢复的目的。
系统挂载光盘,开机。
(1)选择完成后进入安装界面,选择troubleshooting。
(2)进入后选择rescue a CentOS system(使用光盘制作一个小型的系统)。
(3)跳出4个选项,选择1继续。
3. 退出救援模式,重启系统
(1)修复完成后使用exit命令退出救援模式,正常重启系统即可。
这个界面可能会卡一段时间,因为没有关闭SELinux,等几分钟就OK。
修复完成,正常进入系统。
二、CentOS8.2 救援模式修复文件系统和磁盘故障
故障现象:
1、文件系统分区变成只读文件系统,无法写入文件
2、磁盘使用过长,机房断电,导致磁盘故障或者有坏块,系统无法启动。
Linux救援模式
修复命令:
chroot /mnt/sysimage
umount /dev/sda1
fsck -y /dev/sda1
三、CentOS8.2 救援模式grub启动文件和fstab文件异常
Centos8救援模式--误删/usr/bin/恢复
模拟场景
Centos8误删/usr/bin/等系统内置文件夹, 导致几百个内置命令丢失。
参考文献: