# 备份与恢复

URL: https://caijiao.org/rockylinux/backup-and-restore
Source: docs/rockylinux/backup-and-restore.md
Description: 本文介绍如何在 Rocky Linux 系统中执行数据与系统的备份与恢复，包括 rsync、tar、Timeshift、快照与自动化定时任务等多种方法。

在生产环境中，数据备份与恢复是系统运维中最关键的部分之一。  
无论是系统更新、配置更改还是迁移操作，可靠的备份机制都是确保安全的前提。

## 一、备份策略概述

备份可以分为以下几种类型：

| 类型             | 内容                         | 说明                   |
| ---------------- | ---------------------------- | ---------------------- |
| **完整备份**     | 所有数据                     | 占用空间大，但恢复最快 |
| **增量备份**     | 自上次备份以来更改的数据     | 节省空间与时间         |
| **差异备份**     | 自上次完整备份以来更改的数据 | 中间方案               |
| **系统镜像备份** | 包含整个系统                 | 用于灾难恢复或迁移     |

推荐策略：

- 每周进行一次完整备份；
- 每天执行一次增量备份；
- 将备份存储在远程或外部设备上。

## 二、使用 tar 进行简单备份

最基础的方式是使用 `tar` 命令打包备份。

### 1. 备份目录

```bash
sudo tar -czvf /backup/etc-backup-$(date +%F).tar.gz /etc
```

### 2. 备份整个系统（排除无关目录）

```bash
sudo tar -czvf /backup/system-backup-$(date +%F).tar.gz \
  --exclude=/proc --exclude=/sys --exclude=/dev --exclude=/tmp \
  --exclude=/run --exclude=/mnt --exclude=/media --exclude=/lost+found \
  /
```

### 3. 解压恢复

```bash
sudo tar -xzvf /backup/system-backup-2025-10-20.tar.gz -C /
```

## 三、使用 rsync 增量备份

`rsync` 是 Linux 中最常用的增量备份工具。

### 1. 本地目录同步

```bash
rsync -av --delete /home/ /backup/home/
```

### 2. 远程服务器备份

```bash
rsync -avz --delete /var/www/ user@192.168.1.10:/backup/web/
```

### 3. 定时自动备份（crontab）

```bash
sudo crontab -e
```

添加任务：

```bash
0 3 * * * rsync -av --delete /etc/ /backup/etc/
```

表示每天凌晨 3 点执行一次备份。

---

## 四、使用 Timeshift（系统快照工具）

Timeshift 是一个类似 Windows “系统还原”的工具，支持 Btrfs 与 RSYNC 模式。

### 1. 安装 Timeshift

```bash
sudo dnf install -y timeshift
```

### 2. 创建快照

```bash
sudo timeshift --create --comments "Before kernel update"
```

### 3. 列出快照

```bash
sudo timeshift --list
```

### 4. 恢复快照

```bash
sudo timeshift --restore
```

## 五、数据库备份（MySQL / PostgreSQL）

### MySQL

```bash
mysqldump -u root -p mydatabase > /backup/mydatabase.sql
```

恢复：

```bash
mysql -u root -p mydatabase < /backup/mydatabase.sql
```

### PostgreSQL

```bash
pg_dump mydatabase > /backup/mydatabase.sql
```

恢复：

```bash
psql mydatabase < /backup/mydatabase.sql
```

---

## 六、系统镜像备份（Clonezilla）

Clonezilla 是一个磁盘级备份与还原工具，适合整机迁移。

1. 下载并制作 Clonezilla 启动盘；
2. 启动系统后选择 `device-image` 模式；
3. 将系统分区克隆到外部硬盘；
4. 需要恢复时选择“Restore Disk”选项。

## 七、备份自动化与远程存储

可以使用 **rclone** 将备份上传到云端：

```bash
rclone sync /backup remote:rocky-backup
```

支持平台：Google Drive、OneDrive、S3、Aliyun OSS 等。

## 八、备份与恢复最佳实践

| 场景              | 推荐方案                      |
| ----------------- | ----------------------------- |
| 系统更新前        | Timeshift 快照或 tar 完整备份 |
| 网站/数据库服务器 | rsync + MySQL/PostgreSQL dump |
| 定期备份          | cron + rsync 自动任务         |
| 云端存储          | rclone 同步到远程             |
| 灾难恢复          | Clonezilla 镜像还原           |

## 九、总结

- `tar` 适合简单备份；
- `rsync` 适合增量与自动化；
- `Timeshift` 适合系统级回滚；
- `Clonezilla` 适合完整系统迁移；
- 建议结合多种方式保障安全。

> 💡 提示：在执行系统更新或数据库迁移前，务必先创建快照或完整备份，以便快速回滚。
