img

😀前言
   在日常运维中,系统稳定性与数据安全 是最核心的任务之一。Linux 系统虽然稳定,但任何硬件故障、误操作、病毒攻击都可能导致数据丢失。一旦没有备份,重装系统或恢复数据将会耗费大量时间和精力,甚至造成无法挽回的损失。
   因此,掌握 Linux 备份与恢复 是每个运维工程师和学习者的必备技能。本章将从最常见的 tar 方法讲起,再深入讲解 dumprestore 工具,结合实际案例,让新手也能快速理解并上手。同时还会补充一些备份策略与注意事项,帮助你建立更安全、更高效的备份体系。

🏠个人主页:尘觉主页

Linux 系统 — 备份与恢复 (优化版)

1. 为什么要做备份?

实体机不能做快照,系统一旦出现故障或数据损坏,可能需要重装系统,且会丢失数据。因此对重要系统和数据做定期备份是必需的,能在灾难发生时快速恢复服务并减少损失。

备份常见做法有两类(简单说明):

  1. 使用 tar 把需要的文件或目录打包(适合文件级、目录级备份,操作灵活)。
  2. 使用 dump / restore(适合文件系统级别的全备与增量备份)。

示意图
在这里插入图片描述


2. 安装 dump / restore

在基于 RHEL/CentOS 的系统上,如果没有命令,可以用:

yum -y install dump

(安装完成后会同时有 dumprestore 命令)。

小提示:执行备份/恢复通常需要 root 权限。


3. dump:概念与常用选项

dump 用于对文件系统做备份(支持完整备份与按层级的增量备份)。所谓“增量”是指备份自上次备份后有改动的文件。

常用选项(说明和用途):

  • -0-9:备份层级(0 表示完整备份12…表示增量层级,数字越大表示越“浅”的增量)。
  • -f <文件名>:指定输出备份文件名(也可以是设备名,如 /dev/st0)。
  • -j:使用 bzip2 压缩输出(生成 .bz2 文件)。
  • -u:备份完成后把信息写入 /etc/dumpdates(用于记录何时做了哪个级别的备份,便于以后做增量)。
  • -t查看备份文件中有哪些文件(不还原,仅列出)。
  • -C:在 restore 中使用,用来比较备份和现有文件差异(详见 restore)。
  • -W / -w:W-显示需要备份的文件及其最后一次备份的层级,时间,日期。
    • w-与-W 类似,但仅显示需要备份的文件(用于判断增量内容)。
  • -T <日期>:指定作为备份的起始时间(一般不用到)。

注意:dump 做增量时依赖 /etc/dumpdates 的记录;对子目录/普通目录做增量时会报错(后面详解)。


4. dump 示例

完整备份 /boot/opt/boot.bak0.bz2

dump -0uj -f /opt/boot.bak0.bz2 /boot

解释:-0 完整备份;-u 更新 /etc/dumpdates-j 用 bzip2 压缩;-f 指定输出文件;最后是要备份的挂载点 /boot

/boot 增量备份(相对于上次 0 级备份的改动)并保存为 boot.bak1:

dump -1uj -f /opt/boot.bak1.bz2 /boot

说明:-1 指第一层增量(只备份自上次 0 级后变更的内容)。对比两次备份文件大小可以看出增量效果。

检查将要备份的文件/时间信息(不做备份,仅查看)

dump -W /boot

(输出会列出哪些文件/目录在上次备份之后发生变化)
在这里插入图片描述

查看 /etc/dumpdates(记录)

cat /etc/dumpdates

示例图 :
在这里插入图片描述

备份整个目录(只能做 0 级,即完整备份)

dump -0j -f /opt/etc.bak.bz2 /etc

提醒:对“子目录”做增量(层级 >0)会报错:DUMP: Only level 0 dumps are allowed on a subdirectory。原因在于增量备份需要在文件系统级别维护元信息,子目录没有完整的文件系统上下文,因此只允许完整备份。解决办法见“常见问题”部分。


5. 使用 crontab 做无人值守备份

把备份脚本放文件里更稳妥(避免 crontab 中 % 的问题):

/usr/local/bin/dump_boot.sh 写入:

#!/bin/bash
DATE=$(date +%F)
/sbin/dump -0uj -f /opt/boot.bak0.$DATE.bz2 /boot

赋予执行权限:

chmod +x /usr/local/bin/dump_boot.sh

添加 crontab(每周日凌晨 2 点执行):

0 2 * * 0 /usr/local/bin/dump_boot.sh

建议把脚本的输出、错误重定向到日志,并做好轮转/清理策略,避免磁盘被备份文件占满。


6. restore:查看、比较与还原

