Linux 备份与恢复常用命令

在 Linux 系统运维中,备份与恢复是保障数据安全的核心环节 ------ 无论是日常文件误删、配置文件篡改,还是系统崩溃,可靠的备份策略和熟练的命令使用都能快速恢复数据。本文按「文件 / 目录备份 」「压缩备份 」「系统级备份 」「增量 / 差异备份」四大核心场景,整理常用命令及实操示例,兼顾基础用法与进阶技巧。

一、文件 / 目录备份:基础命令(cp、rsync)

适用于日常单个文件、目录的完整备份,操作简单,适合小体量数据或关键配置文件(如 /etc/home 下的用户数据)。

1. cp:最基础的复制备份

cp(copy)是 Linux 自带的文件复制命令,可直接实现「源文件→备份文件」的一对一备份,支持目录递归复制。

核心语法
复制代码
cp [选项] 源路径 目标路径
常用选项与示例
选项 作用 示例
-r 递归复制目录(必选,否则无法复制目录) 备份 /data 目录到 /backup 下,命名为 data_bakcp -r /data /backup/data_bak
-p 保留源文件的权限、修改时间、所有者(避免备份后权限失效) 备份 /etc/nginx/nginx.conf/backup,保留权限:cp -p /etc/nginx/nginx.conf /backup/nginx.conf_bak
-a 等同于 -dR --preserve=all,保留所有属性(包括符号链接),适合完整备份 备份 /home/user 目录(含符号链接)到 /backupcp -a /home/user /backup/user_bak
时间戳命名 避免覆盖旧备份(用 $(date +%F_%H%M%S) 生成时间戳) 每日备份 /data,文件名带日期(如 data_20240520_1430):cp -r /data /backup/data_$(date +%F_%H%M%S)
恢复示例

/data 目录误删,从备份恢复:

复制代码
cp -r /backup/data_bak /data  # 覆盖目标路径(需确认目标路径已清空或允许覆盖)

2. rsync:高效同步备份(推荐)

rsync 是比 cp 更强大的工具 ------ 支持「增量同步」(仅备份变化的文件)、远程同步(跨服务器备份),且占用带宽低、支持排除指定文件,适合频繁备份或大规模数据。

核心语法
复制代码
rsync [选项] 源路径 目标路径  # 本地同步
rsync [选项] 源路径 用户名@远程IP:目标路径  # 本地→远程同步
rsync [选项] 用户名@远程IP:源路径 目标路径  # 远程→本地同步(恢复)
常用选项与示例
选项 作用 示例
-a 归档模式(递归 + 保留权限 / 时间 / 所有者,等同于 -rlptgoD),必选 本地同步 /data/backup/data_rsyncrsync -a /data /backup/data_rsync
-v 显示同步过程(verbose),方便排查问题 同步时显示文件列表:rsync -av /data /backup/data_rsync
-z 压缩传输(适合远程同步,减少网络带宽占用) 本地同步到远程服务器(192.168.1.100):rsync -avz /data root@192.168.1.100:/backup
--delete 让目标目录与源目录完全一致(删除目标目录中源目录没有的文件),适合镜像备份 同步 /data 并删除备份中多余的文件:rsync -av --delete /data /backup/data_rsync
--exclude 排除不需要备份的文件 / 目录(支持通配符) 备份 /data 但排除 .log 日志文件和 tmp 目录:rsync -av --exclude="*.log" --exclude="tmp" /data /backup
恢复示例(远程→本地)

若本地 /data 损坏,从远程服务器(192.168.1.100)的备份恢复:

复制代码
rsync -avz root@192.168.1.100:/backup/data_rsync /data

二、压缩备份:节省空间(tar、zip/unzip)

直接备份文件会占用大量磁盘空间,通常会结合压缩工具(如 tarzip)将备份打包压缩,常用格式有 tar.gz(gzip 压缩,最常用)、tar.bz2(bzip2 压缩,压缩率更高)、zip(跨平台,Windows 也可解压)。

1. tar:Linux 标配打包压缩工具

tar 本身是「打包」工具(将多个文件 / 目录打包成一个 .tar 文件),结合 -z(gzip)、-j(bzip2)、-J(xz)选项可实现「打包 + 压缩」,对应的解压选项为 -x

