我不小心压缩了我的整个服务器

Dex*_*ian 10 linux gzip boot

好吧,如果有人想扮演上帝并创造奇迹,我很失望。

所以,我的任务是制作一个脚本,找到超过 6 个月的文件,压缩它们然后删除它们。在我制作 tihs 脚本的过程中,我运行了这个:

find / -type f -mtime -400 ! -mtime -180 | xargs gzip blablabla
Run Code Online (Sandbox Code Playgroud)

这给了每个文件一个 .gz 扩展名。现在我一注意到就取消了,但为时已晚。完成命令后,我的 bash 命令都不起作用,因为 $PATH 变量自行清空。在意识到问题出在哪里之前,我尝试了很多东西。

因此,在解压缩所有内容后,我仍然无法启动。在我按照在线说明进行了以下操作之后,我设法进行了 grub 救援:

root (hd0,0)
setup (hd0)
kernel (hd0,0)/boot/vml[...]
initrd (hd0,0)/boot/initrd.im[...]
Run Code Online (Sandbox Code Playgroud)

之后我的 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.
Run Code Online (Sandbox Code Playgroud)

我试过修复文件系统,我从 3 个不同的 LiveCD/救援磁盘启动,我从 2 个不同的 dicsc 运行启动修复。我确实强制 fscks ...

我真的没有想法,我需要让这个服务器至少启动,这样我才能恢复我的 SQL 数据库。我迫切需要帮助,如果需要,我什至会付钱。

我一整天都在论坛上潜伏了 3 天,以寻找可能的解决方案,但我仍然处于同一点...请帮忙?

小智 9

我会尝试的第一件事是运行 LiveCD 环境并尝试解压缩所有内容,希望这将使系统恢复到可引导状态。注意:如果原始 gzip 过程中断,我会担心潜在的数据损坏。

否则,我会像其他人建议的那样尝试将数据库迁移到新系统,但正如您遇到的那样,可能存在需要单独解决的劳动密集型依赖项和配置问题。


Mic*_*nez 8

这将取决于文件系统是否已修复到足以让您能够从 LiveCD 挂载这些分区。不要费心尝试引导系统。首先,挂载分区并解压缩所有 .gz 文件。这将为您提供 init 和系统二进制文件的工作副本。然后就可以使用 grub 修复引导扇区了。然后引导到单用户模式并再次 fsck 文件系统。如果可行,您将拥有一个正在运行的系统。您还将拥有一堆确实应该压缩的解压缩文件(如手册页),但这比拥有无法启动的系统要好。

如果您无法从 LiveCD 挂载分区,那么您很不幸。那时没有任何东西可以恢复您的系统。


小智 6

这里的普遍共识是,您应该将磁盘安装在工作系统中并拯救您的文件,这并没有错。这是明智的做法。但另一种方式更有趣,也很有教育意义。在努力摆脱其他人会放弃并从头开始重新安装的混乱情况时,我学到了很多东西。(不是在其他人所依赖的服务器上……)

无论如何,到目前为止,您已经运行了一个 initramfs(initrd)。这是一个好的开始。但是它无法完成到 init 的切换,因为 init 现在init.gz可能?要取得任何进展,准确了解您拥有的 Linux 发行版会有所帮助,以便我们可以在其 initramfs 中查找哪些工具可用于紧急情况。

您提供的错误消息看起来可能来自 Debian 的 initramfs。如果是 Debian,那么您应该(initramfs)在最后一个错误之后的下一行得到一个shell 提示。如果你这样做了,你应该调查那些失败的挂载发生了什么。被/root/dev遗漏?(/root是在 initramfs 运行期间应该挂载正常根 fs 的位置)

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

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

旁白:我不知道该find命令如何对每个文件进行 gzip 压缩...在我看来,选择 180 到 400 天之间的文件是正确的。