我只是跑了(不是故意的!)rm -rf /bin
。
我已关闭电脑并使用 Finnix 尝试恢复。我已成功安装驱动器,并确认整个/bin
文件夹确实被删除了。
不重新安装操作系统可以恢复吗?
我正在考虑设置一个具有相同操作系统和架构(Ubuntu Server 11.10 alpha 版本,x86)的虚拟机并安装我在服务器上安装的所有软件包,然后只需复制该/bin
文件夹即可。
这有用吗?我是不是最好重新开始?
答案1
总体而言,我倾向于重新安装(从您绝对应该拥有的备份中)。但我感觉有点儿太老套了,所以这里有另一种方法(假设您的系统安装在 下/target
):
获取包含以下文件的所有已安装软件包的列表
/bin
:grep ^/bin/ /target/var/lib/dpkg/info/*.list | sed 's%^.*/\([^/\.]*\).list%\1%' >/tmp/pkglist
(在我的 Debian Squeeze 系统上,总共有 34 个软件包,几乎都是核心软件包)
下载每个软件包(我懒得编写这个脚本,所以直接访问 packages.ubuntu.com 并将它们下载到 下的某个位置
/target
)。如果你很幸运,一些软件包可能仍然在 中/target/var/cache/apt/archives
。对于每个包,运行
/target/usr/bin/dpkg -x <package> /target
。我相当确定dpkg
现在所有包都是独立的,并且不应该在包本身中调用任何东西/bin
。
一旦系统恢复正常,您应该确保运行apt-get --reinstall install <all the packages from step 1>
,因为(由于您正在运行预发布版本,系统管理员 Cat 表示这在生产系统上是禁忌)您刚刚提取的软件包的版本可能与系统之前的不同,并且您需要确保系统确切地知道什么是什么。
答案2
虽然您的策略可能有效(很有可能有效,如果您复制回 bin 目录,然后对系统中的所有软件包执行 apt-get 重新安装,则成功率会更高),但它可能会在将来产生问题,因为您可能会得到一个不稳定的服务器。
如果这种情况发生在我身上,我会重新安装并从每日备份中恢复。您有每日备份 - 灾难恢复计划 - 不是吗?
如果您没有灾难恢复计划,我建议您备份所有配置文件和要保留的数据,然后重新安装。这样您就可以确保最终再次拥有稳定的服务器。
答案3
我会尝试创建一个虚拟机,然后将内容复制/bin
到损坏的机器上。这样应该就可以启动并运行了。然后运行
dpkg --get-selections | awk '{print $1}' | xargs -l1 aptitude reinstall
这将重新安装系统上的所有软件包。
答案4
文件不见了。虽然你可以尝试“恢复”文件 - 但我不建议这么做。
注意:我没有运行 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)你可能需要 deboostrap
/mnt/mint
- 不确定 - (替代方案 #2)您可以将
/bin
liveCD 的内容复制过去,/mnt/mint/bin
但我不知道 mint 的 liveCD 是否使用 busybox,这可能会使事情复杂化 - 在这种情况下,替代方案 #1 似乎更安全。
通常,这应该会通过“强力重新安装”您拥有的所有内容来返回您的文件。您可以做一些更“聪明”的技巧,并查询在 /bin 中放置二进制文件的所有软件包