核心语法(备份:打包 + 压缩)
复制代码
tar [压缩选项] -cvf 压缩包名称.tar.xxx 源文件/目录
# 选项说明:
# -c:创建压缩包(create)
# -v:显示打包过程
# -f:指定压缩包名称(必须放在所有选项最后)
# 压缩选项:-z(.tar.gz)、-j(.tar.bz2)、-J(.tar.xz)
核心语法(恢复:解压)
复制代码
tar [压缩选项] -xvf 压缩包名称.tar.xxx -C 目标目录
# -x:解压(extract)
# -C:指定解压到的目标目录(不指定则解压到当前目录)
常用示例
场景 备份命令(打包 + 压缩) 恢复命令(解压)
备份 /etc 目录为 etc_backup.tar.gz(gzip 压缩,最常用) tar -zcvf /backup/etc_backup.tar.gz /etc 解压到 /tmp 目录:tar -zxvf /backup/etc_backup.tar.gz -C /tmp
备份 /home 目录为 home_backup.tar.bz2(bzip2 压缩,压缩率更高) tar -jcvf /backup/home_backup.tar.bz2 /home 直接解压到当前目录:tar -jxvf /backup/home_backup.tar.bz2
备份多个文件(如 file1.txtfile2.logdir1)为 data.tar.xz(xz 压缩,压缩率最高) tar -Jcvf /backup/data.tar.xz file1.txt file2.log dir1 解压到 /data/restoretar -Jxvf /backup/data.tar.xz -C /data/restore
关键技巧:查看压缩包内容(无需解压)
复制代码
tar -ztvf /backup/etc_backup.tar.gz  # 查看 .tar.gz 包内文件
tar -jtvf /backup/home_backup.tar.bz2  # 查看 .tar.bz2 包内文件

2. zip/unzip:跨平台压缩工具

zip 支持将文件 / 目录压缩为 .zip 格式(Windows 和 Linux 均可解压),unzip 用于解压 .zip 文件,需先安装(Debian/Ubuntu:apt install zip unzip;CentOS/RHEL:yum install zip unzip)。

备份命令(zip)
复制代码
zip [选项] 压缩包名称.zip 源文件/目录
# 常用选项:-r(递归压缩目录)、-q(静默压缩,不显示过程)、-9(最高压缩率)
恢复命令(unzip)
复制代码
unzip [选项] 压缩包名称.zip -d 目标目录
# 常用选项:-l(查看压缩包内容)、-o(覆盖现有文件,无需确认)
示例
  • 备份 /data 目录为 data_backup.zip(递归压缩,最高压缩率):

    bash

    复制代码
    zip -r9 /backup/data_backup.zip /data
  • 解压 data_backup.zip/tmp/restore,覆盖现有文件:

    bash

    复制代码
    unzip -o /backup/data_backup.zip -d /tmp/restore
  • 查看压缩包内文件,不解压: bash

    复制代码
    unzip -l /backup/data_backup.zip

三、系统级备份:分区 / 磁盘备份(dd)

dd 是 Linux 下的「磁盘复制」命令,可直接备份整个分区(如 /dev/sda1)或整个磁盘(如 /dev/sda),生成镜像文件,适合系统崩溃后的完整恢复(需谨慎使用,操作不当会覆盖数据)。

核心语法

复制代码
dd if=源设备/文件 of=目标文件/设备 bs=块大小 count=块数
# 选项说明:
# if(input file):源(分区/磁盘/文件)
# of(output file):目标(镜像文件/分区/磁盘)
# bs(block size):每次读写的块大小(如 4M,越大速度越快)
# count:读取的块数(不指定则复制整个源)

常用示例

