# バックアップと復元

Rediaccは暗号化されたリポジトリを外部ストレージプロバイダにバックアップし、同じマシンまたは別のマシンで復元できます。バックアップは暗号化されており、復元にはリポジトリのLUKS認証情報が必要です。

## ストレージの設定

バックアップを送信する前に、ストレージプロバイダを登録します。Rediaccはrclone互換のストレージをすべてサポートしています：S3、B2、Google Driveなど。

### rcloneからのインポート

既にrcloneリモートが設定されている場合：

```bash
rdc config storage import --file rclone.conf
```

これにより、rclone設定ファイルからストレージ構成が現在の設定にインポートされます。サポートされているタイプ：S3、B2、Google Drive、OneDrive、Mega、Dropbox、Box、Azure Blob、Swift。

### ストレージの表示

```bash
rdc config storage list
```

## バックアップの送信

リポジトリのバックアップを外部ストレージに送信します：

```bash
rdc repo push --name my-app -m server-1 --to my-storage
```

| オプション | 説明 |
|-----------|------|
| `--to <storage>` | ターゲットストレージの場所 |
| `--to-machine <machine>` | マシン間バックアップのターゲットマシン |
| `--dest <filename>` | カスタム宛先ファイル名 |
| `--checkpoint` | プッシュ前にCRIUチェックポイントを作成（`rediacc.checkpoint=true`ラベル付きコンテナ用）。ターゲットは`repo up`時に自動復元 |
| `--force` | 既存のバックアップを上書き |
| `--tag <tag>` | バックアップにタグを付ける |
| `-w, --watch` | 操作の進捗を監視 |
| `--debug` | 詳細出力を有効化 |
| `--skip-router-restart` | Skip restarting the route server after the operation |

## バックアップの取得 / 復元

外部ストレージからリポジトリのバックアップを取得します：

```bash
rdc repo pull --name my-app -m server-1 --from my-storage
```

| オプション | 説明 |
|-----------|------|
| `--from <storage>` | ソースストレージの場所 |
| `--from-machine <machine>` | マシン間復元のソースマシン |
| `--force` | 既存のローカルバックアップを上書き |
| `-w, --watch` | 操作の進捗を監視 |
| `--debug` | 詳細出力を有効化 |
| `--skip-router-restart` | Skip restarting the route server after the operation |

## バックアップの一覧表示

ストレージの場所にある利用可能なバックアップを表示します：

```bash
rdc repo backup list --from my-storage -m server-1
```

## 一括同期

すべてのリポジトリを一度に送信または取得します：

### すべてをストレージに送信

```bash
rdc repo push --to my-storage -m server-1
```

### すべてをストレージから取得

```bash
rdc repo pull --from my-storage -m server-1
```

| オプション | 説明 |
|-----------|------|
| `--to <storage>` | ターゲットストレージ（送信方向） |
| `--from <storage>` | ソースストレージ（取得方向） |
| `--repo <name>` | 特定のリポジトリを同期（繰り返し指定可能） |
| `--override` | 既存のバックアップを上書き |
| `--debug` | 詳細出力を有効化 |
| `--skip-router-restart` | Skip restarting the route server after the operation |

## スケジュールバックアップ

リモートマシン上でsystemdタイマーとして実行されるcronスケジュールでバックアップを自動化します。

### スケジュールの設定

```bash
rdc config backup-strategy set --destination my-storage --cron "0 2 * * *" --enable
```

異なるスケジュールで複数の宛先を構成できます：

```bash
rdc config backup-strategy set --destination my-s3 --cron "0 2 * * *" --enable
rdc config backup-strategy set --destination azure-backup --cron "0 6 * * *" --enable
```

| オプション | 説明 |
|-----------|------|
| `--destination <storage>` | バックアップ先（宛先ごとに設定可能） |
| `--cron <expression>` | cron式（例：`"0 2 * * *"` で毎日午前2時） |
| `--enable` | スケジュールを有効化 |
| `--disable` | スケジュールを無効化 |

### スケジュールをマシンに送信

スケジュール構成をsystemdタイマーとしてマシンにデプロイします：

```bash
rdc machine backup schedule -m server-1
```

### スケジュールの表示

```bash
rdc config backup-strategy show
```

## ストレージの参照

ストレージの場所の内容を参照します：

```bash
rdc storage browse --name my-storage
```

## ベストプラクティス

- **毎日のバックアップをスケジュール**し、少なくとも1つのストレージプロバイダに保存する
- **復元テスト**を定期的に行い、バックアップの整合性を検証する
- **複数のストレージプロバイダを使用**し、重要なデータを保護する（例：S3 + B2）
- **認証情報を安全に保管** -- バックアップは暗号化されていますが、復元にはLUKS認証情報が必要です