在覆盖或删除所需的内容时如何相对安全地进行回滚

时间:2018-11-07 03:28:30

标签: shell

我有一个backuprollback如下:

备份

为确保成功执行,我引入了名为BACKED_UP flag ,该标志初始化为值0

function backup() {
    # used for back up and rollback
    FOLDER_DIR="xxxx";
    FOLDER_BAK_DIR="xxxx-bak";
    if [[ backupCondition ]]; then
        printStartMsg "Start to back up the old ...";
        mv ${FOLDER_DIR} "${FOLDER_BAK_DIR}";
        [[ $? -eq 0 ]] && BACKED_UP=1; 
        printEndMsg "${GREEN_SETTER}${FOLDER_DIR} backed up to ${BOLD_SETTER}${FOLDER_BAK_DIR}${COLOR_RESET}";
    fi
}

回滚

rollback中,我将检查BACKED_UP标志以及备份文件夹,以确保备份存在,然后删除当前存在的文件夹。

function rollback() {
    if [[  ${BACKED_UP} -gt 0 && -d ${FOLDER_BAK_DIR}  ]]; then
        rm -rf ${FOLDER_DIR}; # this is dangerous
        printStartMsg "Rolling back now...";
        mv "${FOLDER_BAK_DIR}" ${FOLDER_DIR};
        printEndMsg "${GREEN_SETTER}Rolled back ${BOLD_SETTER}SUCCESSFULLY${COLOR_RESET}";
        exit 0;
    fi
}

我的担忧

危险在于:FOLDER_DIR可能会丢失当前存在的文件夹rm -rf,更糟糕的是备份仍未完成。

我知道有缺陷,但是否则可以在这里做什么?

1 个答案:

答案 0 :(得分:1)

这可能是一个矫kill过正,但是如何使用dump,但是存在限制,例如refer this from linus 但是转储在备份和管理备份方面做得很整齐