我意外地压缩了我的整个服务器

好吧,如果有人想扮演上帝,创造我的神迹。

所以,我被赋予了一个脚本来发现超过6个月的文件,将它们压缩并删除。 在我制作这个脚本的路上,我跑了这个:

find / -type f -mtime -400 ! -mtime -180 | xargs gzip blablabla 

这给了每个单个文件一个.gz扩展名。 现在我一看到就立即解开了,但还是太迟了。 在命令完成后,我的bash命令都不会工作,因为$ PATHvariables清空了自己。 在意识到问题出现之前,我尝试了很多东西。

所以解压一切,我仍然无法启动。 我已经设法使其grub救援后至极我遵循网上说明:

 root (hd0,0) setup (hd0) kernel (hd0,0)/boot/vml[...] initrd (hd0,0)/boot/initrd.im[...] 

至于我的Linux部分启动,但给我以下错误:

 Begin : Running /scripts/init-bottom ... mount : mounting /dev on /root/dev failed : No such file or directory mount: mounting /sys/ on /root/sys failed: No such file or directory mount: mounting /proc on /root/proc failed : No such file or directory Target filesystem doesn't have requrested /sbin/init. No init found. Try passing init= bootarg. 

我已经尝试修复文件系统,我从3个不同的LiveCD /救援磁盘启动,我跑了从2个不同的DICSC启动修复。 我强迫fscks …

我真的没有想法,我需要得到这个服务器,至less启动,所以我可以恢复我的SQL数据库。 我渴望得到帮助,如果需要的话,我甚至会付钱。

我一直潜伏着为期三天的论坛,find一个可能的解决scheme,我仍然在同一个点…帮助吗?

这取决于文件系统是否足够修复,以便能够从LiveCD安装这些分区。 不要打扰尝试引导系统呢。 首先,安装分区并解压所有的.gz文件。 这会给你init和系统二进制文件的工作副本。 然后你可以使用grub来修复引导扇区。 然后启动到单用户模式并再次fsck文件系统。 如果这样做,你会有一个运行系统。 你也会得到一堆真正应该压缩的解压缩文件(比如手册页),但是比无法启动的系统要好。

如果你不能从LiveCD安装分区,那么你很不幸运。 在这一点上什么都不会恢复你的系统。

我想尝试的第一件事是运行一个LiveCD环境,只是试图解压所有的东西,希望能够使系统恢复到可启动状态。 注意:如果原始gzip进程被中断,我会担心潜在的数据损坏。

否则,我会尝试将数据库迁移到其他人所build议的新系统,但正如您遇到的情况,可能需要逐个解决劳动密集型的依赖性和configuration问题。

这里的一般共识,你应该只是在一个工作系统中挂载磁盘并拯救你的文件,没有错。 这是明智的做法。 但另一种方式更有趣,更有教育意义。 我已经学会了很多,为了摆脱凌乱的情况而学到了很多东西,其他人从头开始放弃和重新安装。 (不是在其他人所依赖的服务器上)

无论如何,到目前为止,你有一个运行的initramfs(initrd)。 这是一个好的开始。 但它不能完成切换到init,因为init现在是init.gz也许? 为了取得任何进展,这将有助于确切知道你的Linux发行版,因此我们可以查找initramfs中的哪些工具可用于紧急情况。

你提出的错误信息看起来像是可能来自Debian的initramfs。 如果是Debian,那么在最后一个错误之后,你应该在下一行得到一个(initramfs) shell提示符。 如果你这样做,你应该看看这些失败的坐骑是怎么回事。 是/root/dev缺less? ( /root是在运行initramfs期间应该挂载正常的root fs的地方)

如果你没有得到shell提示符,那么No init found. Try passing init= bootarg.之后No init found. Try passing init= bootarg. No init found. Try passing init= bootarg. 将是有趣的。 即使只是一个闪烁的光标,这是一个线索。 如果看起来完全冻结了,请尝试使用magic sysrq或Ctrl + ScrollLock获取有关哪些进程仍在使用的信息。

Debian的initramfs还允许你通过在内核命令行中添加一个break=参数来请求一些特殊地标的shell。 例如,要在Running /scripts/init-bottom行之前获取一个shell,请使用break=bottom

另外:我不知道如何find命令可以gzipped 每个文件…它看起来是正确的,我select180至400天之间的文件的目的。