【2026年版】VPSのバックアップを自動化する方法:もしもAIの学習データが消えた時の備え
筆者の結論(最初に読んでください)
はっきり書いておきます。バックアップを「いつかやろう」と思ったまま運用してる人は、一度消えてから後悔します。自分も経験済みです。
優先順位をつけるとこうなります。
- まず rsync でローカルバックアップだけでも今日設定する(30分あれば終わる)
- スナップショットは「大型変更の直前だけ」で十分(毎回は料金がかさむ)
- クラウド転送(rclone)は週1でいい(毎日やると転送コストが積み上がる)
「全部完璧にやろう」と思うと何もやらないまま終わります。まず①だけ動かすのが正解です。
VPSにAIツールを構築して運用していると、ファインチューニング済みモデル・学習データ・設定ファイルといった再現が難しいデータが蓄積していきます。ハードウェア障害、操作ミスによる削除、ランサムウェアなどのリスクは常に存在します。
この記事では、rsync・rcloneを使ったバックアップスクリプトとcronによる自動化、さらに各VPSサービスのスナップショット機能を組み合わせた多層防御を解説します。
バックアップ戦略の3層構造
| レイヤー | 方法 | 頻度 | コスト |
|---|---|---|---|
| ①VPS内バックアップ | rsync(別ディレクトリ) | 毎時 | 無料(ディスク消費) |
| ②別サーバー/NASへ転送 | rsync over SSH | 日次 | サーバー代のみ |
| ③クラウドストレージ | rclone(S3/GCS/Backblaze) | 週次 | ストレージ従量課金 |
| ④スナップショット | VPS提供機能 | 変更前に手動 | プラン依存 |
3-2-1ルール(3コピー・2種類のメディア・1つはオフサイト)を意識するのが鉄則です。
正直に言うと、②の「別サーバーへ転送」はハードルが上がるので最初はスキップしてOKです。 ①と③だけでも3-2-1に近い構成は作れます。②はNASを持ってる人か、すでに別のVPSを契約してる人だけ考えてください。
rsyncで同一サーバー内バックアップ
まずはシンプルなrsyncによる同一サーバー内バックアップから始めましょう。これが一番コスパがいい。 追加費用ゼロで、設定も一番シンプルです。
#!/bin/bash
# /usr/local/bin/backup_ai_data.sh
# 設定
SOURCE_DIR="/home/aiuser/models"
BACKUP_DIR="/backup/ai_models"
DATE=$(date +%Y%m%d_%H%M%S)
LOG_FILE="/var/log/backup_ai.log"
# バックアップ実行
rsync -avz --delete \
--exclude="*.tmp" \
--exclude="__pycache__/" \
"${SOURCE_DIR}/" \
"${BACKUP_DIR}/latest/" \
>> "${LOG_FILE}" 2>&1
# 日次でスナップショット的なコピーを作成
if [ "$(date +%H)" -eq "02" ]; then
cp -al "${BACKUP_DIR}/latest" "${BACKUP_DIR}/${DATE}"
# 30日より古いバックアップを削除
find "${BACKUP_DIR}" -maxdepth 1 -type d -mtime +30 -exec rm -rf {} \;
fi
echo "$(date): バックアップ完了" >> "${LOG_FILE}"
# スクリプトに実行権限を付与
sudo chmod +x /usr/local/bin/backup_ai_data.sh
# 動作確認
sudo /usr/local/bin/backup_ai_data.sh
cp -al のところ、ハードリンクを使っているのがポイントです。30日分のバックアップを作るように見えて、変更のないファイルはディスクを消費しません。AIモデルみたいに「サイズが大きいけど変更は少ない」データとの相性が特にいい。
rcloneでクラウドストレージに自動転送
rcloneはS3・Google Cloud Storage・Backblaze B2・Dropboxなど40以上のクラウドストレージに対応した転送ツールです。
自分がおすすめするのはBackblaze B2です。 理由は単純で安いから。ストレージが$0.006/GB/月で、AWSのS3($0.023/GB/月)と比べて約4分の1。モデルファイルは数GB〜数十GBになりがちなので、この差は無視できません。
# rcloneのインストール
curl https://rclone.org/install.sh | sudo bash
# 設定(インタラクティブに各クラウドを設定)
rclone config
# → "n" で新規リモート追加
# → "s3"などプロバイダを選択してアクセスキーを設定
# 転送テスト
rclone ls mybackup:my-vps-backup-bucket
# バックアップスクリプトにrclone転送を追加
rclone sync /backup/ai_models mybackup:my-vps-backup-bucket/ai_models \
--transfers 4 \
--checkers 8 \
--contimeout 60s \
--timeout 300s \
--log-file /var/log/rclone_backup.log
コスト感を具体的に書いておきます。
- モデルデータ20GBをBackblaze B2に保存 → 月約$0.12(約18円)
- AWSのS3だと月約$0.46(約70円)
- どちらも大した金額じゃないけど、「安い方でいい理由がない」ならB2でいいと思います
cronで定期実行を設定する
ここが「設定したら終わり」にできるかどうかの肝です。cron を動かせば、あとは何もしなくてもバックアップが走り続けます。
# crontabを編集
crontab -e
# 以下を追記
# 毎時0分にrsyncバックアップ
0 * * * * /usr/local/bin/backup_ai_data.sh
# 毎日午前3時にrcloneでクラウド転送
0 3 * * * rclone sync /backup/ai_models mybackup:my-vps-backup-bucket/ai_models --log-file /var/log/rclone_backup.log
# 毎週日曜午前4時にフルバックアップ
0 4 * * 0 tar -czf /backup/full_$(date +\%Y\%m\%d).tar.gz /home/aiuser/ 2>/dev/null
# cronの実行ログ確認
grep CRON /var/log/syslog | tail -20
# バックアップログの確認
tail -f /var/log/backup_ai.log
設定後にやること、一つだけ言います。 翌朝ログを確認してください。バックアップ完了 の文字列が出てれば動いてます。これをスキップする人が多いんですが、「設定したつもりが動いてなかった」は普通にあります。最初の1回だけ確認すればあとは安心して忘れられます。
各VPSサービスのスナップショット機能比較
スナップショットはVPS全体を特定時点の状態に戻せる機能です。大型アップデートや設定変更前の「保険」として使います。
| サービス | スナップショット | 自動バックアップ | 保存数 | 料金 |
|---|---|---|---|---|
| XServer VPS | ○ | ○(オプション) | 3〜10個 | 月額追加料金あり |
| KAGOYA CLOUD VPS | ○ | ○(定期バックアップ) | 5個まで | プランに含む場合あり |
| ConoHa VPS | ○ | ○(バックアップオプション) | 3世代 | 月額+220円〜 |
| さくらのVPS | ○ | △(手動スナップショット) | 1個 | 別途費用 |
自分の結論としては、スナップショットを「毎日自動取得」するのは費用対効果が微妙です。 rsyncのローカルバックアップでほぼ同じことができるし、スナップショットはVPS全体(OSごと)を丸ごと保存するのでストレージを大量に食います。
使い方としては「Pythonのバージョン上げる前」「新しいライブラリを大量に入れる前」みたいな、「失敗したらOS再インストールが面倒そうな変更の直前だけ手動で撮る」 が一番コスパがいいです。
KAGOYAの場合、定期バックアップがプランに含まれているケースがあるので、その点はXServerより使いやすい印象があります。Claude Code 用途でKAGOYAを選ぶ理由がもう一個増える感じです。
復元テストを忘れずに
バックアップは「復元できて初めて意味がある」ものです。定期的に復元テストを行いましょう。
# rsyncバックアップからの復元確認
rsync -avz /backup/ai_models/latest/ /tmp/restore_test/
# ファイル数・サイズの一致確認
du -sh /home/aiuser/models/
du -sh /backup/ai_models/latest/
# rcloneで特定ファイルのみ取得
rclone copy mybackup:my-vps-backup-bucket/ai_models/model.bin /tmp/restore_test/
これ、本当にやってください。 「バックアップは取ってあります」と言いながら復元を試したことがない人、けっこういます。自分も最初そうでした。いざというときに「あれ、復元できない」となるのが一番最悪なシナリオです。
月1回、/tmp/restore_test/ にコピーしてファイルが開けることだけ確認する、それだけでいいです。
まとめ:あなたの使い方で選ぶ
「全部やらなきゃ」じゃなくて、今の自分の状況に合った構成から始めればいい。判断テーブルを置いておきます。
| あなたの状況 | 今すぐやること | 後回しでいいこと |
|---|---|---|
| VPSを立てたばかり | rsyncのローカルバックアップをcronで設定 | rclone、スナップショット |
| データが増えてきた | rclone + Backblaze B2を週1で追加 | 毎日のクラウド転送 |
| 大型変更を予定している | 変更前にスナップショットを手動取得 | 自動スナップショット(コスト高) |
| 「消えたら再現できない」データがある | 上記3つ全部 + 月1の復元テスト | 特になし |
| 「まあ消えても再構築できる」データ | rsyncのローカルのみで十分 | クラウド転送、スナップショット |
AIデータを守るバックアップ自動化のポイントをまとめます。
- rsyncで毎時ローカルバックアップ、差分転送で効率化
- rcloneで週次クラウドストレージ転送(Backblaze B2が安くておすすめ)
- cronで全バックアップを自動化、翌朝ログを1回だけ確認する
- VPSスナップショットは大型変更前の保険として手動活用、毎日自動は費用対効果が微妙
- 定期的な復元テスト、月1回だけでいいのでやる
「完璧な構成にしてから運用しよう」と思うと永遠に始まりません。rsyncのcron設定だけ今日やる、それが最優先です。 これが最終回答じゃないんだから、まずは動かしてみてください。
