数据备份与恢复

在生产环境中,备份是防止数据丢失的基础防线。误删文件、配置改错、程序更新失败,都可能导致数据不可用。只要备份做得及时、恢复路径清晰,就有机会找回正常数据。

本节目标:

  • 学会使用 tar 把重要目录打包并压缩成归档文件。生产环境中,文件名通常加入日期或版本号,方便追溯。
  • 学会在恢复数据时,先解压到临时目录比对,避免直接覆盖正式数据。
  • 学会使用 rsync 进行高效的增量同步。
  • 学会检查磁盘空间,避免备份把磁盘写满。

开始实验:备份与恢复

从归档中恢复文件

Lab

打开新的 OPSBOX 终端 OPSBOX 终端(启动 Lab 后显示),跟随本章完成备份、恢复与磁盘空间检查练习。 随后将 /srv/archive/bulletin-release.tar.gz 解压到自己创建的恢复目录,找到阅览室迁移通知,提交其中完整的 COIN 发布编号。 恢复过程中要保留原公告目录 /srv/bulletin,不要直接覆盖。

加载会话状态…

提交 coin

题解 Hint

使用 tar 打包与压缩

tar 是 Linux 中常用的打包工具。它可以将多个文件或目录合并成一个归档文件,并可通过 gzip 压缩,减少占用空间。

下面创建一个工作目录,把文件打包后再查看归档内容:

crow@opsbox:~$ mkdir -p ~/work/source ~/work/backups ~/work/restore
crow@opsbox:~$ cd ~/work
crow@opsbox:~/work$ printf '配送时间:星期一\n' > source/schedule.txt
crow@opsbox:~/work$ tar -czf backups/source.tar.gz -C /home/crow/work source
crow@opsbox:~/work$ tar -tzf backups/source.tar.gz
source/
source/schedule.txt

常用参数说明:

  • -c(Create):创建新的归档文件。
  • -z(gzip):使用 gzip 压缩。
  • -f(File):指定归档文件名。
  • -C /path:切换到指定目录后再打包。这样可以保留相对路径,例如 source/schedule.txt;解压时不容易意外覆盖其他目录。
  • -t(List):在解压前查看归档里的文件列表。

建议在解压前先使用 tar -tzf 查看内容,确认路径无误后再执行解压。

恢复文件与版本对比

当正式文件被误改后,可以从旧的归档文件中恢复原始版本。

crow@opsbox:~/work$ printf '配送时间:星期二\n' > source/schedule.txt
crow@opsbox:~/work$ tar -xzf backups/source.tar.gz -C restore
crow@opsbox:~/work$ cat source/schedule.txt
配送时间:星期二
crow@opsbox:~/work$ cat restore/source/schedule.txt
配送时间:星期一

这里新增了两个常用参数:

  • -x(Extract):解压归档文件。
  • -C restore:将内容解压到指定的 restore 目录,而不是直接覆盖 source 目录。

归档保留星期一的内容,原文件修改后仍可恢复旧版本

在恢复生产数据时,最好先解压到临时目录,再与当前正式文件逐项比对。确认文件内容、权限和时间戳都正确后,再进行替换。这样可以避免误恢复或覆盖正常数据。

使用 rsync 同步目录

当需要在两个目录之间同步文件时,rsync 是更高效的工具。它会比较文件大小和修改时间,只传输发生变化的内容,适合增量备份。

crow@opsbox:~/work$ mkdir mirror
crow@opsbox:~/work$ rsync -av source/ mirror/
crow@opsbox:~/work$ cat mirror/schedule.txt
配送时间:星期二

常用参数说明:

  • -a(Archive):归档模式,保留文件权限、时间戳和软链接。
  • -v(Verbose):显示同步过程中的详细信息。

特别注意路径末尾的斜杠:

  • source/ 表示同步 source 目录里的内容。
  • source 会在目标目录下再创建一层 source,最终变成 mirror/source/。

如果需要同步删除目标目录中多余的旧文件,可以使用 --delete。在生产环境中,建议先加上 --dry-run 预览效果,确认无误后再正式执行。

检查磁盘空间占用

备份文件会占用磁盘空间。如果磁盘被写满,数据库、日志或系统服务可能因为无法写入数据而报错。

crow@opsbox:~/work$ du -sh /home/crow/work           # 查看该目录总共占用多少空间:-s 汇总,-h 使用易读单位
crow@opsbox:~/work$ du -h --max-depth=1 /home/crow/work # 查看一级子目录占用情况,定位大目录
crow@opsbox:~/work$ df -h /home/crow/work           # 查看该目录所在分区的剩余空间
crow@opsbox:~/work$ findmnt -T /home/crow/work       # 查看该路径实际挂载在哪个磁盘分区上

不同文件系统通过挂载点接入同一棵目录树

常用命令说明:

  • du(Disk Usage):统计文件或目录占用多少空间。
  • df(Disk Free):查看磁盘分区还剩多少可用空间。
  • findmnt:确认路径所属的挂载点,帮助判断是否写入到了空间有限的分区。

日常排查时,可以先用 du 找到占用大的目录,再用 df 查看磁盘剩余空间,最后用 findmnt 确认挂载位置。这样能更快判断备份是否安全,以及是否需要清理旧文件。