整体结构

首先在个人的根目录下创建backup、service目录。一个用于备份,一个用于进行服务编排。

Backup

注意这个目录用于存放备份的文件,创建后不管即可。

Service

在这个文件夹下创建两个文件夹,app与scripts:

├── app
└── scripts
    └── backup.sh

其中App用于服务编排、scripts用于存放常用脚本;备份的目录为service/app

相关脚本

备份脚本

只备份service/app,剔除日志等无关重要的信息:

#!/bin/bash
 
cd /home/evalexp
rm -f /home/evalexp/backup/HongKong-backup.tar.gz
tar --exclude 'tailscaled.log*.txt' --exclude 'rustdesk/data' --exclude 'v2fly/log' --exclude 'subconverter/base/cache'  -cvf - ./service | gzip -n - | openssl enc -aes-256-cbc -pass pass:$AES_PASSWORD -e -iter 1 -nosalt -out /home/evalexp/backup/HongKong-backup.tar.gz
 
if [ -f /home/evalexp/backup/current.tar.gz ]
then
    CUR_HASH=$(md5sum /home/evalexp/backup/current.tar.gz | grep -E '[a-z0-9]{32}' -o)
    LATEST_HASH=$(md5sum /home/evalexp/backup/HongKong-backup.tar.gz | grep -E '[a-z0-9]{32}' -o)
    if [ "$CUR_HASH" == "$LATEST_HASH" ]; then
        rm /home/evalexp/backup/HongKong-backup.tar.gz
        LC_TIME=POSIX echo "last_backup_HK_time=`date`, no changes, drop backup" >> /home/evalexp/backup/log.txt
    else
        mv /home/evalexp/backup/HongKong-backup.tar.gz /home/evalexp/backup/current.tar.gz
        #su evalexp -c "cp /home/evalexp/backup/current.tar.gz \"/home/evalexp/oss/backup/HongKong-backup-`date`.tar.gz\""
	cp /home/evalexp/backup/current.tar.gz "/lhcos-data/HongKong-backup-`date`.tar.gz" 
        LC_TIME=POSIX echo "last_backup_HK_time=`date`, detect changes, out backup" >> /home/evalexp/backup/log.txt
    fi
else
    mv /home/evalexp/backup/HongKong-backup.tar.gz /home/evalexp/backup/current.tar.gz
    #su evalexp -c "cp /home/evalexp/backup/current.tar.gz \"/home/evalexp/oss/backup/HongKong-backup-`date`.tar.gz\""
    cp /home/evalexp/backup/current.tar.gz "/lhcos-data/HongKong-backup-`date`.tar.gz"
    LC_TIME=POSIX echo "last_backup_HK_time=`date`, first time, out backup" >> /home/evalexp/backup/log.txt
fi
 

注意这里需要替换AES的密码

通过这个备份,我们可以快速地对比历史备份,如果发生变更则将当前配置全部进行备份,注意数据存放在ZFS中无法被备份。