TAR 实现 Linux 操作系统文件及目录备份

TAR 实现 Linux 操作系统文件及目录备份

备份原理:基于目录或者文件的 atime、mtime、ctime 属性是否被修改

  • 文件被访问的时间(Accesstime,atime)
  • 文件内容被更改的时间(Modified time, mtime)
  • 文件写入、权限更新的时间(Change time,ctime)

更改文件内容 mtime 和 ctime 都会改变,但 ctime 可以在 mtime 未发生变化时被更改,例如修改文件权限,文件 mtime 时间不变,而 ctime 时间改变。

  • TAR增量备份案例如下:

    (1)/root 下创建 mode 目录,同时新增 2 个文件 mode1.txt mode2.txt

    mkdir mode && touch mode/mode1.txt mode/mode2.txst
    

    (2)使用 tar 命令第一次完整备份 mode 目录的内容,-g 指定快照 snapshot 文件,第一次没有文件会自动创建

    cd mode
    # *为要备份的文件名称也可以是绝对路径的目录
    tar -g /root/snapshot -czvf /root/2021mode.tar.gz *
    

    (3)使用 tar 命令第一次完整备份 mode 目录后,会生成快照文件/data/backup/snapshot,后期增量备份会以 snapshot 文件为参考,在 mode 目录中新增文件测试增量备份

    cd mode && touch mode3.txt
    tar -g /data/backup/snapshot -czvf /data/backup/2021mode_add1.tar.gz *
    

    增量备份时,需要使用-g 指定第一次完整备份的快照 snapshot 文件,同时增量备份包不能同名,使用 tar -tf 可以查看增量备份包内容.

    说明:在进行增量备份过程中同目录下同名文件进行更改(包括但不限制更改文件内容、更改权限等)增量备份会进行最新文件的备份,相当与每次都是每个文件的全量备份

  • 自动备份脚本

在配置为定时任务时,需要对脚本交互部分设置默认值即可

#!/usr/bin/env bash
#########################################################################
# File Name: auto_backup_system.sh
# Author: Mode
# mail: 13692247896@163.com
# Created Time: 四  3/18 09:57:20 2021
# Describe: 对目录进行增量备份
#########################################################################

# 获取所有变量为 array
SOURCE_DIR=($*)

TARGET_DIR=/data/backup

YEAR=$(date +%Y)

MONTH=$(date +%m)

DAY=$(date +%d)

WEEK=$(date +%u)

FILES=system_backup.tgz

CODE=$?

echo -e "------------------------------\n参数输入的时候注意:如果是绝对路径在备份的时候会进行全路径备份,相对路径备份当前目录即可\n------------------------------"


if [[ -z ${SOURCE_DIR} ]]; then

    echo -e "Plaese Enter a File or Directory You Need to Backup:\n-------------------------------------\nExample $0 /boot /etc....."
    exit 
fi

if [[ ! -d "${TARGET_DIR}/${YEAR}/${MONTH}/${DAY}" ]]; then
    
    mkdir -p "${TARGET_DIR}/${YEAR}/${MONTH}/${DAY}" > /dev/null 2>&1

    echo "This ${TARGET_DIR}/${YEAR}/${MONTH}/${DAY} Created Successfully!"
fi

FullBackup(){
    # 星期日 进行全量备份
    if [[ "${WEEK}" -eq "7" ]]; then

        rm -rf "${TARGET_DIR}/snapshot"

        cd ${TARGET_DIR}/${YEAR}/${MONTH}/${DAY} || exit 

        tar -g ${TARGET_DIR}/snapshot -czvf ${FILES} $(echo ${SOURCE_DIR[@]}) > /dev/null 2>&1

        [[ "${CODE}" == "0" ]] && echo -e "--------------------\nFullBackup System Files Backup Successfully!"
    
    fi
}

AddBackup(){

    # 每天根据当前日期进行增量备份

    cd "${TARGET_DIR}/${YEAR}/${MONTH}/${DAY}" || exit 

    if [[ -f "${TARGET_DIR}/${YEAR}/${MONTH}/${DAY}/${FILES}" ]]; then

        read -p "${FILES} Already Exists, overwrite confirmation y or n?:" SURE

        if [[ ${SURE} =~ ^[Nn] ]]; then

            sellp 1; exit 0
        fi

        if [[ ${WEEK} -ne "7" ]]; then

            cd ${TARGET_DIR}/${YEAR}/${MONTH}/${DAY} || exit
            
            tar -g ${TARGET_DIR}/snapshot -czvf $$_${FILES} $(echo ${SOURCE_DIR[@]}) > /dev/null 2>&1

            [[ "${CODE}" == "0" ]] && echo -e "-------------------------\nAddBackup System Files Backup Successfully!"
        
        fi
    
    else

        if [[ ${WEEK} -ne "7" ]]; then

            cd ${TARGET_DIR}/${YEAR}/${MONTH}/${DAY} || exit
            
            tar -g ${TARGET_DIR}/snapshot -czvf $$_${FILES} $(echo ${SOURCE_DIR[@]}) > /dev/null 2>&1

            [[ "${CODE}" == "0" ]] && echo -e "-------------------------\nAddBackup System Files Backup Successfully!"
        
        fi
    fi
}

FullBackup; AddBackup
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值