diff --git a/PROJECT.md b/PROJECT.md index 6d50506..481e616 100644 --- a/PROJECT.md +++ b/PROJECT.md @@ -3,7 +3,7 @@ title: UnifyDrive2NAS の現状 tags: - homelab - UnifyDrive2NAS -status: DAG 定義・配置手順作成済み +status: 本番運用開始済み --- # UnifyDrive2NAS の現状 @@ -15,7 +15,8 @@ status: DAG 定義・配置手順作成済み - Python 3.8 の標準ライブラリと同梱した `exifread` 3.5.1 だけで動くコピーコアを実装済み - コピー済み一覧、初期化、ドライラン、二重起動防止、マウント確認を含む -- Dagu の DAG 定義と配置手順を作成済み。NAS と Dagu VM への実配置、初期化、定期実行の開始は未実施 +- NAS へのスクリプト配置と 6,786 件の初期化が完了済み +- Dagu VM へ DAG を配置済み。毎日 04:00(Asia/Tokyo)の定期実行が有効 ## 目的 @@ -317,6 +318,21 @@ python3 unifydrive2nas.py --dry-run [実機] 2026-10-12、NAS の Python 3.8.15 で単体テスト 37 件がすべて成功した。実マウントに対する `--dry-run` は、対象 6,786 件・失敗 0 件、日付の出どころは exif 6,081 件・apple 119 件・mvhd 14 件・mtime 572 件で、所要時間は約 3 分 47 秒だった。DB には `/tmp` の使い捨てパスを指定した。 +### 本番デプロイ + +[実機] 2026-10-12、NAS と Dagu VM への本番デプロイを実施した。 + +- NAS の `/volume1/homes/kazu634/bin/unifydrive2nas/` へ `unifydrive2nas.py` と `vendor/` を配置し、ローカルの正本と SHA-256 が一致することを確認した +- 配置後の `--dry-run` は終了コード 0、対象 6,786 件、失敗 0 件だった +- `--init` は 18:19:51 に開始し、19:41 に終了した(約 82 分)。終了コード 0、対象 6,786 件、新規 6,786 件、失敗 0 件だった +- DB `~/.local/state/unifydrive2nas/copied.sqlite3` は約 1.8 MB。`action=initialized` かつ `date_source=init` の記録が 6,786 行ある +- Dagu VM では `DAGU_HOME=/var/lib/dagu` を指定した検証と dry-run がともに終了コード 0 となり、誤った既定パス `~/.config/dagu` は作成されなかった +- `/tmp/unifydrive2nas.yaml` からの手動実行は 10 秒で `Succeeded` となった。対象 6,786 件、新規 0 件、コピー 0 件、同一スキップ 0 件、連番 0 件、失敗 0 件だった +- DAG を `/var/lib/dagu/dags/unifydrive2nas.yaml` へ配置した。SHA-256 は `4466e9a2…ac63` で正本と一致し、`/tmp` の一時 YAML は削除済み。毎日 04:00 のスケジュールが有効になっている + +> [!note] Dagu の SSH 終了時の警告 +> 手動実行のログに `SSH session close error err=EOF` が 1 件出たが、ステップと DAG はともに `Succeeded` で終了した。 + ### コピー先の現状 [実機] 2026-10-12 確認。 @@ -337,8 +353,8 @@ python3 unifydrive2nas.py --dry-run ## 課題 -- NAS と Dagu VM へ配置し、`--init` と DAG の検証・手動実行を行う -- Gitea に非公開リポジトリ `kazu634/UnifyDrive2NAS` を作成する +- `--init` は NAS の btrfs 上で約 82 分かかった。1 ファイルごとの SQLite commit が遅く、実行中のプロセスは D 状態、処理速度は約 1.4 件/秒だった。再実行可能なため現行運用に支障はないが、1 トランザクション化または一定件数ごとの commit が改善候補。改善の実施は未着手・未決定 +- Gitea に非公開リポジトリ `kazu634/UnifyDrive2NAS` を作成する(ユーザーの作成待ち。push 未実施) - マウントが NAS 再起動後に自動復旧するか確認する([[#未決事項]]) ## 経緯 @@ -350,6 +366,7 @@ python3 unifydrive2nas.py --dry-run - 2026-10-12: Python のコピーコア、SQLite のコピー済み一覧、安全装置、単体テストを実装 - 2026-10-12: Apple 作成日時の読み取りを、version/flags の無い QuickTime 形式と FullBox 形式の両方の `meta` に対応 - 2026-10-12: 毎日 04:00 に NAS 上のコピー処理を呼ぶ Dagu DAG と手動配置手順を作成 +- 2026-10-12: NAS へコピー処理を配置し、6,786 件を初期化。Dagu の検証・手動実行後、毎日 04:00 のスケジュールを有効化 ## 確かめ方 @@ -387,3 +404,13 @@ Dagu VM では、スケジュールを有効にする前に `/tmp` の YAML を DAGU_HOME=/var/lib/dagu /usr/local/bin/dagu validate /tmp/unifydrive2nas.yaml DAGU_HOME=/var/lib/dagu /usr/local/bin/dagu dry /tmp/unifydrive2nas.yaml ``` + +本番デプロイ後は、次の状態を確認済み([実機] 2026-10-12)。 + +| 確認対象 | 結果 | +|---|---| +| NAS 配置物 | ローカルの正本と SHA-256 が一致 | +| 本番 DB | `initialized` / `init` が 6,786 行 | +| Dagu の手動実行 | `Succeeded`、新規 0 件、失敗 0 件 | +| DAG 配置物 | 正本と SHA-256 が一致し、一時 YAML は削除済み | +| 定期実行 | 毎日 04:00(Asia/Tokyo)が有効 |