摘要:备份不等于安全,没有做过恢复测试的备份等于无效备份。本文基于Ubuntu 24.04 Server真实虚拟机实操,完整演示tar全量/增量备份、rsync同步、crontab定时备份,重点拆解系统配置单文件恢复遇到的连环BUG,包含 Not found in archive、tar解压成功文件不变、重定向权限报错、误删系统配置文件、apt依赖崩坏等第一手排错现场,适合Linux运维、课程实验参考。

一、前置准备

创建业务测试目录与测试文件,模拟线上业务配置、日志、数据库文件。

1
2
3
4
5
6
# 创建业务测试目录
mkdir -p ~/project/{config,log,data}
# 生成模拟配置文件、日志文件
echo "server_port=8080" > ~/project/config/app.conf
echo "2026-08-21 service start success" > ~/project/log/service.log
dd if=/dev/zero of=~/project/data/test.db bs=1M count=10

二、tar 全量备份 + 恢复

tar是运维最常用备份工具,但路径嵌套问题是高频踩坑点。

1. 普通用户目录全量备份

1
2
# 备份整个 project 业务目录,附加日期后缀便于版本管理
tar -zcvf project_full_$(date +%Y%m%d).tar.gz ~/project/

2. 模拟误删业务目录

1
rm -rf ~/project

3. 从备份包恢复数据(核心实操)

1
2
3
4
5
# ❌错误写法(原教程坑:会解压到 ~/home/ubuntu/project,目录嵌套,找不到业务目录)
tar -zxvf project_full_*.tar.gz -C ~/

# ✅正确生产写法:--strip-components 剥离路径前缀,精准恢复到用户家目录
tar -zxvf project_full_*.tar.gz --strip-components=2 -C ~/

通俗问题原因 & 解决方案(必看)

  1. 出错根源:打包使用~/project绝对路径,压缩包内部路径为home/ubuntu/project/xxx。直接解压会生成嵌套目录~/home/ubuntu/project,执行ls ~/project看不到恢复后的业务文件。
  2. –strip-components=2作用:删除前面2层目录home、ubuntu,直接释放project目录到目标位置。
  3. 恢复校验:执行ls ~/project,可以看到 config、log、data 目录即恢复成功。

正确答案

4. 系统配置目录备份

修改系统配置前,务必备份/etc,防止改崩系统。

1
sudo tar -zcvf etc_backup_$(date +%Y%m%d).tar.gz /etc/

⚠️生产红线规则:严禁整包解压覆盖 /etc 目录!
全盘覆盖会重置全部系统配置,网络、SSH、账号权限全部失效,服务器直接瘫痪。/etc备份只用来做单文件精准恢复

三、tar 增量备份

全量备份占用磁盘大;增量备份只备份新增/变更文件,节省存储空间,适合日常定时备份。

1、第一次全量备份(生成快照文件)

1
tar -zcvf project_all.tar.gz ~/project --listed-incremental=backup.snap

2. 修改/新增测试文件

1
echo "new_config=123" >> ~/project/config/app.conf

3. 增量备份(仅备份改动内容)

1
tar -zcvf project_inc.tar.gz ~/project --listed-incremental=backup.snap

四、rsync 增量同步备份

Ubuntu24.04已经废弃老旧的dump/restore工具。rsync是互联网企业主流热备份、异地同步工具,支持增量、断点续传,业务数据备份大量使用。

1. 本地目录首次全量备份

1
2
# 将 project 完整同步到 backup 备份目录
rsync -avz ~/project/ ~/project_backup/

2. 修改文件后增量同步

1
2
echo "update log" >> ~/project/log/service.log
rsync -avz ~/project/ ~/project_backup/

五、crontab 定时自动备份

企业服务器依靠定时任务实现无人值守自动备份,分为用户级、系统级。

1. 用户级定时任务(普通业务数据)

1
2
# 编辑个人定时任务
crontab -e

添加内容(每日凌晨2点自动备份project业务目录)

1
0 2 * * * /usr/bin/tar -zcvf /home/$USER/project_auto_$(date +\%Y\%m\%d).tar.gz /home/$USER/project/

2. 系统级定时备份(系统配置/etc)

1
sudo crontab -e

添加内容(每周日凌晨3点备份/etc系统配置)

1
0 3 * * 0 /usr/bin/tar -zcvf /etc_backup_$(date +\%Y\%m\%d).tar.gz /etc/

六、生产规范精准恢复演练

运维铁律:未测试的备份都是无效备份。必须主动模拟故障,验证备份可恢复。

1.业务目录单文件恢复

场景:只丢失单个配置文件,不需要恢复整个目录,降低恢复风险。

1
2
3
4
5
6
7
8
9
10
11
12
# 模拟误删核心配置文件
rm -rf ~/project/config/app.conf

