centos库文件丢失紧急救援
删除库文件
在centos的lib目录当中有很多的库文件,有些库文件被很多的程序依赖,比如libc.so.6就被大多数的程序依赖,如果这个库文件删除掉,该如何进行救援呢?
通过ldd可以查出来某个程序依赖的库文件,如下所示
[root@c71 ~]# ldd `which cat`
linux-vdso.so.1 => (0x00007ffe151dd000)
libc.so.6 => /lib64/libc.so.6 (0x00007efc9e65e000)
/lib64/ld-linux-x86-64.so.2 (0x00007efc9ea2c000)
[root@c71 ~]# ldd `which tac`
linux-vdso.so.1 => (0x00007fff8c3fb000)
libc.so.6 => /lib64/libc.so.6 (0x00007fde7a66d000)
/lib64/ld-linux-x86-64.so.2 (0x00007fde7aa3b000)
[root@c71 ~]# ldd `which less`
linux-vdso.so.1 => (0x00007fffe9bcd000)
libtinfo.so.5 => /lib64/libtinfo.so.5 (0x00007fbd42d52000)
libc.so.6 => /lib64/libc.so.6 (0x00007fbd42984000)
/lib64/ld-linux-x86-64.so.2 (0x00007fbd42f7c000)s和cat都依赖 /lib64/ld-linux-x86-64.so.2 这个库文件,这个库文件是一个共享库,在系统之上就存在一份,但是好多命令都需要调用这个库,如果把这个库文件删除,那ls和cat命令就都无法使用了。
那现在我们将这些程序共同依赖的libc.so.6库文件给删除,如下所示:
[root@c71 ~]# rm -rf /lib64/libc.so.6
/bin/bash: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
# 删除之后发现大部分命令都不能使用了;
[root@c71 ~]# cat /etc/passwd
cat: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
/bin/bash: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
[root@c71 ~]# less /etc/passwd
less: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
/bin/bash: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
[root@c71 ~]# cp /etc/passwd /tmp
cp: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
/bin/bash: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
[root@c71 ~]# scp
scp: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
/bin/bash: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
[root@c71 ~]# reboot
reboot: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
/bin/bash: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
[root@c71 ~]#
救援模式
那在这种情况下,怎么办呢?
在这种情况下,基本上所有的外部命令全部都失效了,cp、scp、mv这些全都不能使用了,甚至重启都无法做到,即使从别的机器上把该库文件拷贝过来都不到,xshell、crt、rzsz等程序自带的文件传输功能也完全无法使用;只有一种办法,那就是进入另一个系统,通过另一个系统修复当前的系统?如何修复?既然当前系统损坏是因为库文件丢失导致的,那我们从别的系统上将该库文件拷贝过来,放到原来的地方不就行了!可是另外的系统从哪里搞呢?两个办法:
- 找一个存储设备,安装一个相同版本的linux,然后通过这个新的系统挂载旧的系统硬盘,将新系统的库文件复制一份到坏的系统;
- 插一个带有该系统镜像的U盘,要刻录过的,然后直接进入安装界面,进入界面上紧急救援模式,紧急救援模式会打开一上微型的小系统,通过这个系统可以将U盘上的库文件拷贝到原来地方,下面重点通过vmware workstation来演示一个该过程。
第一步:强制断电、并手动开机,然后进入到光盘,选择进行排错模式
为什么要强制断电 ?因为shutdwon、poweroff、reboot都不能使用了
第二步:进入到光盘里面的救援模式当中,在光盘里面找到我们丢失的库文件,将光盘里面的库文件放置到原来地方,如下所示
选择1继续之后,我们注意上文当中有一句放告诉我们系统已经被挂载到/mnt/sysimage目录下面,当前的操作系统实际上是U盘上的,由于这个操作系统不是之前坏的那个,所以cat、cp之类的命令全都是可以使用的,好接下来我们找到我们需要的库文件进行拷贝,如下所示:
最后,reboot,然后拔掉光盘,等待系统重新启动成功,验证是否恢复成功,如下所示,恢复成功