整体结构
首先在个人的根目录下创建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中无法被备份。