LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 5527|回复: 9

/var 误删抢险记

[复制链接]
发表于 2003-11-1 21:10:46 | 显示全部楼层 |阅读模式
那天正在研究rsync,照着某网站的说明做了。其中有一个--delete的参数,我当时并没有注意,照抄了下来。另外该说明把备份信息放在/tmp,我本人并不喜欢/tmp,所以自己换成了/var。等我一回车,恐怖的事情发生了。

--delete的作用,据后来我得知,是把服务端已经不存在的目录删去。于是可以知道后果。当它在删一大堆文件的时候,并未引起我的注意。等我反应过来,/var里面已经基本没什么东西了。

经验一:任何带有del关键字的命令务必再三检验。

痛苦。懊悔。

上irc.debian.org去问了,他们告诉我可以用ext2的undel工具,比如e2undel。不过你现在得立即umount这个分区。由于当初我只分了一个区,且硬盘上仅这一个区(其实即使分了多个区,/var也是没有办法umount的),于是我决定使用knoppix。

knoppix启动,里面是没有类似的恢复工具的。取得root权限,肯定是不能马上apt-get的。先来一下update,发现/var/lib/apt、/var/lib/dpkg、/var/cache/apt等目录都是链接,链接到光盘的目录,所以无法写入。于是把链接删掉,自己新建目录,就可以update了。等install的时候,提示/lib目录无法写入。一看,/lib目录也是链接,于是想也没想,删!等到删了以后,发现,没了/lib,基本没有什么命令可以执行了,包括ls、mv等命令。而且在图形界面上也是不能把其他目录重命名为/lib的。考虑到即使装了也未必能恢复所有的文件,而且我的/var里面没有什么重要的东西,于是放弃undelete的念头。

经验二:knoppix可以安装新的软件包,不过得把一些链接换成空的目录。至于安装重要库到/lib,还是免了吧。

系统还是可以启动的,不过启动的时候有很多服务不能正常打开。这无关紧要,只要重装一下服务就可以了。重要的在于/var/lib/dpkg/info/下面的软件包安装信息也被删得差不多了,更由于/var/lib/dpkg/status文件丢失,apt乱七八糟。遂决定重新安装所有的软件包。

重新安装可不是一件简单事。幸好在/var/backups/里面找到了status的备份,拷到/var/lib/dpkg/。不过要是没有找到的话,debian-reference上面也有一个链接,最基本的/var,可以找来用。dselect,除了base以外全部remove(之所以不purge,我是怕它把我的配置删了),不过系统会让你确认,因为有五个包:shellutils、fileutils、textutils、apt、original-awk也是必需的,还得加上。

选完以后,开始Install。系统发现emacsen-common包有问题,有文件都是,并且牵扯出一大堆包。用了--force-all也没有用,于是执行
dpkg --get-selections     取得清单,把emacsen-common的状态改成purge,然后
dpkg --set-selections     再写入,
于是emacsen-common没有问题了,其他一些相关包的问题,大都是prerm、postinst脚本的问题,到/var/lib/dpkg/info/下面修改具体脚本就可以了。

经验三:对于--force-all也没用的包,可以尝试get-selections然后set-selections。

终于可以开始remove了。过程中还会出现不少问题,如法炮制就是了。每删一个软件包都会出现一大堆软件包信息丢失的警告,不过看着它们越来越少,知道离问题解决也不远了。等到这些包全部删完,剩下的警告也就不多了,大约还有十多个。手动把这些包reinstall就可以了。不过在此之前,我还把/var彻底清理了一下,把一些没什么用处的东西索性全删了。

然后就不用我教了吧?重新安装所有的软件包,软件包会在/var里面写入各种信息的。在此期间如果要重新启动的话,记得把devfs=mount去掉,如果你安装了devfsd的话。

好了,应该没什么问题了。现在发现kde安装似乎有一点问题,不能切换到中文桌面。另外软件包的dependence也常有点问题。知道是不是这个原因。

本文只适用于/var被误删。如果其他目录,如/etc、/usr等目录的话,劝你还是老实一点重装吧。

最后再提醒一下大家,所有包含有del关键字的命令,请务必再三检查!
发表于 2003-11-1 21:59:20 | 显示全部楼层
惨痛的教训呀...
发表于 2003-11-2 00:29:06 | 显示全部楼层
我删过两次/var,真是……
按照debian reference说的,基本就是重新复制一个最初的/var目录结构过去,重新装用到的软件恢复包管理的数据。
幸亏我每次都导出过安装包的列表。
 楼主| 发表于 2003-11-2 16:17:26 | 显示全部楼层
在抢救过程中还发现了一个非常有趣又实用的命令:sl。具体干什么用的,自己试试看吧。
发表于 2003-11-2 18:21:08 | 显示全部楼层
估计大部分兄弟什么都试不出来...

需要先安装sl才有
发表于 2003-11-2 22:01:36 | 显示全部楼层
那就说说sl属于哪个包,有什么用啊,让兄弟们也试试呀
 楼主| 发表于 2003-11-2 22:18:49 | 显示全部楼层
原来是这样的。
sl就属于sl包。其实也没什么用处,就是在……
……在当你把ls错打成sl的时候,让你轻松一下,消消火气!

sl - display animations aimed to correct users who accidentally enter sl instead of ls.
发表于 2007-2-15 21:10:11 | 显示全部楼层
Post by wangguoqin1001
原来是这样的。
sl就属于sl包。其实也没什么用处,就是在……
……在当你把ls错打成sl的时候,让你轻松一下,消消火气!

sl - display animations aimed to correct users who accidentally enter sl instead of ls.


楼主这种包也能找到,折腾成这样真是难为你了。
回复 支持 反对

使用道具 举报

发表于 2007-2-16 18:56:29 | 显示全部楼层
sl,果然消消火气
回复 支持 反对

使用道具 举报

发表于 2009-4-22 23:54:03 | 显示全部楼层
昨天因为删除了 /usr,本来是要删除另一个挂载盘上的 usr/下的文件的,可是维护系统习惯了,直接打了个 rm -R /usr/* 可想而知,今天重装了系统。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表