DAY 09:备份哨兵

LinuxBeginner
立即练习

介绍

你是「备份哨兵」,一家前途无量的科技初创公司新任命的系统管理员。最近一次轻微的电压波动导致了服务器故障,瞬间损坏了一个非关键的日志文件。虽然这次没有丢失重要数据,但它敲响了沉重的警钟。

首席技术官(CTO)亲自交给你一项关键任务:为公司的主应用服务器实施一套稳健的备份与恢复策略,而且必须在今天完成。用户数据的完整性、应用程序配置以及至关重要的日志现在都掌握在你的手中。

这是你大显身手的时刻。通过成功创建、验证并自动化备份流程,你不仅能守护公司最宝贵的资产——数据,还能证明自己是其数字基础设施不可或缺的守护者。系统正在运行,时间一分一秒过去。让我们开始工作吧。

重要提示
接下来的挑战内容可能会超出 Linux 快速入门 课程的范围。
如果你在挑战过程中遇到困难:
  1. 可以暂时跳过此挑战,继续学习 Linux 学习路径 中后续的引导实验。
  2. 与 Labby 讨论或查看解决方案。

识别备份的关键数据

在创建备份之前,你的首要任务是识别哪些数据是关键的。进行全系统备份通常是不切实际的。对于我们的应用服务器,最重要的资产存储在 dataconfiglogs 目录中。

为了使备份过程整洁且易于管理,我们将创建一个文件,列出所有想要备份的目录。这个列表将作为我们备份脚本的清单。

任务

  • ~/project 目录下创建一个名为 backup-list.txt 的文件。
  • 该文件应包含这三个关键目录的相对路径,每个路径占一行。

要求

  • 文件名必须精确为 backup-list.txt
  • 文件必须位于 ~/project 目录中。
  • 文件必须包含以下三个条目,每个条目独占一行:
    • data
    • config
    • logs

示例

创建 backup-list.txt 文件后,你的项目目录应包含该新清单文件以及现有的目录:

~/project/
├── backup-list.txt
├── backups/
├── config/
├── data/
└── logs/

当你运行 cat backup-list.txt 时,你应该能看到列出的三个关键目录:

data
config
logs

提示

  • 你可以使用像 nano 这样的文本编辑器来创建和编辑文件。
  • 或者,你可以使用带有输出重定向(>)的 echo 命令来创建文件,并使用 >> 来追加内容。

创建全系统备份归档

关键目录列表准备就绪后,就可以创建备份归档了。Linux 中完成此项工作的标准工具是 tar(磁带归档)。它可以将多个文件和目录打包成一个文件。我们还将使用 gzip 对归档文件进行压缩以节省空间。

任务

  • 使用 tar 命令创建一个压缩的备份归档文件。
  • 归档文件应命名为 system-backup.tar.gz
  • 归档文件必须放置在 ~/project/backups/ 目录中。
  • 归档的内容应由你在上一步中创建的 backup-list.txt 文件决定。

要求

  • 最终的归档文件必须位于 ~/project/backups/system-backup.tar.gz
  • 你必须使用 tar 命令。
  • 你必须在 tar 中使用 -T 选项,从 backup-list.txt 中读取文件/目录列表。
  • 归档文件必须使用 gzip 压缩(在 tar 中使用 z 选项)。

示例

创建备份归档后,你的 backups 目录应包含新的压缩归档文件:

~/project/backups/
└── system-backup.tar.gz

当你运行 ls -lh ~/project/backups/ 时,你应该能看到归档文件及其大小:

-rw-rw-r-- 1 labex labex 1.2K Sep 11 15:08 system-backup.tar.gz

提示

  • 使用 tar 创建压缩归档的常用选项有 c(创建)、z(使用 gzip 压缩)、v(详细模式,查看进度)和 f(指定文件名)。
  • -T 选项告诉 tar 从其后的文件中获取要归档的文件名,而不是从命令行获取。
  • 命令结构看起来类似于 tar -czvf [归档名称] -T [列表文件]

验证备份完整性

如果备份损坏或不完整,那么它就毫无用处。任何备份策略中至关重要的一步就是验证。你必须确保创建的归档文件包含所有预期的文件且可读。

任务

  • 使用 tar 命令列出 system-backup.tar.gz 归档的内容,而不进行解压。
  • 将此命令的输出重定向到 ~/project 目录下一个名为 backup-contents.txt 的新文件中。

要求

  • 你必须在 ~/project 中创建一个名为 backup-contents.txt 的文件。
  • 该文件必须包含存储在 system-backup.tar.gz 中的所有文件和目录列表。
  • 不要解压文件;仅列出它们。

示例

创建验证文件后,你的项目目录应包含新的 backup-contents.txt 文件:

~/project/
├── backup-contents.txt
├── backup-list.txt
├── backups/
├── config/
├── data/
└── logs/

当你运行 cat backup-contents.txt 时,你应该能看到归档中所有文件的详细列表:

drwxrwxr-x labex/labex       0 2025-09-11 15:08 data/
-rw-rw-r-- labex/labex      46 2025-09-11 15:08 data/transactions.csv
drwxrwxr-x labex/labex       0 2025-09-11 15:08 config/
-rw-rw-r-- labex/labex      72 2025-09-11 15:08 config/app.conf
drwxrwxr-x labex/labex       0 2025-09-11 15:08 logs/
-rw-rw-r-- labex/labex      49 2025-09-11 15:08 logs/app.log

