AI

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

機能比較表

比較項目ResticDuplicatiBorgBackup
クラウドバックエンド✅ 20+✅ 多数SSH/SFTP中心
GUI❌ CLI✅ WebUI❌ CLI
重複排除率✅ 最高
速度✅ Go・高速
GitHub Stars26k+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_backupafter_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クラウド対応・速度重視・開発者向けならResticWebGUIで非エンジニアが設定・管理・スケジュール設定ならDuplicatiSSH/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

関連外部リソース

他の記事も読む

Let's Build Together

OSS導入、自社だけで悩まない。

ツール選定から構築・運用・AI活用まで、オープンソースラボ運営元のClasslessが伴走します。初回のご相談は無料です。