PROJECT.md に本番デプロイの結果を記録

This commit is contained in:
2026-10-12 19:43:36 +09:00
parent ba145d801a
commit 8e4735b5a1
+31 -4
View File
@@ -3,7 +3,7 @@ title: UnifyDrive2NAS の現状
tags: tags:
- homelab - homelab
- UnifyDrive2NAS - UnifyDrive2NAS
status: DAG 定義・配置手順作成済み status: 本番運用開始済み
--- ---
# UnifyDrive2NAS の現状 # UnifyDrive2NAS の現状
@@ -15,7 +15,8 @@ status: DAG 定義・配置手順作成済み
- Python 3.8 の標準ライブラリと同梱した `exifread` 3.5.1 だけで動くコピーコアを実装済み - 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 の 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 確認。 [実機] 2026-10-12 確認。
@@ -337,8 +353,8 @@ python3 unifydrive2nas.py --dry-run
## 課題 ## 課題
- NAS と Dagu VM へ配置し、`--init` と DAG の検証・手動実行を行う - `--init` は NAS の btrfs 上で約 82 分かかった。1 ファイルごとの SQLite commit が遅く、実行中のプロセスは D 状態、処理速度は約 1.4 件/秒だった。再実行可能なため現行運用に支障はないが、1 トランザクション化または一定件数ごとの commit が改善候補。改善の実施は未着手・未決定
- Gitea に非公開リポジトリ `kazu634/UnifyDrive2NAS` を作成する - Gitea に非公開リポジトリ `kazu634/UnifyDrive2NAS` を作成する(ユーザーの作成待ち。push 未実施)
- マウントが NAS 再起動後に自動復旧するか確認する([[#未決事項]]) - マウントが NAS 再起動後に自動復旧するか確認する([[#未決事項]])
## 経緯 ## 経緯
@@ -350,6 +366,7 @@ python3 unifydrive2nas.py --dry-run
- 2026-10-12: Python のコピーコア、SQLite のコピー済み一覧、安全装置、単体テストを実装 - 2026-10-12: Python のコピーコア、SQLite のコピー済み一覧、安全装置、単体テストを実装
- 2026-10-12: Apple 作成日時の読み取りを、version/flags の無い QuickTime 形式と FullBox 形式の両方の `meta` に対応 - 2026-10-12: Apple 作成日時の読み取りを、version/flags の無い QuickTime 形式と FullBox 形式の両方の `meta` に対応
- 2026-10-12: 毎日 04:00 に NAS 上のコピー処理を呼ぶ Dagu DAG と手動配置手順を作成 - 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 validate /tmp/unifydrive2nas.yaml
DAGU_HOME=/var/lib/dagu /usr/local/bin/dagu dry /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)が有効 |