提示

  • tar 命令有一个列出(t)归档内容的选项。
  • t 选项与 z(用于 gzip)、v(用于详细列表)和 f(用于指定文件)结合使用。
  • 使用输出重定向操作符 > 将命令的输出保存到文件中。

从备份中恢复文件

灾难降临了!一名初级开发人员在尝试清理空间时,不小心删除了主应用程序配置文件 app.conf。应用程序现在已停机。作为备份哨兵,你需要从备份中恢复这个关键文件并化解危机。

任务

  1. 首先,通过删除 config/app.conf 文件来模拟事故。
  2. 然后,使用 tar 命令从 system-backup.tar.gz 归档中恢复 config/app.conf 文件。该文件应恢复到其原始位置。

要求

  • 完成任务后,文件 ~/project/config/app.conf 必须存在。
  • 你必须仅提取单个 config/app.conf 文件,而不是整个归档。

示例

恢复 app.conf 文件后,你的 config 目录应包含恢复后的文件:

~/project/config/
├── app.conf
└── ...

当你运行 ls -l ~/project/config/app.conf 时,你应该能看到恢复的文件:

-rw-rw-r-- 1 labex labex 72 Sep 11 15:08 /home/labex/project/config/app.conf

你可以通过检查文件内容是否包含预期的配置来验证其正确性:

## 这应该显示数据库和 API 密钥设置
cat ~/project/config/app.conf

提示

  • rm 命令用于删除文件。
  • tar 命令使用 x 选项来提取文件。
  • 要提取特定文件,你可以将该文件的路径(如其在归档中显示的路径)添加到 tar -x 命令的末尾。
  • 归档内文件的完整路径是 config/app.conf

安排自动化备份任务

你化解了危机,但英雄的工作永无止境。依赖手动备份是有风险的。最后一步是实现流程自动化,以便定期创建备份,无需人工干预。为此,我们将使用 Linux 标准的任务调度器 cron

任务

  • 创建一个自动运行备份命令的 cron 任务。
  • 任务应每分钟运行一次(为了本次挑战的目的)。
  • 该命令应在 ~/project/backups/ 目录内创建一个新的压缩 tar 归档。
  • 为了防止覆盖,每个新的备份文件必须有一个包含时间戳的唯一名称(例如 backup-2023-10-27_15-30-00.tar.gz)。

要求

  • 你必须使用 crontab -e 来编辑你的 cron 任务。
  • cron 调度必须为 * * * * * 以便每分钟运行一次。
  • cron 任务中的备份命令必须对输出目录和源目录使用绝对路径(例如 /home/labex/project/backups)。
  • 备份文件名必须包含时间戳。

示例

设置好 cron 任务后,你可以通过检查 crontab 并等待自动备份出现来验证其是否正常工作。当你运行 crontab -l 时,你应该能看到你的新备份任务:

## 示例输出(你的具体命令可能会有所不同)
* * * * * tar -czf /home/labex/project/backups/backup-$(date +\%Y-\%m-\%d_\%H-\%M-\%S).tar.gz -C /home/labex/project data config logs

一两分钟后,你的 backups 目录应开始显示带有时间戳的备份文件:

~/project/backups/
├── backup-2025-09-11_15-30-00.tar.gz
├── backup-2025-09-11_15-31-00.tar.gz
├── backup-2025-09-11_15-32-00.tar.gz
└── system-backup.tar.gz

提示

  • 运行 crontab -e 打开 cron 任务编辑器。系统可能会要求你选择编辑器;nano 是一个不错的选择。
  • cron 任务的格式为:[分] [时] [日] [月] [周] [命令]* * * * * 表示每天每小时的每一分钟。
  • 你可以使用 date 命令生成时间戳。例如,date +%Y-%m-%d_%H-%M-%S 将生成类似 2023-10-27_15-30-00 的格式。
  • 要在另一个命令中使用某个命令的输出,请使用 $(命令)
  • 重要提示: 在 crontab 中,百分号(%)具有特殊含义(它被视为换行符)。在 date 命令中使用它时,必须用反斜杠(\%)进行转义。
  • 你在 crontab 中的最终命令可能类似于:* * * * * tar -czf /路径/到/backup-$(date +\%F_\%T).tar.gz -C /路径/到/源 目录1 目录2

总结

恭喜你,哨兵!你已成功设计并实施了一套完整的自动化备份与恢复策略。多亏了你的勤奋和技能,公司的数据现在安全了。你不仅化解了一场潜在的危机,还建立了一套能够保护公司未来的系统。

在本次挑战中,你掌握了几项核心的系统管理技能:

  • 识别关键数据: 精确定位需要备份的内容。
  • 创建归档: 使用 tar 命令创建压缩备份。
  • 验证完整性: 确保备份有效且完整。
  • 执行恢复: 提取特定文件以从数据丢失中恢复。
  • 自动化任务: 安排 cron 任务进行定期的无人值守备份。

对于任何 Linux 系统管理员、开发人员或 DevOps 工程师来说,这些都是必不可少的实战技能。你已经证明了自己具备成为关键系统可靠守护者的素质。

✨ 查看解决方案并练习✨ 查看解决方案并练习✨ 查看解决方案并练习✨ 查看解决方案并练习✨ 查看解决方案并练习