Linux 备份与恢复常用命令
在 Linux 系统运维中,备份与恢复是保障数据安全的核心环节 —— 无论是日常文件误删、配置文件篡改,还是系统崩溃,可靠的备份策略和熟练的命令使用都能快速恢复数据。本文按「文件 / 目录备份」「压缩备份」「系统级备份」「增量 / 差异备份」四大核心场景,整理常用命令及实操示例,兼顾基础用法与进阶技巧。
一、文件 / 目录备份:基础命令(cp、rsync)
适用于日常单个文件、目录的完整备份,操作简单,适合小体量数据或关键配置文件(如 /etc
、/home
下的用户数据)。
1. cp
:最基础的复制备份
cp
(copy)是 Linux 自带的文件复制命令,可直接实现「源文件→备份文件」的一对一备份,支持目录递归复制。
核心语法
cp [选项] 源路径 目标路径
常用选项与示例
选项 | 作用 | 示例 |
---|---|---|
-r | 递归复制目录(必选,否则无法复制目录) | 备份 /data 目录到 /backup 下,命名为 data_bak :cp -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 目录(含符号链接)到 /backup :cp -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_rsync :rsync -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)
直接备份文件会占用大量磁盘空间,通常会结合压缩工具(如 tar
、zip
)将备份打包压缩,常用格式有 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.txt 、file2.log 、dir1 )为 data.tar.xz (xz 压缩,压缩率最高) | tar -Jcvf /backup/data.tar.xz file1.txt file2.log dir1 | 解压到 /data/restore :tar -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" ]; thenrsync -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/20240520
、20240521
等目录均为完整的备份版本,可直接恢复任意日期的数据。
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
五、备份与恢复注意事项
- 备份前验证源数据:确保源文件 / 目录可访问(权限足够),避免备份空数据或损坏数据。
- 备份后校验完整性:用
md5sum
或sha256sum
生成备份文件的校验值,恢复前验证:# 备份时生成校验值 md5sum /backup/etc_backup.tar.gz > /backup/etc_backup.md5 # 恢复前验证 md5sum -c /backup/etc_backup.md5
- 远程备份注意权限:用
rsync
远程备份时,确保远程服务器开启ssh
服务,且本地用户有远程目录的写入权限(建议用密钥登录,避免密码泄露)。 - 系统级备份需离线:用
dd
备份分区 / 磁盘时,建议进入「单用户模式」或使用 Live CD(如 CentOS 救援模式),避免文件被占用导致备份损坏。 - 定期测试恢复流程:备份后定期模拟恢复(如恢复到测试环境),确保备份文件可用,避免真正需要时发现备份无效。
六、常用命令速查表
场景 | 命令示例 |
---|---|
复制目录备份 | 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 定时执行备份脚本),能最大程度保障数据安全。