v0.14.0: Per-drive backup architecture + storage path overhaul

Major refactor of backup and storage paths:

- Per-drive restic repos at <drive>/backups/primary/restic/
- Per-app DB dumps at <drive>/backups/primary/<app>/db-dumps/
- Remove global BackupDir, DBDumpDir, ResticRepo config fields
- Add SystemDataPath config (fallback for apps without HDD)
- New backup/paths.go with pure path computation helpers
- Add GetStackHDDPath to StackDataProvider interface
- Restic methods now accept repoPath as parameter
- Cross-drive backup uses new secondary path structure
- Rename storage/ to appdata/ in scripts and compose templates
- Update protected HDD paths (storage → appdata + backups)
- Simplify backup UI (remove global path displays)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-02-18 18:47:39 +01:00
parent 05f6095e6b
commit 563c9515d9
15 changed files with 937 additions and 570 deletions
+9 -17
View File
@@ -61,11 +61,8 @@ declare -a MEDIA_DIRS=(
"media/books"
)
declare -a STORAGE_DIRS=(
"storage/immich"
"storage/nextcloud"
"storage/backups/local"
"storage/backups/appdata"
declare -a BACKUP_DIRS=(
"backups"
)
declare -a USER_DIRS=(
@@ -170,13 +167,8 @@ FOLDER STRUCTURE CREATED:
│ ├── series/
│ ├── music/
│ └── books/
├── storage/
│ ├── immich/
│ ├── nextcloud/
│ └── backups/
│ ├── local/
│ └── appdata/
└── appdata/
├── appdata/ (app data — created per-app on deploy)
└── backups/ (managed by felhom-controller)
SAFETY:
- Drives with existing data require typing "YES" to format
@@ -853,10 +845,10 @@ create_folder_structure() {
for dir in "${MEDIA_DIRS[@]}"; do
echo " ├── $dir/"
done
for dir in "${STORAGE_DIRS[@]}"; do
for dir in "${APPDATA_DIRS[@]}"; do
echo " ├── $dir/"
done
for dir in "${APPDATA_DIRS[@]}"; do
for dir in "${BACKUP_DIRS[@]}"; do
echo " └── $dir/"
done
@@ -876,7 +868,7 @@ create_folder_structure() {
return 0
fi
for dir in "${USER_DIRS[@]}" "${MEDIA_DIRS[@]}" "${STORAGE_DIRS[@]}" "${APPDATA_DIRS[@]}"; do
for dir in "${USER_DIRS[@]}" "${MEDIA_DIRS[@]}" "${APPDATA_DIRS[@]}" "${BACKUP_DIRS[@]}"; do
mkdir -p "${mount_point}/${dir}"
log_debug "Created: ${mount_point}/${dir}"
done
@@ -1232,11 +1224,11 @@ main() {
echo ""
echo " # Immich photo storage"
echo " volumes:"
echo " - ${mount_point}/storage/immich:/usr/src/app/upload"
echo " - ${mount_point}/appdata/immich:/usr/src/app/upload"
echo ""
echo " # Nextcloud data"
echo " volumes:"
echo " - ${mount_point}/storage/nextcloud:/var/www/html/data"
echo " - ${mount_point}/appdata/nextcloud:/var/www/html/data"
echo ""
echo -e " ${BOLD}Verify mount survives reboot:${NC}"
echo " sudo mount -a # Test fstab now"