6月3日 00:11
Linux 系统怎么备份和恢复?rsync、tar 和快照实战
Linux 备份分三个层级:文件级(rsync/tar)、分区级(dd)、快照级(LVM/Btrfs)。日常用 rsync 增量备份文件,关键系统用快照,dd 只在磁盘克隆时用。
rsync:增量备份首选
rsync 只传输变化的文件,第一次全量,之后只传差异部分:
bash# 本地备份到外部硬盘 rsync -avz --delete /home/user/ /backup/home/ # 远程备份到服务器 rsync -avz --delete /home/user/ user@server:/backup/home/
参数:-a 保留权限和时间戳,-v 显示进度,-z 压缩传输,--delete 删除目标中源端已不存在的文件(保持完全同步)。
定时备份:
bash# 每天凌晨 2 点备份 0 2 * * * rsync -avz --delete /home/user/ /backup/home/ >> /var/log/backup.log 2>&1
tar:打包归档
bash# 打包并压缩 tar czf backup_$(date +%Y%m%d).tar.gz /home/user/ # 解压恢复 tar xzf backup_20240101.tar.gz -C /
tar 适合归档到单个文件(方便传输和存储),但不支持增量。每次都全量打包,大目录慢。
dd:磁盘级克隆
bash# 整盘克隆 dd if=/dev/sda of=/dev/sdb bs=4M status=progress # 克隆到镜像文件 dd if=/dev/sda of=disk.img bs=4M status=progress
dd 逐扇区复制,包含分区表和引导扇区。用途:换硬盘时整盘克隆。缺点:必须卸载分区或用 Live USB,否则数据不一致。
LVM 快照
LVM 快照冻结文件系统某一时刻的状态,备份时不需要停服务:
bash# 创建快照 lvcreate -L 10G -s -n snap_root /dev/vg0/root # 挂载快照并备份 mount /dev/vg0/snap_root /mnt/snap rsync -avz /mnt/snap/ /backup/root/ # 备份完成后删除快照 umount /mnt/snap lvremove /dev/vg0/snap_root
快照不是备份——如果硬盘坏了快照也没了。快照的意义是:在不停服务的情况下获得一致的文件系统状态。
备份策略:3-2-1 原则
- 3 份数据副本
- 2 种不同存储介质(本地硬盘 + NAS)
- 1 份离线/远程(云存储)
最小化方案:rsync 到本地 NAS + 推到 S3。两步覆盖 3-2-1。
恢复测试
没测过的备份等于没备份。定期恢复测试:
bash# 随机抽取一个文件验证 tar tzf backup.tar.gz | head -5 rsync -avzn /backup/home/ /tmp/verify/ # dry-run 验证
每季度做一次完整恢复演练——把备份恢复到新机器,确认能正常工作。