gpt4 book ai didi

bash - 被bash脚本意外删除了数据库,求救

转载 作者:行者123 更新时间:2023-11-29 08:44:07 25 4
gpt4 key购买 nike

我的开发人员犯了一个大错误,我们无法在服务器中找到任何人的 mongo 数据库。请救命!!!

他登录到服务器,并将以下 shell 保存在 ~/crontab/mongod_back.sh 下:

enter image description here

然后他运行 ./mongod_back.sh,然后出现很多permission denied,然后他执行 Ctrl+C。然后服务器自动关闭。

他尝试重新启动服务器,然后出现 grub 错误:

enter image description here

随后他联系了阿里云,工程师将磁盘连接到另一台正常工作的服务器上,以便他检查磁盘。然后,他发现一些文件夹不见了,包括mongodb所在的/data/!!!

1) 我们只是不明白 bash 如何破坏包括 /data/ 在内的磁盘;

2) 当然,是否有可能取回 /data/

PS:他之前没有给磁盘拍过快照。

最佳答案

问题 1

  1. We just don't understand how the bash could destroy the disk including /data/;

原因:$OUT_DIR 未设置

bashsh中,注释写成#comment,而不是//comment
下面这行会有如下效果

someVariable=someValue // not a comment
  • someValue 分配给环境变量someVariable,但仅限于此命令。执行该命令后,变量将返回其旧值,在本例中为空。
  • 执行“命令”//不是注释,也就是程序//带有参数nota 评论。由于 // 只是一个目录(与 / 相同),这将导致错误消息,仅此而已。

现在这种行为可能看起来很奇怪,但您可能已经在众所周知的习语中使用过它,例如 IFS= read -r lineLC_ALL=C sort

查看您的脚本,以下几行可能导致了问题:

OUT_DIR=/data/backup/mongodb/tmp // ...
...
rm -rf $OUT_DIR/*

我很抱歉给你带来这个,但你基本上执行了 rm -rf/* 因为 $OUT_DIR 扩展为空字符串。

其他系统的潜在风险

即使 $OUT_DIR 不为空,效果也可能是一样的,因为 //rm。考虑命令

rm -rf some // thing

这应该删除三个文件/目录 some//thing。正如已经指出的那样,/// 是同一个目录。

但是,Linux 上rm大多数 实现都有针对这种情况的防护措施,不会轻易删除/。在 Ubuntu 上,您会收到以下警告(不要在家里尝试这个。如果您的 rm 不同,那就糟了。)

$ rm -rf //
rm: it is dangerous to operate recursively on '//' (same as '/')
rm: use --no-preserve-root to override this failsafe

问题 2

  1. And of cause, is it possible to get the /data/ back?

这是 StackOverflow 的题外话。但是,您可以找到 many answers to this question on other stackexchange sites .

您可以尝试使用恢复工具,但如果您没有备份,则无法保证您可以恢复数据。

关于bash - 被bash脚本意外删除了数据库,求救,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55323391/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com