判断备份是否成功需四重验证:检查文件存在且非空、内容数量匹配、归档可读及校验通过、时间戳与日志交叉验证。

判断备份文件是否打包成功,不能只看命令有没有报错,得从结果反推过程——重点检查文件是否存在、大小是否合理、内容是否可读、校验是否通过。
检查文件是否存在且非空
tar 命令执行完,第一反应不是看 $?,而是确认输出文件真实落地且没被截断:
- 用 test -f backup.tar 确认文件存在
- 用 test -s backup.tar 确保文件大小 > 0 字节(空包等于失败)
- 若使用压缩格式(如 .tar.gz 或 .tar.bz2),加一层 file backup.tar.gz | grep -q "gzip\|bzip2" 验证格式正确,避免生成了纯文本日志误当归档
核对打包内容数量是否匹配
防止因权限/路径问题漏打关键目录。常用比对方式:
- 统计源目录有效文件数(排除 /proc /sys /dev /run 等伪文件系统):
find /data -xdev -type f | wc -l - 统计 tar 包内文件数:
tar -tf backup.tar 2>/dev/null | wc -l - 两者相差过大(比如差 10% 以上),说明有跳过或失败,需查 tar 错误日志
验证归档可读性与基础完整性
光“存在”不够,还得能打开、不损坏:
- 执行 tar -tOf backup.tar >/dev/null(不加压缩)或 tar -tzf backup.tar.gz >/dev/null(带 gzip)——静默成功才说明头信息和索引正常
- 若备份时生成了 .sha256 文件,立即运行 sha256sum -c backup.tar.sha256;失败则 exit 1 并记录告警
- 对关键业务备份,建议额外解压一个子集(如 etc/ 目录)并比对几个核心文件的 sha256,确认内容一致
结合时间戳与日志交叉验证
避免“假成功”:cron 调度脚本中途崩溃但残留旧文件:
- 用 stat -c "%y" backup.tar 检查修改时间是否在最近 1 小时内(根据备份周期调整窗口)
- 检查脚本运行日志中是否有 “backup OK”、“verified” 等明确标记行,而非仅 “tar finished”
- 日志里必须包含开始时间、结束时间、文件名、大小、校验结果,缺一不可











