Linux tar 备份与恢复教程:常用命令及注意事项
前言
管理 Linux 云服务器时,经常需要备份网站目录、保存应用配置,或者在迁移服务器前打包一些重要文件。
如果只是简单复制目录,可以使用 cp 或 rsync;但如果希望把多个文件整理成一个压缩包,方便下载和长期保存,tar 往往更加合适。
下面以 Ubuntu、Debian 等常见 Linux 系统为例,介绍 tar 的基本使用方法,以及备份恢复时需要注意的问题。
一、tar 是什么?
tar 是 Linux 中常见的归档工具,可以把多个文件或目录打包为一个文件,同时保留目录结构和部分文件属性。
需要注意,tar 的打包和压缩是两个不同的概念。
例如:
.tar:普通归档文件,不一定经过压缩。.tar.gz:使用 gzip 压缩的 tar 归档。.tar.xz:使用 xz 压缩的 tar 归档。
日常备份小型网站、配置文件时,使用 .tar.gz 通常就足够了。
二、创建一个压缩备份
假设需要备份服务器上的 /opt/app 目录。
首先创建保存备份的目录:
mkdir -p ~/backups
然后执行:
tar -czvf ~/backups/app.tar.gz -C /opt app
这里几个参数的含义分别是:
-c:创建归档文件。-z:使用 gzip 压缩。-v:显示处理的文件。-f:指定归档文件名。-C:先切换到指定目录,再处理文件。
执行完成后,会在 ~/backups/ 下生成 app.tar.gz。
这里特意使用了 -C /opt app,而不是直接填写 /opt/app。这样压缩包内保存的是 app/ 开头的相对路径,恢复时更容易控制解压位置。
需要注意,使用固定文件名重复执行备份命令,可能覆盖之前的备份文件。如果需要长期保存多个版本,建议在文件名中加入日期。
三、查看压缩包里的内容
打包完成后,不一定要先解压才能查看有哪些文件。
可以执行:
tar -tzf ~/backups/app.tar.gz
这里的 -t 表示列出归档内容。
对于前面的示例,通常会看到类似结构:
app/
app/config.yaml
app/start.sh
app/data/
这样可以确认压缩包中是否包含了预期的目录和文件。
如果还需要检查 gzip 压缩数据流是否完整,可以执行:
gzip -t ~/backups/app.tar.gz
不过需要注意,检查压缩包格式正常,并不等于已经完成备份有效性验证。对于重要数据,最好再进行一次实际恢复测试。
四、把备份恢复到指定目录
假设希望把压缩包恢复到当前用户的测试目录。
先创建目录:
mkdir -p ~/restore-test
然后执行:
tar -xzvf ~/backups/app.tar.gz -C ~/restore-test
其中:
-x:解包并提取文件。-z:处理 gzip 压缩格式。-v:显示解压过程。-f:指定需要读取的归档文件。
恢复完成后,原来的 app 目录会出现在:
~/restore-test/app/
可以执行:
ls -lah ~/restore-test/app/
检查文件是否恢复成功。
对于重要备份,建议先恢复到一个独立目录检查,而不是直接覆盖正在使用的业务目录。
五、备份时排除不需要的文件
有些应用目录中会包含缓存、临时文件或者大量不需要保存的日志。
如果全部打包,不仅会增加压缩包大小,也会浪费备份时间。
可以通过 --exclude 排除指定文件或目录。
例如:
tar -czvf ~/backups/app.tar.gz \
--exclude='app/cache' \
--exclude='*.log' \
-C /opt app
这条命令会尝试排除 app/cache 目录,以及匹配 *.log 的文件。
这里需要注意,排除规则匹配的是归档中的文件路径,因此要结合实际打包路径编写。
如果排除规则不正确,可能导致需要备份的重要文件没有进入压缩包。
建议打包后使用 tar -tzf 检查内容,确认没有遗漏。
六、tar 和 rsync 应该怎么选?
这两个工具都可以用来处理文件备份,但适用场景有所不同。
| 对比 | tar | rsync |
|---|---|---|
| 主要用途 | 文件打包、归档 | 文件与目录同步 |
| 输出结果 | 通常生成单个归档文件 | 通常保留原目录结构 |
| 压缩支持 | 可以结合 gzip、xz 等 | 支持传输压缩 |
| 增量能力 | 需要额外配置增量归档机制 | 默认可跳过未变化文件 |
| 适合场景 | 定期归档、下载备份 | 多服务器同步、重复传输 |
如果只是想把网站目录保存为一个压缩包,tar 比较方便。
如果需要每天把服务器上的文件同步到另一台机器,rsync 往往更适合。
两者也可以配合使用,例如先用 tar 生成归档,再把归档文件传输到其他服务器保存。
七、备份时容易忽略的几个问题
1. 压缩包不等于可靠备份
如果备份文件仍然保存在原服务器的同一块磁盘上,那么磁盘损坏后,原始数据和备份文件可能同时丢失。
对于重要数据,最好再保存一份到其他服务器、独立存储设备或云存储中。
2. 不要直接打包正在运行的数据库目录
如果数据库正在写入数据,tar 在不同时间读取各个文件,得到的内容可能不一致。
因此,数据库备份应优先使用数据库本身提供的备份工具,或者经过正确配置的一致性快照方案。
普通文件打包并不能保证数据库事务的一致性。
3. 注意文件权限
tar 可以保存常见的文件权限和时间戳等属性,但恢复时是否能够完整还原所有者、用户组以及特殊权限,取决于执行用户和使用的参数。
如果是迁移应用目录,恢复后还需要检查文件归属,确认应用运行用户能够正常访问。
4. 压缩不等于加密
.tar.gz 只是压缩归档格式,并不会自动加密文件内容。
如果备份中包含数据库密码、API Key 或其他敏感信息,不能因为生成了压缩包就认为数据已经安全。
应结合访问权限、加密存储和备份传输安全进行保护。
5. 不要随意解压来源不明的归档
从不可信来源获得的压缩包可能包含符号链接、特殊文件或其他不安全内容。
最好先检查文件列表,再在隔离目录中解压,不要直接以 root 身份覆盖系统目录。
八、一套简单的备份检查流程
对于普通应用目录,可以按照下面的顺序操作。
第一步,创建备份:
mkdir -p ~/backups
tar -czf ~/backups/app.tar.gz -C /opt app
第二步,检查归档内容:
tar -tzf ~/backups/app.tar.gz
gzip -t ~/backups/app.tar.gz
第三步,恢复到测试目录:
mkdir -p ~/restore-test
tar -xzf ~/backups/app.tar.gz -C ~/restore-test
第四步,检查恢复后的文件:
ls -lah ~/restore-test/app/
确认文件内容、目录结构和必要权限符合预期后,再考虑将归档保存到其他位置。
实际生产环境中,还应制定备份周期、历史版本保留数量和恢复验证计划。
总结
tar 是 Linux 中非常实用的文件归档工具,最常用的操作并不复杂:
tar -czf:创建 gzip 压缩归档。tar -tzf:查看压缩包内容。tar -xzf:解压并恢复文件。-C:控制打包或恢复时使用的目录。--exclude:排除不需要的文件。
日常使用时,比记住命令更重要的是确认备份路径、压缩包内容和实际恢复结果。
对于重要服务器,建议养成定期备份、异地保存和恢复测试的习惯,避免真正需要恢复数据时才发现备份不可用。
- 点赞
- 收藏
- 关注作者
评论(0)