1. 备份分区(如 /dev/sda1,系统 boot 分区)
复制代码
# 备份 /dev/sda1 到 /backup/sda1_backup.img(块大小 4M)
dd if=/dev/sda1 of=/backup/sda1_backup.img bs=4M
2. 恢复分区(从镜像恢复到 /dev/sda1

⚠️ 警告:恢复前需确保目标分区已卸载(或进入救援模式),否则会损坏数据!

复制代码
# 从镜像恢复到 /dev/sda1
dd if=/backup/sda1_backup.img of=/dev/sda1 bs=4M
3. 备份整个磁盘(如 /dev/sda,包含所有分区)
复制代码
# 备份 /dev/sda 到 /backup/sda_full_backup.img(适合全盘恢复)
dd if=/dev/sda of=/backup/sda_full_backup.img bs=4M
4. 关键技巧:压缩磁盘镜像(节省空间)

dd 备份的镜像文件体积与源分区 / 磁盘一致,可结合 gzip 压缩:

复制代码
# 备份并压缩 /dev/sda1
dd if=/dev/sda1 bs=4M | gzip -c > /backup/sda1_backup.img.gz

# 恢复压缩的镜像
gzip -dc /backup/sda1_backup.img.gz | dd of=/dev/sda1 bs=4M

四、增量 / 差异备份:高效备份(rsync、tar)

全量备份(每次备份所有数据)耗时且占用空间,增量备份 (仅备份上次备份后变化的数据)和差异备份(仅备份上次全量备份后变化的数据)更高效,适合大规模数据或高频备份场景。

1. rsync 实现增量备份(推荐)

利用 rsync--link-dest 选项创建「硬链接快照」,每次备份仅存储变化的文件,旧文件通过硬链接指向历史备份,既节省空间,又可保留完整的历史版本。

示例:每日增量备份 /data
复制代码
# 1. 定义备份目录和日期格式
BACKUP_DIR="/backup/data_incremental"
DATE=$(date +%F)
# 2. 第一次备份(全量,创建基础目录)
if [ ! -d "$BACKUP_DIR/latest" ]; then
  rsync -av --delete /data "$BACKUP_DIR/latest"
fi
# 3. 后续增量备份(基于 latest 创建当日快照,仅变化文件新存储)
rsync -av --delete --link-dest="$BACKUP_DIR/latest" /data "$BACKUP_DIR/$DATE"
# 4. 更新 latest 为当日快照(下次增量基于当日)
rm -rf "$BACKUP_DIR/latest"
ln -s "$BACKUP_DIR/$DATE" "$BACKUP_DIR/latest"

效果 :每日备份仅占用变化文件的空间,/backup/data_incremental/2024052020240521 等目录均为完整的备份版本,可直接恢复任意日期的数据。

2. tar 实现增量备份

tar 通过 -g 选项生成「快照文件」(记录备份状态),下次备份基于快照文件仅打包变化的文件。

示例:全量备份 + 增量备份
复制代码
# 1. 全量备份(生成快照文件 /backup/data_snapshot.snar)
tar -zcvf /backup/data_full_$(date +%F).tar.gz -g /backup/data_snapshot.snar /data

# 2. 1天后增量备份(基于快照文件,仅备份变化的文件)
tar -zcvf /backup/data_incr_$(date +%F).tar.gz -g /backup/data_snapshot.snar /data
恢复方式:先恢复全量,再恢复增量
复制代码
# 1. 恢复全量备份
tar -zxvf /backup/data_full_20240520.tar.gz -C /data/restore
# 2. 恢复增量备份(覆盖全量备份中的变化文件)
tar -zxvf /backup/data_incr_20240521.tar.gz -C /data/restore

五、备份与恢复注意事项

  1. 备份前验证源数据:确保源文件 / 目录可访问(权限足够),避免备份空数据或损坏数据。

  2. 备份后校验完整性 :用 md5sumsha256sum 生成备份文件的校验值,恢复前验证:

    复制代码
    # 备份时生成校验值
    md5sum /backup/etc_backup.tar.gz > /backup/etc_backup.md5
    # 恢复前验证
    md5sum -c /backup/etc_backup.md5
  3. 远程备份注意权限 :用 rsync 远程备份时,确保远程服务器开启 ssh 服务,且本地用户有远程目录的写入权限(建议用密钥登录,避免密码泄露)。

  4. 系统级备份需离线 :用 dd 备份分区 / 磁盘时,建议进入「单用户模式」或使用 Live CD(如 CentOS 救援模式),避免文件被占用导致备份损坏。

  5. 定期测试恢复流程:备份后定期模拟恢复(如恢复到测试环境),确保备份文件可用,避免真正需要时发现备份无效。

六、常用命令速查表

场景 命令示例
复制目录备份 cp -ar /data /backup/data_$(date +%F)
本地同步备份 rsync -av --delete /data /backup/data_rsync
远程同步备份 rsync -avz /data root@192.168.1.100:/backup
打包压缩备份(tar.gz) tar -zcvf /backup/etc_backup.tar.gz /etc
解压恢复(tar.gz) tar -zxvf /backup/etc_backup.tar.gz -C /tmp
分区备份(dd) dd if=/dev/sda1 of=/backup/sda1.img bs=4M
增量备份(rsync) rsync -av --link-dest=/backup/latest /data /backup/$(date +%F)
校验备份完整性 md5sum -c /backup/etc_backup.md5

通过上述命令,可覆盖 Linux 从文件级到系统级的备份与恢复需求,结合定期备份策略(如 crontab 定时执行备份脚本),能最大程度保障数据安全。

相关推荐
皮皮林5514 分钟前
蚂蚁又开源了一个顶级 Java 项目!
java
吹晚风吧30 分钟前
spring是如何解决循环依赖的(二级缓存不行吗)?
java·spring·循环依赖·三级缓存
蜜蜜不吃糖32 分钟前
解决Vcenter告警datastore存储容量不足问题
linux·运维·服务器
九丶弟38 分钟前
SpringBoot的cache使用说明
java·spring boot·spring·cache
zzz.1040 分钟前
top命令的详解
linux·服务器·网络
东城绝神40 分钟前
《Linux运维总结:基于ARM64+X86_64架构CPU使用docker-compose一键离线部署redis 7.4.5容器版分片集群》
linux·运维·redis·架构·分片集群
馨谙1 小时前
网络故障排查三板斧:路由追踪、端口检查,快速定位网络问题
linux·网络
weixin_445476681 小时前
Java并发编程——synchronized的实现原理与应用
java·开发语言·并发·synchronized
herinspace1 小时前
如何设置电脑分辨率和显示缩放
服务器·数据库·智能手机·电脑
报错小能手1 小时前
linux学习笔记(49)Redis详解(1)
linux·笔记·学习