OSSバックアップ比較:Restic vs Duplicati vs BorgBackup でデータを保護する
オープンソースラボ編集部 ・ 2026年6月13日
OSSバックアップ比較:Restic vs Duplicati vs BorgBackup でデータを保護する
クラウドストレージ・VPSの障害・ランサムウェアからデータを守るには、増分バックアップ・重複排除・暗号化・バージョン管理を自動化したバックアップソリューションが必須です。Restic(Go製・高速・暗号化・クラウド対応)・Duplicati(C#製・GUIダッシュボード・非エンジニア向け)・BorgBackup(Python/C製・重複排除最強・SSH対応)の3つが2026年のOSSバックアップツール主要選択肢です。
OSSバックアップツールを使う理由
- コスト削減: Backblaze B2($0.006/GB/月)+Restic→バックアップSaaSより70%安価
- 暗号化: AES-256でバックアップデータを暗号化→S3/B2に保存してもデータ秘匿
- 重複排除: 同一ファイルを2回バックアップしない→ストレージコスト削減
- バージョン管理: 7日前・30日前・1年前のスナップショットから個別ファイルをリストア
主要ツールの概要
Restic
2015年公開(Alexander Neumann)、Go製のOSSです。GitHubスター26k+。Go製シングルバイナリで動作するバックアップツールで、S3・B2・SFTP・Azure・GCS等20+のバックエンドに対応しています。全バックアップが自動的にAES-256で暗号化され、重複排除(コンテンツアドレス指定型チャンクing)で効率的に保存します。
# Restic: 初期設定からS3バックアップ・リストアまで
# 環境変数設定
export RESTIC_PASSWORD="your-strong-backup-password"
export AWS_ACCESS_KEY_ID="your-key"
export AWS_SECRET_ACCESS_KEY="your-secret"
# リポジトリ初期化(S3バケット)
restic -r s3:s3.amazonaws.com/my-backup-bucket init
# バックアップ実行(増分・重複排除・暗号化)
restic -r s3:s3.amazonaws.com/my-backup-bucket backup /var/data /etc /home
# スナップショット一覧
restic -r s3:s3.amazonaws.com/my-backup-bucket snapshots
# 特定ファイルをリストア
restic -r s3:s3.amazonaws.com/my-backup-bucket restore latest --target /tmp/restore --include /var/data/important.db
# 古いスナップショットの削除ポリシー
restic -r s3:s3.amazonaws.com/my-backup-bucket forget --keep-daily 7 --keep-weekly 4 --keep-monthly 6 --keep-yearly 1 --prune # 実際にデータを削除
# リポジトリの整合性チェック
restic -r s3:s3.amazonaws.com/my-backup-bucket check
# Python: Resticバックアップをcronから自動実行・Slackに通知
import subprocess
import requests
import os
from datetime import datetime
SLACK_WEBHOOK = os.environ.get('SLACK_WEBHOOK_URL')
RESTIC_PASS = os.environ.get('RESTIC_PASSWORD')
RESTIC_REPO = 's3:s3.amazonaws.com/my-backup-bucket'
BACKUP_DIRS = ['/var/data', '/etc', '/home']
def run_backup() -> dict:
'''Resticバックアップを実行して結果を返す'''
env = {**os.environ, 'RESTIC_PASSWORD': RESTIC_PASS}
result = subprocess.run(
['restic', '-r', RESTIC_REPO, 'backup', '--json', *BACKUP_DIRS],
capture_output=True, text=True, env=env,
)
import json
output = [json.loads(line) for line in result.stdout.strip().split('
') if line]
summary = next((o for o in output if o.get('message_type') == 'summary'), {})
return {
'success': result.returncode == 0,
'files_new': summary.get('files_new', 0),
'files_changed': summary.get('files_changed', 0),
'data_added': summary.get('data_added', 0),
'snapshot_id': summary.get('snapshot_id', ''),
}
def notify_slack(result: dict) -> None:
'''バックアップ結果をSlackに通知'''
status = ':white_check_mark: 成功' if result['success'] else ':x: 失敗'
text = (
f'*Resticバックアップ {status}*
'
f'新規: {result["files_new"]}件 | '
f'変更: {result["files_changed"]}件 | '
f'追加データ: {result["data_added"] / 1024 / 1024:.1f}MB
'
f'スナップショット: `{result["snapshot_id"][:8]}`'
)
requests.post(SLACK_WEBHOOK, json={'text': text})
if __name__ == '__main__':
result = run_backup()
notify_slack(result)
Duplicati
2009年公開、C#製のOSSです。GitHubスター11k+。WebブラウザGUIダッシュボードとスケジューラーを内蔵したOSSバックアップツールで、非エンジニアでも設定可能です。暗号化・増分バックアップ・S3/SFTP/FTP/Dropbox/Google Drive対応・電子メール通知をGUIから設定できます。
# docker-compose.yml: Duplicati
version: "3.8"
services:
duplicati:
image: lscr.io/linuxserver/duplicati:latest
restart: unless-stopped
ports:
- "8200:8200"
environment:
PUID: 0
PGID: 0
TZ: Asia/Tokyo
CLI_ARGS: "--webservice-password=${DUPLICATI_WEB_PASS}"
volumes:
- duplicati_config:/config
- /var/data:/source/data:ro # バックアップ対象(読み取り専用マウント)
- /etc:/source/etc:ro
- /home:/source/home:ro
volumes:
duplicati_config:
BorgBackup
2010年公開(Borg Collective)、Python/C製のOSSです。GitHubスター11k+。最高レベルの重複排除アルゴリズム(可変長チャンキング)とSSH経由のリモートバックアップが特徴のOSSバックアップツールで、borgserverを使ったプルバックアップサーバーを構築してすべてのサーバーのバックアップを一元管理できます。
# BorgBackup: SSH経由でリモートバックアップサーバーに保存
# バックアップサーバー側でリポジトリを初期化
borg init --encryption=repokey-blake2 user@backup-server:~/repo-myapp
# バックアップ実行(圧縮+暗号化+重複排除)
borg create --compression lz4 --exclude-caches --exclude '/var/data/tmp' user@backup-server:~/repo-myapp::'{hostname}-{now}' /var/data /etc
# スナップショット一覧
borg list user@backup-server:~/repo-myapp
# マウントして参照(FUSE)
borg mount user@backup-server:~/repo-myapp::snapshot-name /mnt/restore
# 古いスナップショット削除(保持ポリシー)
borg prune --keep-daily 7 --keep-weekly 4 --keep-monthly 6 user@backup-server:~/repo-myapp
# 整合性チェック
borg check user@backup-server:~/repo-myapp
機能比較表
| 比較項目 | Restic | Duplicati | BorgBackup |
|---|---|---|---|
| クラウドバックエンド | ✅ 20+ | ✅ 多数 | SSH/SFTP中心 |
| GUI | ❌ CLI | ✅ WebUI | ❌ CLI |
| 重複排除率 | 高 | 中 | ✅ 最高 |
| 速度 | ✅ Go・高速 | 中 | 中 |
| GitHub Stars | 26k+ | 11k+ | 11k+ |
バックアップソリューションはDevOpsカテゴリ/categories/devopsのCI/CD・Kubernetes管理と組み合わせてデータベースのスナップショット・Kubernetesのetcdバックアップ・アプリケーションデータの定期保護を自動化します。セキュリティカテゴリ/categories/securityのゼロトラスト・シークレット管理と組み合わせてバックアップ暗号化キー(Restic Password)をVault/Infisicalで安全に管理して、バックアップ体制のセキュリティを強化します。
FAQ
Q. Resticをsystemdタイマーでcron代替として毎日夜間に自動実行するには?
A. systemd serviceとtimerユニットでResticバックアップを毎日自動実行します。設定: ①/etc/systemd/system/restic-backup.serviceを作成→[Unit] Description=Restic Backup・[Service] Type=oneshot ExecStart=/usr/bin/restic -r s3:... backup /var/data Environment=RESTIC_PASSWORD_FILE=/etc/restic/password②/etc/systemd/system/restic-backup.timer→[Timer] OnCalendar=*-*-* 02:00:00 Persistent=true(毎日AM2時)③systemctl enable --now restic-backup.timer。パスワードファイル: /etc/restic/passwordにパスワードを記載→chmod 600 /etc/restic/passwordでセキュア設定→resticの--password-fileオプションで参照。ログ確認: journalctl -u restic-backup.serviceでバックアップログを確認。
Q. BorgBackupでサーバー10台のバックアップを1台の専用サーバーで一元管理するには?
A. borgserverをDockerで起動してプッシュバックアップを受け付けるか、borgmatic+pullバックアップで一元管理します。borgserverアプローチ: docker run -d -p 2222:22 -v ~/borg-repos:/repositories nold360/borgserver→各クライアントのSSH公開鍵をauthorized_keysに追加→クライアントからborg create user@borgserver:2222:/repositories/client1::backup-name /dataでPush。borgmatic一元管理: borgmaticの設定ファイル(/etc/borgmatic/config.yaml)にリポジトリ・ソース・保持ポリシーを記述→borgmatic --statsで全サーバー統計付きバックアップ実行。モニタリング: borgmaticのHooks機能でbefore_backup・after_backupにSlack通知スクリプトを設定→全10台のバックアップ成否を一覧でSlackに送信。
Q. Duplicatiでバックアップが壊れた場合の検証・修復方法は?
A. DuplicatiのGUIの「Database repair」とコマンドラインのrepairコマンドで破損したバックアップデータベースを修復します。GUIから: ①Duplicati→バックアップ設定→詳細→「Databaseを再構築」→ローカルキャッシュDBをバックアップデータから再構築(数分〜数時間)。CLIから: duplicati-cli repair storage-url --dbpath=/config/backup.sqlite --passphrase="パスワード"。整合性テスト: GUIの「バックアップを確認」→バックアップファイルのハッシュ値を検証→破損ファイルを特定。定期的な確認: cronで月次のduplicati-cli test storage-url --samples-count=50を実行してランダムサンプリングで整合性をチェック→問題を早期発見。
Q. Restic・Duplicati・BorgBackupのどれを選ぶべきですか?
A. CLI自動化・S3/B2クラウド対応・速度重視・開発者向けならRestic、WebGUIで非エンジニアが設定・管理・スケジュール設定ならDuplicati、SSH/SFTP・最高の重複排除率・サーバー間バックアップ・オールドスクールLinux管理者向けならBorgBackupが向いています。Restic優位: ①Goシングルバイナリ→インストール簡単②S3・B2・Azure・GCS・Rclone経由で20+バックエンド対応③--jsonオプションでJSON出力→Pythonスクリプトとの連携が容易④並列バックアップとチェックサム検証が速い⑤Restic REST Server(セルフホスト可能)。Duplicati優位: ①ブラウザGUI→ITリテラシーの低いスタッフでも設定可能②Dropbox・Google Drive・OneDrive等のコンシューマークラウドに対応③スケジューラー・メール通知をGUIで設定。BorgBackup優位: ①可変長チャンクングによる最高の重複排除率→同一内容の多数ファイルでストレージを最大節約②SSH経由のプッシュ・プルバックアップ→ネットワーク経由のオフサイトバックアップが容易③FUSE マウントでバックアップをファイルシステムとして参照→個別ファイルの閲覧・コピーが簡単。
まとめ
| ユースケース | 推奨ツール |
|---|---|
| S3/B2クラウド・CLI自動化・速度重視 | Restic |
| WebGUI・非エンジニア・スケジュール管理 | Duplicati |
| SSH・最高重複排除・サーバー間バックアップ | BorgBackup |