文章目录

前段时间本来想要更新一台 Centos 5.5 服务器SSH,所以打算先 yum remove openssl,当时也是粗心大意,没仔细看卸载所依赖的包,结果没曾想把系统的一些 bash 指令都卸载掉了,什么 ls、cp 这些基本指令都不能用了,顿时人就傻了,当时是远程 ssh 连接到服务器的,当时都不敢断开连接,知道断开连接肯定就连不上了,最后还是断开连接了。

虽然没法远程,但是服务器上跑着的网站依赖可以正常访问,猜想应该只是卸载掉了基本指令,是不是可以通过安装或是拷贝丢失文件还原回来?跑到机房,接显示屏试试看能不能登录,结果输入用户名就没有反应,也不提示要我输入密码,只是不断重新要输入用户名。大概就是回车后反复出现下面这段话。

1
(isehome)login:

看来登录也是登录不了了,但是上面又还有一些 web 服务,不敢轻易重启。网上搜索了一下,看来遇到类似问题的不止我一个。
http://wuhancd.blog.51cto.com/376986/932809
http://www.linuxquestions.org/questions/linux-newbie-8/yum-remove-openssl-issue-809601/

显然,最差的一种方法就是想办法备份数据,然后重装系统了,想想这个过程有多麻烦就知道了,其实我也不知道这个系统上还有些啥重要数据。心想还是能恢复尽量恢复吧,咨询了宫大汉同学,最后决定还是采用从U盘启动一个操作系统,然后把原来系统所在的盘挂载过来看看问题。

起初还打算采用 Centos 的 rescue mode 看能不能恢复,但不知道怎么的就是进不去系统(似乎当时下载的是64位的),放弃了。直接从U盘启动 Ubuntu 14.04,刚开始尝试用 df 指令之类的尝试找没有找到,后来就用系统上自带的软件 disk 找到原来系统的所在分区并挂载,谢天谢地原来的文件都还在,看了一下系统是32位的,/usr/bin下面的许多指令都没了,chroot到原来系统的根目录,发现确实很多指令都不能执行,只能采用从另一个 Centos 5.5 的系统上拷贝的方法了。

跑去网上下载了一个32位 Centos 5.5 DVD 版的,发现太大了,索性偷懒下了一个几百兆的 LiveCD 版。从中提取出 img 文件,将其挂在到 Ubuntu 的一个目录,然后就可以看到一个全新的 Centos 5.5 的所有文件,然后就小心翼翼的拷贝,将 /usr/bin, /usr/sbin, /usr/lib/, /usr/local/bin, usr/local/sbin, /usr/local/lib,几个目录的全部对应拷贝。

1
cp -r -n -p /usr/bin ../../usr/

像上面一样拷贝,将整个目录拷贝,不覆盖已有文件,保持指定的属性(默认:模式,所有权,时间戳)。

终于拷贝完了,重启机器试一试啦,结果还是进不了系统,报错说缺少 /etc/inittab,又重新从 U 盘启动进入 Ubuntu,对应文件拷贝,重启之后总算是可以输入用户名了。

1
(isehome)login:

高兴得太早,反复输入用户名还是登录不进去,搜了一些资料说是可能是 /etc/inittab 的问题。看了下 inittab。这是一个指明 Linux INIT 进程如何启动系统的过程,反正不管了,死马当活马医,最后把这里面提到的所有的文件和目录都重新拷贝。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#
# inittab This file describes how the INIT process should set up
# the system in a certain run-level.
#
# Author: Miquel van Smoorenburg, <[email protected]>
# Modified for RHS Linux by Marc Ewing and Donnie Barnes
#

# Default runlevel. The runlevels used by RHS are:
# 0 - halt (Do NOT set initdefault to this)
# 1 - Single user mode
# 2 - Multiuser, without NFS (The same as 3, if you do not have networking)
# 3 - Full multiuser mode
# 4 - unused
# 5 - X11
# 6 - reboot (Do NOT set initdefault to this)
#
id:5:initdefault:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

# When our UPS tells us power has failed, assume we have a few minutes
# of power left. Schedule a shutdown for 2 minutes from now.
# This does, of course, assume you have powerd installed and your
# UPS connected and working correctly.
pf::powerfail:/sbin/shutdown -f -h +2 "Power Failure; System Shutting Down"

# If power was restored before the shutdown kicked in, cancel it.
pr:12345:powerokwait:/sbin/shutdown -c "Power Restored; Shutdown Cancelled"
...
...
...

经过漫长的拷贝,终于拷贝完了,重启之后发现一切顺利进入到了需要图形化输入用户名的界面了,输入完用户们和密码进入系统,发现桌面上的中文不能正常显示,其他都还好,反正可以用 Terminal 就行,其他什么都不重要了,感觉整个世界又恢复了平静了。

最后把网络连接搞定,缺啥装啥,把已有的 Web 服务和 FTP 服务重新开起来,一切又恢复如初了。

文章目录