完整备份是数据备份的基础,差异备份必须基于某个完整备份点,执行差异备份前,必须先创建完整的备份文件。
在数据管理中,差异备份是一种高效且常用的策略,它只备份自上次完整备份以来发生更改的文件,相比于每次都备份所有数据的完整备份,差异备份速度更快,占用空间更少;而相比只备份上次备份以来更改的增量备份,差异备份的恢复通常更简单(只需要完整备份 + 最新的差异备份),本文将详细讲解如何在Linux和Windows环境下,使用命令行执行差异备份。
2. 差异备份 (Differential Backup): 每次差异备份都会捕获自上次完整备份以来所有发生变化的文件,无论你做了多少次差异备份,每次差异备份都是相对于同一个完整备份点。
3. 恢复: 恢复数据时,你只需要:
- 最新的完整备份
- 最新的差异备份(它包含了自完整备份以来所有的更改)
Linux 环境 (使用 tar
命令)
tar
(Tape ARchiver) 是 Linux 下强大的归档工具,结合 find
命令可以有效地实现差异备份。
-
创建完整备份 (基础):
tar -cvpzf /path/to/backups/full_backup_$(date +%Y%m%d).tar.gz --listed-incremental=/path/to/backups/backup.snar /path/to/source
-c
: 创建新归档。-v
: 详细模式(显示过程,可选)。-p
: 保留文件权限。-z
: 使用 gzip 压缩(可替换为-j
使用 bzip2 或--lzma
)。-f
: 指定归档文件名 (full_backup_20251027.tar.gz
示例,使用日期)。--listed-incremental=/path/to/backups/backup.snar
: 关键! 指定增量/差异备份的“状态文件”(.snar
),第一次运行(创建完整备份)时,此文件会被创建或覆盖,它记录了备份时文件系统的状态(时间戳、大小等)。/path/to/source
: 要备份的源目录。
-
创建差异备份:
tar -cvpzf /path/to/backups/diff_backup_$(date +%Y%m%d).tar.gz --listed-incremental=/path/to/backups/backup.snar /path/to/source
- 命令几乎与完整备份相同。
- 关键区别在于使用的
.snar
文件是同一个 (backup.snar
)。 tar
会读取backup.snar
文件(它记录的是上次完整备份时的状态),然后找出所有自上次完整备份以来修改过或新增的文件,将它们打包到diff_backup_...tar.gz
中。- 重要:
.snar
文件不会被这次差异备份更新,它始终保持记录上次完整备份的状态,直到你下一次做完整备份并覆盖它,这就是实现“差异”而非“增量”的关键。
-
后续操作:
- 你可以根据需要多次运行步骤2来创建新的差异备份,每次都是基于同一个完整备份点。
- 当你决定创建一个新的完整备份时,再次运行步骤1,这会:
- 创建一个新的完整备份 (
full_backup_newdate.tar.gz
)。 - 覆盖
backup.snar
文件,记录新的完整备份时间点的状态。 - 之后新的差异备份将基于这个新的完整备份点。
- 创建一个新的完整备份 (
Windows 环境 (使用 robocopy
命令)
robocopy
(Robust File Copy) 是 Windows 内置的强大文件复制工具,非常适合文件级备份。
-
创建完整备份 (基础):
robocopy "C:\Source\Directory" "D:\Backups\Full_Backup" *.* /MIR /Z /R:3 /W:5 /LOG:"D:\Backups\full_backup_log_%date:~-4,4%%date:~-7,2%%date:~-10,2%.txt"
"C:\Source\Directory"
: 要备份的源目录。"D:\Backups\Full_Backup"
: 完整备份的目标目录。/MIR
: 镜像模式,使目标目录成为源目录的精确镜像(复制所有文件和子目录,删除目标中源不存在的文件)。第一次做完整备份时使用/MIR
。/Z
: 在可重启模式下复制文件(网络中断后可恢复)。/R:3
: 失败重试次数 (3次)。/W:5
: 重试等待时间 (5秒)。/LOG:...
: 将操作日志输出到文件(文件名包含日期YYYYMMDD
)。
-
创建差异备份:
robocopy "C:\Source\Directory" "D:\Backups\Diff_Backup_%date:~-4,4%%date:~-7,2%%date:~-10,2%" *.* /S /XO /XN /XX /Z /R:3 /W:5 /LOG:"D:\Backups\diff_backup_log_%date:~-4,4%%date:~-7,2%%date:~-10,2%.txt"
"C:\Source\Directory"
: 源目录(不变)。"D:\Backups\Diff_Backup_YYYYMMDD"
: 差异备份的目标目录(每次使用新目录,包含日期)。/S
: 复制子目录(非空目录也复制)。- 关键参数 (实现差异逻辑):
/XO
: 排除较旧的文件(只复制源比目标新的文件)。但第一次差异备份时目标目录是空的,这个参数不影响。/XN
: 排除较新的文件(确保只复制源比目标旧的文件?这里主要用/XO
)。在差异备份中,/XO
是核心。/XX
: 排除额外的文件(不删除目标目录中源没有的文件)。非常重要! 差异备份只添加/更新文件,绝不删除目标目录中的任何内容(即使源文件已删除),这符合差异备份定义(记录自全备后的所有更改,包括删除,但删除操作本身不产生文件,所以备份里只有新增和修改的文件)。
/Z, /R:3, /W:5, /LOG:...
: 同完整备份。- 说明: 这个命令将源目录中所有自上次完整备份以来修改过或新增的文件复制到新的
Diff_Backup_YYYYMMDD
目录中,它不会复制未更改的文件,也不会删除目标目录中可能已从源中删除的文件(因为/XX
),每次差异备份都放在独立的带日期目录中。
-
后续操作:
- 每次需要做差异备份时,运行步骤2,确保目标目录路径中的日期更新。
- 当你决定创建一个新的完整备份时:
- 删除或归档旧的
D:\Backups\Full_Backup
目录(或重命名)。 - 再次运行步骤1,创建一个全新的完整镜像到
D:\Backups\Full_Backup
。 - 之后新的差异备份将基于这个新的完整备份点。
- 删除或归档旧的
关键注意事项与最佳实践 (适用于两种环境):
- 完整备份是基石: 没有完整备份,差异备份毫无意义且无法恢复,务必先做完整备份。
- 清晰命名与组织: 使用一致的、包含日期(
YYYYMMDD
格式最佳)的命名方案(如full_20251027
,diff_20251028
,diff_20251029
)来区分备份集,在 Windows 的robocopy
方案中,差异备份使用独立目录。 - 存储位置: 将完整备份和差异备份存储在不同的物理设备(如外部硬盘、网络存储NAS)上,以防范单点故障(如原硬盘损坏)。绝对不要将备份放在源数据所在的同一块物理硬盘上。
- 日志记录: 如示例所示,务必记录日志 (
/LOG
for robocopy, 重定向输出或-v
for tar),日志是验证备份是否成功、排查问题的关键依据,定期检查日志。 - 测试恢复: 定期测试恢复流程! 这是确保备份有效性的唯一可靠方法,尝试从你的完整备份和最新的差异备份中恢复一些文件或整个目录到另一个位置,不要等到灾难发生时才第一次尝试恢复。
- 保留策略: 制定并执行备份保留策略,保留最近3个完整备份及其对应的所有差异备份,旧备份需要定期清理以释放空间。
- 空间监控: 差异备份的大小会随着时间推移而增长(因为它包含自全备以来的所有更改),监控备份目标位置的磁盘空间使用情况,确保有足够空间容纳下一次备份。
- 安全: 如果备份包含敏感数据,考虑对备份文件进行加密(
tar
可使用gpg
加密,Windows 可使用 BitLocker 或7-zip
加密压缩)。 - 自动化 (进阶): 使用任务计划程序(Windows 任务计划程序 / Linux cron)定期自动执行备份脚本,确保脚本包含错误处理和通知机制(如失败时发送邮件)。
通过命令行进行差异备份提供了强大、灵活且可脚本化的数据保护方案,在 Linux 中,tar
配合 --listed-incremental
和同一个 .snar
文件是实现差异备份的核心,在 Windows 中,robocopy
利用 /XO
和 /XX
参数,并结合每次差异备份使用新的目标目录,是实现文件级差异备份的有效方法,无论使用哪种工具,理解差异备份的原理、严格遵守操作步骤(尤其是先做完整备份)、实施健全的命名、日志、存储分离和定期恢复测试,是确保你的数据安全可靠的关键,命令行虽然需要一定的学习成本,但其精确性和自动化潜力使其成为专业数据管理的利器。
引用说明:
- Linux
tar
命令手册页 (man tar
) 是权威参考,特别是关于--listed-incremental
选项的说明。 - Microsoft 官方文档关于
robocopy
命令的详细参数说明: https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/robocopy (/XO
,/XX
参数的定义)。 - 数据备份基础概念(完整备份、差异备份、增量备份)参考了广泛认可的数据管理最佳实践和行业标准(如 NIST SP 800-34 等)。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/6232.html