我刚刚删除了“ / bin”。最好的恢复方法是什么?


10

我只是跑了(不是故意的!)rm -rf /bin

我已启动计算机,并正在使用Finnix尝试从计算机中恢复。我已成功安装驱动器,并确认是的,整个/bin文件夹已删除。

是否可以在不重新安装操作系统的情况下从中恢复?

我在考虑可以设置具有相同操作系统和体系结构(Ubuntu Server 11.10 alpha版本,x86)的VM,并安装服务器上已安装的所有软件包,然后仅复制/bin文件夹。

这样行吗?我刚开始会更好吗?

Answers:


15

通常,我倾向于重新安装(从您绝对应该拥有的备份中)。但是我感觉有点黑,所以这是另一种方式(假设您的系统安装在/target):

  1. 获取包含以下文件的所有已安装软件包的列表/bin

    grep ^/bin/ /target/var/lib/dpkg/info/*.list | sed 's%^.*/\([^/\.]*\).list%\1%' >/tmp/pkglist
    

    (在我的Debian Squeeze系统上,总共有34个软件包,几乎所有软件包都是核心软件包)

  2. 下载其中的每个程序包(我不必为此编写脚本,因此只需打下packages.ubuntu.com并将其下载到下方的某个位置/target)。如果您幸运的话,其中一些软件包可能仍在中浮动/target/var/cache/apt/archives

  3. 对于每个软件包,请运行/target/usr/bin/dpkg -x <package> /target。我可以肯定的dpkg是,这些天都是自给自足的,不应大声疾呼/bin自己。

一旦使系统恢复正常,就应确保并运行apt-get --reinstall install <all the packages from step 1>,因为(因为您正在运行预发行版,Sysadmin Cat表示在生产系统上是禁止发行)软件包的版本您刚刚提取的内容可能与之前系统上的内容有所不同,并且您将需要确保系统确切知道什么。


好的答案,但是我错过了什么吗?不会dpkg-query -S /bin做的比你同样的grep .. | sed节?如果需要清理列表以每行列出一个软件包名称,则dpkg-query -S /bin | sed 's/\,\ /\n/g'可以使用(尽管在最后一行有多余的:/ bin)。
Janne Pikkarainen

1
是的,它会-我试图尽量减少目标系统中运行的内容,以防万一运行中需要执行任何操作/bin,并且我不想依靠救援系统中特定于Debian的任何东西来使它成为对于将来的发现者来说尽可能通用。
womble

似乎这只是基本系统实用程序的列表-那里没有包含文件的其他软件包/bin吗?我应该重新安装系统上的每个软件包,还是仅重新安装列表生成的软件包?(还:谢谢,我爱你!)
Tom Marthenal 2011年

1
通常,只有基本软件包才会包含文件/bin-大多数软件包都应将其所有数据放在下/usr。在我的系统上,列表中仅包含几个非必需的软件包(例如zsh/bin。顺便说一句,投票是表达爱意的好方法...
womble

1
我按照您的指示进行操作,并且它们运行良好—我的服务器已备份并正在运行。非常感谢您的帮助!
汤姆·马泰纳尔

5

尽管您的策略可能会起作用(很有可能,但是一旦您复制回bin目录,然后执行apt-get重新安装系统中所有软件包的操作,就会有更多的机会),但将来可能会出现问题,因为您可能会不稳定的服务器。

如果那会发生在我身上,我将重新安装并从日常备份中还原。您有每日备份-灾难恢复计划-是吗?

如果您没有灾难恢复计划,建议您备份所有要保留的配置文件和数据,然后重新安装。这样,您可以确定将再次获得稳定的服务器。


1
由于他在这里发布了如何恢复/ bin文件夹的猜测,因此他没有备份。
Goez

不幸的是,我没有每日备份。具有讽刺意味的是,我当时编写的bash脚本是每日备份脚本。看来我要重新安装了-感谢您的建议。
汤姆·马瑟纳尔

无需重新安装;看我的答案。
womble

文件系统快照对于从这种情况中恢复非常有用。不幸的是,ext2 / 3/4文件系统没有实现它们,而使用LVM会大大降低性能。如果我不小心删除了FreeBSD盒上的/ bin,我只是挂载了一个较早的快照,然后将文件复制回文件系统的实时版本。据说OS X也有这个(在那里被称为“时间机器”)。
捕捉

3

我会尝试创建VM,然后将其中的内容复制/bin到损坏的计算机上。那应该使您启动并运行。然后跑

dpkg --get-selections  | awk '{print $1}' | xargs -l1 aptitude reinstall

它将重新安装系统上的所有软件包。


1

如果可以访问计算机,最简单的方法是挂载文件系统,对所有数据进行备份(以防万一)。

然后,您可以像正常安装一样重新安装ubuntu。原则上,您的所有数据(home dir等和var)都应该在那里。

有一种方法可以重新安装所有软件包,以便重新填充/ bin,但这相当复杂。


0

文件不见了。虽然您可以尝试“取消删除”文件-但我不建议这样做。

注意:我没有运行Ubuntu(并且有一段时间没有使用Debian发行版了)。但是,在过去的所有类似情况下,我都进行过各种发行版恢复。

您的最佳做法:

  • 从liveCD启动
  • 使用liveCD将您的系统挂载到系统位置(例如/mnt/mint
  • 使用dpkg查询所有已安装的软件包:
#dpkg --admindir = / mnt / mint / var / lib / dpkg -l
  • 使用apt-get使用以下命令将所有这些软件包安装到/ mnt / mint目标中:
#apt-get -o RootDir = / mnt / mint .... 
  • (替代方案1)您可能需要取消装箱/mnt/mint-不确定
  • (替代#2)您可以将/binliveCD的内容复制到,/mnt/mint/bin但我不知道薄荷的liveCD是否使用busybox可能会使事情复杂化-在这种情况下,替代#1似乎更安全。

通常,这应该通过“重新安装”所有内容来返回文件。您可以执行更多“聪明”的技巧,并查询在/ bin中删除了二进制文件的所有软件包

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.