4、数据备份策略:全量备份 vs 增量备份、备份工具选择(dd、rsync、Clonezilla)、备份验证
数据备份,说白了就是给自己留条后路。我从SATA迁移到NVMe,最怕的不是速度慢,而是数据丢了。嗯,这里我要认真讲清楚。
4.1 全量备份 vs 增量备份:你该怎么选?
先说说这两个概念。全量备份,就是把整个盘从头到尾复制一遍。增量备份,只复制从上次备份以来变化的数据。
我个人习惯这样用:
- 首次迁移,必须全量备份。别偷懒,这是你的救命稻草。
- 日常运维,增量备份更高效。尤其是数据量大的时候,全量备份太费时间。
举个例子。我有个项目,客户有2TB的数据。全量备份花了4小时,增量备份只用了20分钟。你想想看,如果每天做全量,谁受得了?
核心原则:全量保底,增量提速。两者结合,才是王道。
4.2 备份工具选择:dd、rsync、Clonezilla
这三个工具,我每个都踩过坑。今天一次性讲清楚。
4.2.1 dd:最原始,也最可靠
dd是Linux下的“磁盘复印机”。它不管文件系统,直接按块复制。我在项目中遇到过一块坏道盘,用dd配合conv=noerror参数,硬是把能读的数据全救回来了。
# 全量备份整个磁盘到镜像文件
dd if=/dev/sda of=/backup/sda.img bs=4M status=progress
# 从镜像恢复到新盘
dd if=/backup/sda.img of=/dev/nvme0n1 bs=4M status=progress
注意:dd复制的是整个块设备,包括空扇区。如果源盘是1TB,备份文件也是1TB。我曾经有个同事没注意这点,备份了一个几乎空盘,结果占满了存储空间。
4.2.2 rsync:增量备份的利器
rsync是我最常用的工具。它只传输变化的部分,效率极高。说白了,它就是为增量备份而生的。
# 全量同步
rsync -avh --progress /source/ /destination/
# 增量同步(只传输变化文件)
rsync -avh --progress --delete /source/ /destination/
我个人习惯在迁移前先用rsync做一次全量同步,然后等业务停掉后,再做一次增量同步。这样停机时间可以压缩到几分钟。
小技巧:rsync配合--link-dest参数,可以实现“增量备份,全量恢复”的效果。每次备份只存变化,但恢复时能看到完整数据。
4.2.3 Clonezilla:图形化的大杀器
Clonezilla适合不熟悉命令行的朋友。它支持全盘克隆、分区克隆,还能压缩镜像。我记得有一次帮客户迁移服务器,用Clonezilla的“专家模式”直接对拷,连分区表都不用重新配置。
# Clonezilla命令行模式(实际使用是交互式菜单)
# 备份到镜像
ocs-sr -q2 -j2 -z1p -i 2000 -sfsck -p true savedisk sata_backup sda
# 恢复到新盘
ocs-sr -q2 -j2 -z1p -i 2000 -sfsck -p true restoredisk sata_backup nvme0n1
我的建议:如果你只做一次迁移,用Clonezilla最省心。如果你需要长期备份,rsync更灵活。
4.3 备份验证:别让备份变成“备了个寂寞”
备份不做验证,等于没备份。我曾经遇到过备份文件损坏,恢复时才发现。嗯,那滋味真不好受。
验证方法有三种:
- 校验和验证:备份完成后,计算源和目标的MD5或SHA256值。
- 挂载验证:把备份镜像挂载到临时目录,检查文件完整性。
- 恢复演练:定期在测试环境做一次完整恢复。
# 校验和验证示例
# 生成源盘校验文件
find /source -type f -exec md5sum {} \; > /backup/source.md5
# 验证备份
cd /destination
md5sum -c /backup/source.md5
避坑指南:我曾经在验证时只检查了文件数量,没检查内容。结果恢复后发现配置文件全是乱码。从那以后,我坚持做内容级别的校验。
4.4 实战策略:我的备份三步法
最后,分享一个我用了多年的备份策略:
| 步骤 | 操作 | 工具 | 时间 |
|---|---|---|---|
| 第一步 | 全量备份源盘 | dd 或 Clonezilla | 迁移前1天 |
| 第二步 | 增量备份变化数据 | rsync | 迁移前1小时 |
| 第三步 | 验证备份完整性 | md5sum + 挂载检查 | 每次备份后 |
你想想看,有了这三步,就算迁移过程中出了岔子,也能快速回滚。我做了这么多年迁移,从没因为数据丢失翻过车。说白了,备份做得好,晚上睡得香。
最后提醒:备份文件不要放在源盘上。我见过有人把备份和源盘放在同一个RAID里,结果RAID挂了,备份也跟着没了。嗯,这种低级错误,咱们不犯。