AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 959707
Accepted
SoftTimur
SoftTimur
Asked: 2019-03-25 03:36:33 +0800 CST2019-03-25 03:36:33 +0800 CST 2019-03-25 03:36:33 +0800 CST

使用 bash 脚本意外删除了数据库[重复]

  • 772
这个问题在这里已经有了答案:
星期一早上的错误:sudo rm -rf --no-preserve-root / (9 个答案)
3年前关闭。

编辑:后续问题: 通过 --repair 和 WiredTiger 恢复 mongoDB。

我的开发人员犯了一个巨大的错误,我们在服务器的任何地方都找不到我们的 Mongo 数据库。

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

mongod_back.sh

#!/bin/sh
DUMP=mongodump
OUT_DIR=/data/backup/mongod/tmp  // 备份文件临时目录
TAR_DIR=/data/backup/mongod      // 备份文件正式目录
DATE=`date +%Y_%m_%d_%H_%M_%S`   // 备份文件将以备份对间保存
DB_USER=Guitang                  // 数库操作员
DB_PASS=qq■■■■■■■■■■■■■■■■■■■■■  // 数掘库操作员密码
DAYS=14                          // 保留最新14天的份
TARBAK="mongod_bak_$DATE.tar.gz" // 备份文件命名格式
cd $OUT_DIR                      // 创建文件夹
rm -rf $OUT_DIR/*                // 清空临时目录
mkdir -p $OUT_DIR/$DATE          // 创建本次备份文件夹
$DUMP -d wecard -u $DB_USER -p $DB_PASS -o $OUT_DIR/$DATE  // 执行备份命令
tar -zcvf $TAR_DIR/$TAR_BAK $OUT_DIR/$DATE       // 将份文件打包放入正式
find $TAR_DIR/ -mtime +$DAYS -delete             // 除14天前的旧备

然后他运行它并输出permission denied消息,所以他按下了Ctrl+C。服务器自动关闭。他试图重新启动它,但得到一个 grub 错误:

格鲁布

他联系了阿里云,工程师将磁盘连接到另一个工作服务器,以便他可以检查磁盘。看起来有些文件夹不见了,包括/data/mongodb 所在的位置!

  1. 我们不明白脚本如何破坏磁盘,包括/data/:
  2. 当然,是否有可能获得/data/回报?

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

PS2:由于人们经常提到“备份”,这两天我们有很多重要的用户和数据来了,这个动作的目的是备份它们(第一次),然后它们被完全删除了。

filesystems
  • 3 3 个回答
  • 3033 Views

3 个回答

  • Voted
  1. Best Answer
    kubanczyk
    2019-03-25T04:11:20+08:002019-03-25T04:11:20+08:00

    很容易。该//序列不是 bash ( #is) 中的注释。

    该语句OUT_DIR=x // text没有任何效果*,除了一条神秘的错误消息。

    因此,由于 OUT_DIR 为空字符串,最终执行的命令之一是rm -rf /*. 由于用户没有权限,一些直接放在下面/的目录没有被删除,但似乎一些重要的目录被删除了。您需要从备份中恢复。


    * bash 语句的特殊形式A=b c d e f大致类似于:

    export A=b
    c d e f
    unset A
    

    一个常见的例子:

    export VISUAL=vi                       # A standard visual editor to use is `vi`
    visudo -f dummy_sudoers1               # Starts vi to edit a fake sudo config. Type :q! to exit
    VISUAL=nano visudo -f dummy_sudoers2   # Starts nano to edit a fake sudo config
    visudo -f dummy_sudoers3               # Starts vi again (!)
    

    有问题的脚本行是这样的:

    export OUT_DIR=/data/backup/mongod/tmp
    // 备份文件临时目录   # shell error as `//` isn't an executable file!
    unset OUT_DIR
    
    • 36
  2. not my real name
    2019-03-25T11:01:20+08:002019-03-25T11:01:20+08:00

    1) 他错误地认为这//是一个 bash 评论。不是,只有#是。

    shell 解释// text为普通命令,没有找到名为 的二进制文件//,什么也没做。

    在 bash 中,当您在OUT_DIR=/data/backup/mongod/tmp命令 ( // text) 之前有一个变量赋值 ( ) 时,它只会在运行命令时设置变量。因此,它OUT_DIR立即取消设置,当到达 rm 行时,OUT_DIR现在取消设置,rm -rf /现在调用,删除您有权删除的所有内容。

    2)解决方案与所有rm -rf /情况相同:从备份恢复。没有其他解决方案,因为您无法物理访问硬盘驱动器。

    • 8
  3. RMPJ
    2019-03-25T11:25:48+08:002019-03-25T11:25:48+08:00

    1) Bash 注释以# 开头。对不起你的损失。2) 不幸的是,从备份中恢复是唯一的方法。

    • 4

相关问题

  • 我如何知道 AIX 中磁盘上的文件系统是什么?

  • 控制 UNIX 目录内容用户组所有权

  • 在 Ubuntu 上将 Windows 磁盘分区与 Linux 分区合并

  • 在 VMPlayer 上 Windows 和 Linux 之间共享目录的最佳方式

  • md5sum 重复为同一台机器上的同一文件提供不同的校验和

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve