v0.12.6: fix rsync destination nesting and exclude app-internal DB dumps
Two rsync bugs found during Immich cross-drive backup testing: Fix 3: Simplified destination path structure in runRsyncBackup. Old SplitN logic kept "storage/immich" as a subpath, creating redundant nesting: backups/rsync/immich/storage/immich/<data>. New logic: single mount → rsync directly into the stack folder; multiple mounts → use each mount's leaf dir name as subfolder (disambiguated by _N suffix). Fix 4: Exclude app-internal DB dump files from rsync. Apps like Immich store periodic pg_dumps in <data>/backups/*.sql.gz. The controller already handles DB backups via pg_dump — copying them again wastes space. Added --exclude backups/*.sql.gz/sql/dump to the rsync command. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -4,7 +4,7 @@
|
||||
|
||||
A single, lightweight Go container that replaces Portainer + scattered systemd scripts with a unified, Hungarian-language web dashboard for managing Docker Compose stacks, backups, storage, monitoring, and notifications on customer hardware.
|
||||
|
||||
**Current version: v0.12.5**
|
||||
**Current version: v0.12.6**
|
||||
|
||||
---
|
||||
|
||||
@@ -196,6 +196,10 @@ Implements the 3-2-1 backup rule by copying data to a different physical drive.
|
||||
- External mount: block if <100 MB free; warn/block at 90%/95% usage
|
||||
- System drive (same block device as `/`): require ≥10 GB free AND <90% usage to protect OS stability; allowed with a logged warning (no hard block for non-mount-point destinations)
|
||||
- Web UI `CheckBackupDestination` matches runner thresholds — no surprise divergence between UI and actual enforcement
|
||||
- **Rsync destination layout** (`runRsyncBackup`):
|
||||
- Single mount: data goes directly into `backups/rsync/<app>/` (no extra nesting)
|
||||
- Multiple mounts: each gets a `backups/rsync/<app>/<leaf>/` subfolder named after the mount's base directory; duplicate leaf names disambiguated with `_N` suffix
|
||||
- DB dump files excluded: `--exclude backups/*.sql.gz`, `--exclude backups/*.sql`, `--exclude backups/*.dump` — avoids duplicating data already managed by the pg_dump layer
|
||||
- Safety guards: destination ≠ source, path-overlap check, writable check
|
||||
- **Chained execution**: cross-drive runs immediately after nightly restic backup (daily apps every night, weekly apps on Sundays) for DB/file consistency
|
||||
- Per-app concurrency lock prevents overlapping runs
|
||||
|
||||
Reference in New Issue
Block a user