restore 用来从 dump 的备份文件中恢复或查看内容。主要模式(四选一):

  • -t查看模式(列出备份文件里有哪些文件)。
  • -i交互式(还原时询问用户,适合选择性恢复)。
  • -r还原模式(恢复文件到当前目录或到原路径,取决于运行位置与参数)。
  • -C比较模式(比较备份文件与当前文件系统中文件的差异)。

常用选项:-f <备份文件> 指定从哪个备份文件读取。

示例:比较备份和当前文件差异(测试)

先把 /boot/hello.java 改名或修改,示例命令:

restore -C -f /opt/boot.bak1.bz2

(会输出备份与当前文件的比较结果 ):
在这里插入图片描述

mv /boot/hello100.java /boot/hello.java   再改回来看看一样的情况

restore -C -f boot.bak1.bz2

在这里插入图片描述

示例:查看备份文件中有哪些内容

restore -t -f /opt/boot.bak0.bz2

示例:按顺序恢复(增量备份必须按顺序恢复)

推荐先创建临时目录,先在临时目录恢复并测试,再替换生产目录:

mkdir /opt/boottmp
cd /opt/boottmp
restore -r -f /opt/boot.bak0.bz2    # 恢复到第 1 次完全备份状态
restore -r -f /opt/boot.bak1.bz2    # 再应用第 1 次增量
# 如果有更多增量文件,继续按时间顺序恢复

示例恢复图 :
在这里插入图片描述

重要:增量恢复必须从最近一次完整备份开始,然后按时间顺序依次恢复每个增量文件;若缺少中间的增量文件,恢复结果可能不完整或失败。


7. 如果你只想备份某个目录(tar 方法)

dump 对子目录不支持增量(见上文),所以对文件/目录级备份很多人直接用 tar

完整备份 /etc(保留权限)并压缩为 gzip:

tar -czpPf /opt/etc-$(date +%F).tar.gz /etc

解释:

  • -c 创建归档
  • -z 用 gzip 压缩(也可以 -j 用 bzip2)
  • -p 保持权限
  • -P 使用绝对路径(也可以去掉)
  • -f 指定文件名

从 tar 恢复(到临时目录):

mkdir /opt/etctmp
tar -xzpf /opt/etc-2025-09-01.tar.gz -C /opt/etctmp

8. 常见问题与排查

  • 报错 Only level 0 dumps are allowed on a subdirectory
    说明你试图对子目录做非 0 级(增量)备份。解决:要么对整个挂载点(文件系统根)做增量备份,要么对该子目录使用 tar 做完整备份。
  • 备份文件很大 / 占满磁盘:
    使用压缩(-j / -z),并实现备份轮转(按天/周保留一定天数),或把旧备份移到异地存储。
  • 备份后的文件恢复不完全 / 权限不对:
    恢复时请确保以 root 执行,且使用 dump / restoretar 时带上保留权限的选项(-p 等)。
  • 如何验证备份有效?
    定期把备份恢复到临时目录并测试关键文件/服务,别只相信备份命令成功返回。
  • 要不要把备份放到同一台服务器?
    不要。重要数据应异地保存(另一台服务器、网络存储或云端),以防整机损坏或被盗。

9. 备份策略建议

  • 最少做法:每周一次完整备份(dump -0 或 tar),每日做一次增量(dump -1/2)或文件级增量。
  • 保留策略:比如保留最近 7 天的每日增量、最近 4 周的周备份、最近 6 个月的月备份。
  • 自动化:把脚本放到 /usr/local/bin 并用 crontab 调度,产生日志并自动清理旧文件。
  • 异地与加密:重要备份通过 scp 或 rsync 传到另一台机器;敏感数据考虑用 gpg 加密后再传。
  • 定期演练:至少每月做一次恢复演练,确保能真正还原出可用数据。

10. 简洁的操作流程

  1. 决定要备份的对象(分区层级用 dump,目录/文件用 tar)。
  2. 设计好命名与保存策略(包含日期与层级)。
  3. 写脚本并用 crontab 定时执行,脚本输出写入日志。
  4. 定期把备份搬到异地并加密(如需)。
  5. 定期测试恢复流程,确认备份可用。

😄总结

本文介绍了 Linux 下常见的两类备份方式:

  • 文件/目录级备份:适合用 tar,简单直观。
  • 文件系统级备份:适合用 dump/restore,支持完整备份和分层增量备份。

通过案例演示了如何:

  • 使用 dump 执行完整与增量备份;
  • 借助 /etc/dumpdates 管理备份记录;
  • 使用 restore 查看、比较和还原数据;
  • 结合 crontab 实现自动化定时备份。

最后强调:

  1. 备份不是目的,能成功恢复才是关键 → 建议定期演练恢复流程。
  2. 不要把所有备份放在同一台机器 → 异地存储与加密至关重要。
  3. 良好的备份策略 → 全备 + 增量,配合自动化和轮转,才能既省空间又保证安全。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

img

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