介绍
你是「备份哨兵」,一家前途无量的科技初创公司新任命的系统管理员。最近一次轻微的电压波动导致了服务器故障,瞬间损坏了一个非关键的日志文件。虽然这次没有丢失重要数据,但它敲响了沉重的警钟。
首席技术官(CTO)亲自交给你一项关键任务:为公司的主应用服务器实施一套稳健的备份与恢复策略,而且必须在今天完成。用户数据的完整性、应用程序配置以及至关重要的日志现在都掌握在你的手中。
这是你大显身手的时刻。通过成功创建、验证并自动化备份流程,你不仅能守护公司最宝贵的资产——数据,还能证明自己是其数字基础设施不可或缺的守护者。系统正在运行,时间一分一秒过去。让我们开始工作吧。
- 可以暂时跳过此挑战,继续学习 Linux 学习路径 中后续的引导实验。
- 与 Labby 讨论或查看解决方案。
识别备份的关键数据
在创建备份之前,你的首要任务是识别哪些数据是关键的。进行全系统备份通常是不切实际的。对于我们的应用服务器,最重要的资产存储在 data、config 和 logs 目录中。
为了使备份过程整洁且易于管理,我们将创建一个文件,列出所有想要备份的目录。这个列表将作为我们备份脚本的清单。
任务
- 在
~/project目录下创建一个名为backup-list.txt的文件。 - 该文件应包含这三个关键目录的相对路径,每个路径占一行。
要求
- 文件名必须精确为
backup-list.txt。 - 文件必须位于
~/project目录中。 - 文件必须包含以下三个条目,每个条目独占一行:
dataconfiglogs
示例
创建 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。应用程序现在已停机。作为备份哨兵,你需要从备份中恢复这个关键文件并化解危机。
任务
- 首先,通过删除
config/app.conf文件来模拟事故。 - 然后,使用
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 工程师来说,这些都是必不可少的实战技能。你已经证明了自己具备成为关键系统可靠守护者的素质。



