Skip to Content
文档运维系统管理备份与恢复

备份与恢复

数据备份是系统管理中最重要的环节之一。本文介绍 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" fi
sudo chmod +x /usr/local/bin/daily-backup.sh

配合 cron 定时执行:

# 每天凌晨 2 点执行备份 sudo crontab -e # 添加: 0 2 * * * /usr/local/bin/daily-backup.sh

Timeshift - 系统快照

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/sda2

Timeshift 配置文件

编辑 /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 --btrfs

Deja Dup - 桌面备份工具

Deja Dup(GNOME 备份)是 Ubuntu 桌面环境下易用的备份工具,适合个人用户。

安装与使用

# 安装(Ubuntu 桌面版通常已预装) sudo apt install deja-dup

Deja 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.sql

PostgreSQL

# 备份单个数据库 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