# 第一步:务必查看压缩包内部真实路径(关键!杜绝报错)
tar -ztvf project_full_*.tar.gz

# ✅正确单文件恢复命令:填写【压缩包内部真实路径】,不是系统磁盘路径
# 包内路径为:home/ubuntu/project/config/app.conf
tar -zxvf project_full_*.tar.gz home/ubuntu/project/config/app.conf --strip-components=2 -C ~/

# 校验恢复
ls ~/project/config/

说明:tar单文件恢复只能识别压缩包内部原生路径;如果写系统路径~/project/xxx,会抛出Not found in archive。恢复前必须查看包内路径。

路径错误
优先确定文档在压缩包里的真实路径。
正确路径

2.系统 /etc 配置单文件精准恢复

生产高频故障:人为改错SSH等系统配置,远程失联。禁止整包恢复/etc,只修复损坏的单个配置文件

步骤1:查询备份包内文件完整路径

1
2
# 筛选查看ssh配置文件在备份包内的路径
tar -ztvf etc_backup_*.tar.gz | grep sshd_config

步骤2:模拟配置文件损坏

坑:sudo echo xxx > 文件会报权限拒绝;重定向>是bash执行,sudo不会提升重定向权限,需要套sh -c

1
2
3
4
5
6
# 正确写法:sudo 无法直接配合 > 重定向,需要套 sh -c 提升整体权限
# 模拟改错配置、破坏原始 ssh 配置文件
sudo sh -c 'echo "error_config_test" > /etc/ssh/sshd_config'

# 查看文件已被篡改
cat /etc/ssh/sshd_config

步骤3:单文件精准恢复

⚠️Ubuntu24.04重大隐形BUG:
如果磁盘上现有文件mtime(修改时间)比备份包内文件新,单纯加--overwrite不会覆盖,出现解压输出成功,但文件内容完全不变的假性恢复。
另外:严禁rm删除系统核心配置文件,删除后文件直接丢失,新版openssh没有现成模板可以复制,极易造成SSH瘫痪。

1
2
3
4
5
6
7
# ✅针对文件彻底丢失的终极恢复方案:tar -O输出到stdout,重定向新建文件
# 规避tar时间比对BUG,不需要依赖系统模板,重建丢失配置文件
sh -c 'tar -zxvf /home/ubuntu/etc_backup_20260821.tar.gz etc/ssh/sshd_config -O > /etc/ssh/sshd_config'

# sshd对权限极其严格,必须修复属主与权限,否则服务启动失败
chown root:root /etc/ssh/sshd_config
chmod 644 /etc/ssh/sshd_config

步骤4:校验恢复结果并生效配置

注意:Ubuntu的ssh服务名叫ssh,不是CentOS的sshd;配置严重损坏时reload无效,必须restart

1
2
3
4
5
6
7
8
9
# 校验配置已恢复为备份时的原始正确内容
cat /etc/ssh/sshd_config

# Ubuntu24.04 专属适配:服务名为 ssh 不是 sshd
# 配置损坏场景必须重启服务才能生效,reload 无法修复异常配置
sudo systemctl restart ssh

# 最终校验服务正常运行
systemctl status ssh

七、实操踩坑完整复盘(博客重点)

  1. tar Not found in archive:恢复单文件必须写压缩包内部路径,不能写磁盘上的系统路径;先用tar -ztvf查看包内文件。
  2. sudo + >重定向报Permission denied:sudo只提升命令,重定向属于shell行为;使用sh -c 'xxx > file'整体提权。
  3. tar显示解压成功,文件内容不变:tar会对比文件修改时间,新文件不会被包内旧文件覆盖;文件丢失场景使用tar -O输出stdout重定向重建。
  4. 服务名差异:CentOS为sshd.service,Ubuntu24.04为ssh.service,混用会提示Unit not found。
  5. 不要rm系统核心配置/etc/ssh/sshd_config删除后没有模板可复制,直接SSH瘫痪。模拟故障只修改内容,不要删除文件。
  6. 切换root之后备份包找不到:备份放在普通用户家目录,root下相对路径失效;使用find / -name "xxx.tar.gz"查找真实绝对路径。
  7. 不要盲目apt重装软件救配置:版本不一致会触发依赖锁死,把系统搞坏;优先从备份包抢救配置文件。

八、实战总结

  1. tar适合本地文件备份,rsync适合增量同步、异地备份;crontab实现定时自动化。
  2. /etc系统备份禁止整包解压覆盖,只做单文件恢复,避免系统整体瘫痪。
  3. 备份之后一定要做恢复演练,没有验证过的备份没有意义。
  4. 模拟故障尽量只修改内容,不删除系统核心文件,防止环境直接报废。
  5. 遇到解压成功但是业务不恢复,优先怀疑tar时间比对导致的假性恢复,不要一味增加各种参数。