备份与恢复
数据备份是系统管理中最重要的环节之一。本文介绍 Ubuntu 26.04 中多种备份和恢复方案,帮助你根据需求选择合适的工具。
rsync - 灵活的同步工具
rsync 是一个快速、灵活的文件同步工具,支持增量传输,是 Linux 下最常用的备份工具之一。
基本用法
# 本地目录同步
rsync -av /source/directory/ /backup/directory/
# 注意:源路径末尾的斜杠很重要
# /source/dir/ → 同步目录下的内容
# /source/dir → 同步目录本身(包含目录名)常用选项
# -a 归档模式(保留权限、时间戳、符号链接等)
# -v 详细输出
# -z 传输时压缩
# -h 人类可读的输出
# --progress 显示进度
# --delete 删除目标目录中源目录没有的文件
# 完整的本地备份命令
rsync -avh --progress /home/user/ /backup/home-user/
# 带排除规则的备份
rsync -avh --progress \
--exclude='.cache' \
--exclude='node_modules' \
--exclude='.local/share/Trash' \
/home/user/ /backup/home-user/
# 使用排除文件
rsync -avh --exclude-from='/home/user/rsync-excludes.txt' \
/home/user/ /backup/home-user/远程备份
# 通过 SSH 备份到远程服务器
rsync -avz -e ssh /home/user/ user@remote:/backup/home-user/
# 指定 SSH 端口
rsync -avz -e "ssh -p 2222" /home/user/ user@remote:/backup/home-user/
# 从远程服务器恢复
rsync -avz user@remote:/backup/home-user/ /home/user/
# 使用 --delete 保持两端完全一致
rsync -avz --delete /home/user/ user@remote:/backup/home-user/自动化 rsync 备份脚本
创建备份脚本:
sudo nano /usr/local/bin/daily-backup.sh#!/bin/bash
# 配置
SOURCE="/home/"
DEST="/backup/daily"
LOG="/var/log/backup.log"
DATE=$(date +%Y-%m-%d_%H%M%S)
# 创建日志
echo "===== 备份开始: $DATE =====" >> "$LOG"
# 执行备份
rsync -avh --delete \
--exclude='.cache' \
--exclude='node_modules' \
--exclude='.local/share/Trash' \
"$SOURCE" "$DEST" >> "$LOG" 2>&1
# 记录结果
if [ $? -eq 0 ]; then
echo "备份成功完成: $(date)" >> "$LOG"
else
echo "备份失败: $(date)" >> "$LOG"
fisudo chmod +x /usr/local/bin/daily-backup.sh配合 cron 定时执行:
# 每天凌晨 2 点执行备份
sudo crontab -e
# 添加: 0 2 * * * /usr/local/bin/daily-backup.shTimeshift - 系统快照
Timeshift 专注于系统文件的快照和恢复,类似于 Windows 的系统还原点。
安装与配置
# 安装 Timeshift
sudo apt install timeshift
# 启动图形界面
sudo timeshift-gtk
# 命令行方式创建快照
sudo timeshift --create --comments "安装 NVIDIA 驱动前"
# 列出所有快照
sudo timeshift --list
# 恢复到指定快照
sudo timeshift --restore --snapshot '2026-03-24_10-00-00'
# 删除快照
sudo timeshift --delete --snapshot '2026-03-24_10-00-00'命令行配置
# 查看当前配置
sudo timeshift --config
# 设置快照类型(RSYNC 或 BTRFS)
sudo timeshift --snapshot-device /dev/sda2Timeshift 配置文件
编辑 /etc/timeshift/timeshift.json:
{
"backup_device_uuid": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"parent_device_uuid": "",
"do_first_run": false,
"btrfs_mode": false,
"include_btrfs_home": false,
"schedule_monthly": false,
"schedule_weekly": true,
"schedule_daily": true,
"schedule_hourly": false,
"schedule_boot": false,
"count_monthly": 2,
"count_weekly": 3,
"count_daily": 5,
"count_hourly": 0,
"count_boot": 0,
"exclude": [
"/home/**",
"/root/**"
]
}Btrfs 快照模式
如果系统使用 Btrfs 文件系统,Timeshift 可以利用 Btrfs 原生快照功能,速度更快且占用空间更小:
# 确认文件系统类型
df -T /
# 如果是 Btrfs,在 Timeshift 中选择 BTRFS 模式
sudo timeshift --btrfsDeja Dup - 桌面备份工具
Deja Dup(GNOME 备份)是 Ubuntu 桌面环境下易用的备份工具,适合个人用户。
安装与使用
# 安装(Ubuntu 桌面版通常已预装)
sudo apt install deja-dupDeja Dup 提供图形界面,可以在”设置”中或通过应用菜单搜索”备份”来启动。
主要特性:
- 支持备份到本地磁盘、外接硬盘、网络存储
- 支持备份到 Google Drive 等云存储
- 自动加密备份
- 支持增量备份
- 定时自动备份
命令行操作
Deja Dup 后端使用 duplicity:
# 手动执行备份
deja-dup --backup
# 恢复文件
deja-dup --restore系统镜像备份
使用 dd 创建磁盘镜像
# 创建整个磁盘镜像
sudo dd if=/dev/sda of=/backup/sda.img bs=4M status=progress
# 压缩镜像
sudo dd if=/dev/sda bs=4M status=progress | gzip > /backup/sda.img.gz
# 从镜像恢复
sudo dd if=/backup/sda.img of=/dev/sda bs=4M status=progress
# 从压缩镜像恢复
gunzip -c /backup/sda.img.gz | sudo dd of=/dev/sda bs=4M status=progress使用 Clonezilla
Clonezilla 是一个功能强大的磁盘克隆和镜像工具:
# 安装 Clonezilla
sudo apt install clonezilla
# 通常建议从 Clonezilla Live USB 启动进行操作
# 下载地址:https://clonezilla.org/downloads.php使用 tar 备份系统
# 备份整个系统(排除不需要的目录)
sudo tar czpf /backup/system-$(date +%Y%m%d).tar.gz \
--exclude=/backup \
--exclude=/proc \
--exclude=/sys \
--exclude=/dev \
--exclude=/run \
--exclude=/tmp \
--exclude=/mnt \
--exclude=/media \
--exclude=/lost+found \
/
# 恢复系统
sudo tar xzpf /backup/system-20260324.tar.gz -C /数据库备份
MySQL / MariaDB
# 备份单个数据库
mysqldump -u root -p database_name > /backup/db-$(date +%Y%m%d).sql
# 备份所有数据库
mysqldump -u root -p --all-databases > /backup/all-db-$(date +%Y%m%d).sql
# 恢复数据库
mysql -u root -p database_name < /backup/db-20260324.sqlPostgreSQL
# 备份单个数据库
sudo -u postgres pg_dump dbname > /backup/pg-$(date +%Y%m%d).sql
# 备份所有数据库
sudo -u postgres pg_dumpall > /backup/pg-all-$(date +%Y%m%d).sql
# 恢复
sudo -u postgres psql dbname < /backup/pg-20260324.sql备份策略建议
3-2-1 备份原则
- 3 份数据副本(原始数据 + 2 份备份)
- 2 种不同的存储介质(如本地硬盘 + 云存储)
- 1 份异地备份(防止物理灾难)
按场景推荐
| 场景 | 推荐工具 | 备份频率 |
|---|---|---|
| 桌面个人用户 | Deja Dup + Timeshift | 每天 / 每周 |
| 开发工作站 | rsync + Timeshift | 每天 |
| Web 服务器 | rsync + 数据库备份 | 每天 / 每小时 |
| 关键业务服务器 | rsync + LVM 快照 + 异地备份 | 实时 / 每小时 |
验证备份
定期验证备份的完整性非常重要:
# 验证 tar 备份
tar tzf /backup/system-20260324.tar.gz > /dev/null
# 验证 rsync 备份
rsync -avhn --delete /source/ /backup/ # dry-run 对比差异
# 定期进行恢复演练Last updated on