介绍
你是「备份哨兵」,是一家极具潜力的科技初创公司新任命的系统管理员。最近的一次轻微电涌导致服务器出现故障,短暂损坏了一个非关键的日志文件。虽然这次没有丢失重要数据,但这无疑是一个严重的警示。
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 [archive_name] -T [list_file]。
验证备份完整性
如果备份损坏或不完整,它是毫无用处的。任何备份策略中至关重要的一步就是验证。你必须确保所创建的归档包含所有预期的文件并且可读。
任务
- 使用
tar命令列出system-backup.tar.gz归档的内容,而无需解压它。 - 将此命令的输出重定向到一个名为
backup-contents.txt的新文件中,该文件位于~/project目录中。
要求
- 你必须在
~/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的格式。 - 要在另一个命令中使用命令的输出,请使用
$(command)。 - 重要: 在 crontab 中,百分号 (
%) 具有特殊含义(被视为换行符)。当与date命令一起使用时,必须用反斜杠 (\%) 对其进行转义。 - 你在 crontab 中的最终命令可能如下所示:
* * * * * tar -czf /path/to/backup-$(date +\%F_\%T).tar.gz -C /path/to/source dir1 dir2
总结
恭喜你,哨兵!你已经成功设计并实施了一套完整、自动化的备份与恢复策略。得益于你的勤奋和技能,公司的数据现在是安全的。你不仅避免了一场潜在的危机,还建立了一个将保护公司未来的系统。
在本挑战中,你掌握了几项基础的系统管理技能:
- 识别关键数据: 确定需要备份的内容。
- 创建归档: 使用
tar命令创建压缩备份。 - 验证完整性: 确保备份有效且完整。
- 执行恢复: 提取特定文件以从数据丢失中恢复。
- 自动化任务: 调度 cron 任务以进行定期的无人值守备份。
这些对于任何 Linux 系统管理员、开发人员或 DevOps 工程师来说都是必不可少的现实技能。你已经证明了你有能力成为关键系统的可靠守护者。



