Chinaunix首页 | 论坛 | 博客
  • 博客访问: 793853
  • 博文数量: 858
  • 博客积分: 10000
  • 博客等级: 上将
  • 技术积分: 5015
  • 用 户 组: 普通用户
  • 注册时间: 2008-08-29 17:43
文章分类

全部博文(858)

文章存档

2011年(1)

2008年(857)

我的朋友

分类: LINUX

2008-08-29 17:48:41

 
  那天正在研究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等目录的话,劝你还是老实一点重装吧。

Linux /var误删抢险记Linux /var误删抢险记Linux /var误删抢险记Linux /var误删抢险记Linux /var误删抢险记Linux /var误删抢险记Linux /var误删抢险记Linux /var误删抢险记Linux /var误删抢险记Linux /var误删抢险记
阅读(1455) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~