※AI関連作業のメモ ディレクトリやファイル名はダミー
ChatGPT Plus 設定サーバ 作業・調査メモ
📋 1. バックアップから特定ファイルを除外して良い理由
OpenClaw(バージョン 2026.6.8 時点)において、以下のファイルを除外しても問題ない理由は「再生成可能であること」と「データの整合性を守るため」です。
-
node_modules/ ロックファイル(package-lock.json等): パッケージは後から再インストール(再生成)可能。ファイル数が膨大でバックアップ肥大化の原因になるため除外します。 -
logs/*.log: アプリの永続データではなく単なる運用履歴。サイズが大きくなりやすく、実行中に常に書き込まれるため除外が適切です。 -
cache/tmp/temp/*.tmp: 一時データのため自動で再生成されます。古いキャッシュを復元すると逆に不具合の原因になることもあります。 -
SQLiteの
*-wal/*-shm: データベース(WALモード)の補助・一時差分ファイル。実行中に激しく変化するため、これらを直接コピーするとデータの整合性を崩すリスクがあります。
⚠️ 2. 稼働中の直接コピー(tar)における破損リスクの検証
「OpenClawが起動してDBに書き込みを行っている最中」に、tarコマンドでSQLiteファイルを直接コピーする運用について検証が行われ、明確な破損リスク(実在)が証明されました。
-
検証結果(各80回テスト):
-
DB本体のみコピー: 80回中39回がデータ破損(
malformed)、5回が不整合。 -
DB本体+WAL+SHMを丸ごとコピー: 80回中5回で不整合を検出。
-
-
結論: たとえ事前に
wal_checkpoint(TRUNCATE)を行ってWALの差分を本体に寄せたとしても、tarでのコピー中にOpenClawが書き込みを行うと、バックアップされたデータベースは高確率で破損します。
🛠️ 3. 解決策:Online Backup API(ホットバックアップ)への移行
OpenClawを停止させずに安全にバックアップを取るため、スクリプトの仕様を「直接コピー」から「SQLiteのOnline Backup API(ホットバックアップ)」を利用する方式へと修正・実行しました。
-
新方式の流れ:
-
通常ファイルは
rsyncで一時ステージング領域へコピー。 -
.sqlite/.dbファイルは直接コピーせず、Pythonのsqlite3.Connection.backup()を用いて、稼働中であっても整合性が保たれたスナップショットを作成。 -
作成直後に
PRAGMA integrity_check;を実行して正常性を確認。 -
*-wal/*-shmを除外した状態で、安全な複製元をtar+gpg(暗号化)で保存。
-
-
手動実行による検証結果: アーカイブ内の全7個のSQLiteで
integrity_check: okを確認。不要な一時ファイルや平文データは残らず、世代管理(最古の1世代の剪定)まで正常に動作することを確認済みです。
