Jon*_*lov 149 disaster-recovery ubuntu-12.04 hetzner
请注意:此问题的答案和评论包含来自另一个类似问题的内容,该问题已受到外部媒体的大量关注,但结果证明是某种病毒式营销计划中的恶作剧问题。由于我们不允许以这种方式滥用ServerFault,因此删除了原始问题并将答案与该问题合并。
这是一个有趣的悲剧。今天早上我在我的生产服务器上做一些维护,当我错误地执行了以下命令时:
sudo rm -rf --no-preserve-root /mnt/hetznerbackup /
我之前没有发现最后一个空格/,几秒钟后,当警告充斥我的命令行时,我意识到我刚刚按下了自毁按钮。以下是一些让我眼花缭乱的东西:
rm: cannot remove `/mnt/hetznerbackup': Is a directory
rm: cannot remove `/sys/fs/ecryptfs/version': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/inode_readahead_blks': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_max_to_scan': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/delayed_allocation_blocks': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/max_writeback_mb_bump': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_stream_req': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_min_to_scan': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/mb_stats': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/trigger_fs_error': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/session_write_kbytes': Operation not permitted
rm: cannot remove `/sys/fs/ext4/md2/lifetime_write_kbytes': Operation not permitted
# and so on..
Run Code Online (Sandbox Code Playgroud)
当我发现生产服务仍在运行时,我停止了任务并松了一口气。遗憾的是,服务器不再通过 SSH 接受我的任何用户的公钥或密码。
你会如何从这里前进?我将游过一大片带刺铁丝网,以恢复 SSH 访问。
该服务器运行 Ubuntu-12.04 并托管在 Hetzner。
Jou*_*eek 223
事实是?在这一点上,对此没有简单/容易的自动修复。数据恢复是一门科学,即使是基本的常用工具也需要有人坐下来确保数据在那里。如果您希望在没有大量停机的情况下从中恢复,您会感到失望。
我建议使用 testdisk或某些特定于文件系统的恢复工具。尝试一个系统,看看它是否有效,等等。没有真正的方法可以使该过程自动化,但您可能可以小心地分批进行。
也就是说,问题和评论中有一些非常可怕的事情应该成为你的行动报告的一部分。
首先,你在没有先检查的情况下到处运行命令。在一个盒子上运行命令。然后是一些,然后更多。基本上,如果出现问题,最好让它影响一些而不是所有系统。
其次
@Tim 如何在不在服务器上安装远程驱动器的情况下进行备份?
吓到我。文件级单向备份是一个已解决的问题。Rsync 可用于保留权限并以一种方式将文件复制到备份站点。不小心有事?重新安装(最好是自动)rsync,一切正常。将来,您可能会将文件系统级快照与 btrfs 或 zfs 快照结合使用,并将其传送到系统级备份。我实际上会玩弄分离应用程序服务器、数据库和存储,并引入最小权限原则,这样你就可以分担这样的风险..
我知道我可以做任何事情。我现在需要考虑如何保护自己
事情发生后是考虑这一点的最糟糕的时间。
我们可以从中学到什么?
永远不要一次在任何地方运行命令。测试机和生产机分开,最好分阶段做生产机。最好是修理 1 台或 10 台机器,而不是 100 台或 1000 台。
双重和三重检查命令。要求同事仔细检查“嘿,我要添加一个驱动器,你能不能理智检查一下,这样我就不会擦掉一个驱动器,这并不可耻?”。包装纸也可能有帮助,但没有什么能比得上一双不那么疲倦的眼睛了。
你现在可以做什么?向客户发送电子邮件。让他们知道有停机时间和灾难性故障。与你的上级、法律、销售等交谈,看看如何减轻损失。开始计划恢复,如果需要,您最多只能雇佣额外的人手。在最坏的情况下,计划在恢复上花费大量资金。在这个阶段,您将致力于减少故障以及技术修复。
fak*_*ker 95
启动到 Hetzner 提供的救援系统并检查您造成了什么损坏。
将任何文件传输到安全位置,然后重新部署服务器。
恐怕这是您的最佳解决方案。
Ama*_*ali 92
当您使用 删除内容时rm -rf --no-preserve-root,几乎无法恢复。您很可能丢失了所有重要文件。
正如@faker在他的回答中所说,最好的做法是将文件传输到安全位置,然后重新部署服务器。
为避免将来发生类似情况,我建议您:
每周或至少每两周进行一次备份。这将帮助您以尽可能少的 MTTR 恢复受影响的服务。
不需要时不要以 root 身份工作。并且在做任何事情之前总是三思而后行。我建议你也安装safe-rm。
就此而言,请勿键入您不打算调用的选项,例如--no-preserve-root或--permission-to-kill-kittens-explicitly-granted。
小智 47
我遇到了同样的问题,但只是用硬盘驱动器测试,我已经失去了一切。我不知道它是否有用,但不要安装任何东西,不要覆盖您的数据,您需要安装硬盘驱动器并启动一些取证工具,例如我们的尸体解剖,photorec,Testdisk。
我强烈推荐Testdisk,如果你没有覆盖它,你可以使用一些基本命令来恢复你的数据。
Mon*_*der 33
解决此类问题的最佳方法是一开始就没有。
不要手动输入参数列表中有斜杠的“rm -rf”命令。(将这些命令放在具有非常好的验证/健全例程的 shell 脚本中以保护您免于做一些愚蠢的事情是不同的。)
只是不要这样做。
曾经。如果你认为你需要这样做,那说明你还不够努力。
相反,将您的工作目录更改为您打算从中开始删除的目录的父目录,以便 rm 命令的目标不需要斜杠:
cd / mnt
sudo rm -rf hetznerbackup
Abc*_*Xyz 15
我会尝试恢复备份机器,其中存储了所有副本:
dd。testdisk用于恢复文件。因此,假设您要恢复 1TB,您将需要额外的 2TB,1TB 用于备份(第一步)加上 1TB 用于恢复(第二步)。
我用别名 rm -fr [phone rang] 和 cd 到珍贵的目录也犯了类似的错误。现在,在使用 rm 或 dd 命令之前,我总是三思而后行并重新检查几次。
正如另一个答案中提到的,Hetzner 有一个救援系统。它包括具有 ssh 访问权限的网络引导选项以及用于在虚拟服务器上为您提供屏幕和键盘的 Java 小程序。
如果您想尽可能多地恢复,请将服务器重新启动到网络引导系统,然后登录并通过从适当的设备 inode 读取来下载文件系统的映像。
我认为这样的事情应该有效:
ssh root@host cat /dev/sda > server.img
Run Code Online (Sandbox Code Playgroud)
当然重定向是在调用 ssh 命令之前由 shell 完成的,所以 server.img 是一个本地文件。如果你只想根文件系统,而不是完整的磁盘,更换sda由sda3假设你使用相同的图像作为我。