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 定时执行备份脚本),能最大程度保障数据安全。

相关推荐
阳懿2 小时前
windows系统电脑远程登录ubuntu系统电脑
linux·运维·ubuntu
qq_402605653 小时前
JAVA大文件分片上传
java·大文件上传
wuk9983 小时前
在Ubuntu 18.04/20.04 LTS设置静态DNS服务器
linux·服务器·ubuntu
“愿你如星辰如月”3 小时前
Linux C缓冲区机制全解析
linux·运维·服务器·c语言·vscode
ss2733 小时前
手写MyBatis第78弹:装饰器模式在MyBatis二级缓存中的应用:从LRU到防击穿的全方案实现
java·开发语言
凯尔萨厮3 小时前
Java学习笔记五(多态)
java·笔记·学习
迷迷的k3 小时前
后端两个接口需分开写,前端需不串行并同时刷新调用但数据不同步NOTE
java·数据同步问题
2401_865854884 小时前
搭建个人博客:云服务器IP如何使用
运维·服务器·tcp/ip
探云抛雾؁ۣۖ4 小时前
SSH安全 白名单配置限制实战:AllowUsers 限制指定 IP 登录
linux·运维·服务器