chore: 针对备份及还原处理
This commit is contained in:
82
scripts/backup_restore/verify_backup.sh
Normal file
82
scripts/backup_restore/verify_backup.sh
Normal file
@@ -0,0 +1,82 @@
|
||||
#!/bin/bash
|
||||
# verify_backup.sh - 验证备份完整性
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
CONFIG_FILE="${SCRIPT_DIR}/backup_config.json"
|
||||
|
||||
log() { echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1"; }
|
||||
|
||||
verify_backup_integrity() {
|
||||
local backup_file="$1"
|
||||
|
||||
log "验证备份完整性: $backup_file"
|
||||
|
||||
# 检查文件是否存在
|
||||
if [[ ! -f "$backup_file" ]]; then
|
||||
echo "❌ 备份文件不存在"
|
||||
return 1
|
||||
fi
|
||||
|
||||
# 检查文件大小
|
||||
local file_size=$(stat -c%s "$backup_file")
|
||||
if [[ $file_size -eq 0 ]]; then
|
||||
echo "❌ 备份文件为空"
|
||||
return 1
|
||||
fi
|
||||
|
||||
echo "✅ 文件大小: $(numfmt --to=iec-i --suffix=B $file_size)"
|
||||
|
||||
# 检查tar归档完整性
|
||||
if tar -tzf "$backup_file" > /dev/null 2>&1; then
|
||||
echo "✅ 归档完整性验证通过"
|
||||
|
||||
# 统计文件数量
|
||||
local file_count=$(tar -tzf "$backup_file" | wc -l)
|
||||
echo "✅ 包含文件数: $file_count"
|
||||
|
||||
# 检查长路径文件
|
||||
local long_path_files=$(tar -tzf "$backup_file" | grep -c '/.\{100,\}')
|
||||
if [[ $long_path_files -gt 0 ]]; then
|
||||
echo "📁 长路径文件数: $long_path_files"
|
||||
fi
|
||||
|
||||
return 0
|
||||
else
|
||||
echo "❌ 归档损坏或格式错误"
|
||||
return 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
local backup_file="${1:-}"
|
||||
|
||||
if [[ -z "$backup_file" ]]; then
|
||||
# 使用最新备份
|
||||
local backup_dir=$(jq -r '.storage.local_path // "/backups"' "$CONFIG_FILE")
|
||||
backup_file=$(find "$backup_dir" -name "backup_*.tar.gz" -o -name "backup_*.tar.gz.gpg" | sort | tail -1)
|
||||
|
||||
if [[ -z "$backup_file" ]]; then
|
||||
echo "❌ 未找到备份文件"
|
||||
exit 1
|
||||
fi
|
||||
fi
|
||||
|
||||
echo "🔍 备份验证报告"
|
||||
echo "========================================"
|
||||
echo "备份文件: $backup_file"
|
||||
echo "验证时间: $(date)"
|
||||
echo "----------------------------------------"
|
||||
|
||||
if verify_backup_integrity "$backup_file"; then
|
||||
echo "✅ 备份验证通过"
|
||||
exit 0
|
||||
else
|
||||
echo "❌ 备份验证失败"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
main "$@"
|
||||
Reference in New Issue
Block a user