diff --git a/Netgrimoire/Pocket/Deployment_Guide.md b/Netgrimoire/Pocket/Deployment_Guide.md index a595973..4ccbe06 100644 --- a/Netgrimoire/Pocket/Deployment_Guide.md +++ b/Netgrimoire/Pocket/Deployment_Guide.md @@ -2,7 +2,7 @@ title: Pocket Grimoire description: published: true -date: 2026-02-21T06:10:17.060Z +date: 2026-02-21T04:25:58.904Z tags: editor: markdown dateCreated: 2026-02-20T04:41:35.122Z @@ -44,29 +44,14 @@ Pocket Grimoire is a portable companion to the Netgrimoire homelab, providing of ### Storage (3 SSDs, 2 Active at a Time) - **SSD #1 – VAULT** (1-2TB, encrypted, always connected) - - Git repository mirrors (from Forgejo) - - Wiki.js content backups - - Kopia repository (backup data) - - Photos and documents - - System backups and configs - - SSH keys - - VeraCrypt containers (optional) - - **Does NOT contain media or Stash data** - -- **SSD #2 – GREEN** (2TB+, encrypted, for personal trips) - - Personal media library (H.264/AAC movies and TV) - - Stash-Pocket data (database, previews, blobs) - - Personal content organized under `/Green/` structure - - Connected during personal/solo trips - - Syncs from `/export/vault/Green/` on Netgrimoire - -- **SSD #3 – MEDIA-FAMILY** (2TB+, unencrypted, for family trips) + - Wiki.js data, PostgreSQL, git repos, photos, documents, backups +- **SSD #2 – MEDIA-PERSONAL** (2TB+, encrypted) + - Your curated H.264/AAC movies and TV shows + - Connected for personal trips +- **SSD #3 – MEDIA-FAMILY** (2TB+, unencrypted) - Family-friendly movies and TV shows (H.264/AAC) - - Simple `/library/movies/` and `/library/tv/` structure - - Connected during family visits/trips - - Unencrypted for easy sharing with relatives - - Can be used on other devices without Pocket Grimoire - + - Connected for family visits + - Shareable/portable to other devices without Pocket Grimoire - **USB drive – ISO/Rebuild** (64GB+, labeled, write-protected) - **USB drive – Data Transfer** (128GB+, labeled) @@ -252,7 +237,7 @@ Headroom: 78W ## Directory Structure ``` -/srv/pocket-grimoire/ # Main application root (on VAULT SSD) +/srv/pocket-grimoire/ # Main application root (on Vault SSD) ├── stacks/ # Docker Compose files │ ├── wikijs/ │ │ ├── docker-compose.yml @@ -260,9 +245,6 @@ Headroom: 78W │ ├── jellyfin/ │ │ ├── docker-compose.yml │ │ └── .env -│ ├── stash/ -│ │ ├── docker-compose.yml -│ │ └── .env │ └── filebrowser/ # Optional │ └── docker-compose.yml ├── data/ # Persistent container data @@ -276,38 +258,23 @@ Headroom: 78W ├── forgejo_wiki_ro # Read-only wiki deploy key └── zfs_pull_ro # ZFS replication key -/srv/vaultpg/ # VAULT SSD (always connected) -├── kopia/ # Kopia backup repository -├── backups/ # System backups -│ ├── wiki/ # Wiki.js backups -│ ├── photos/ # Photo backups -│ └── documents/ # Document backups -├── repos/ # Git repository mirrors -└── veracrypt-containers/ # VeraCrypt containers (optional) - └── vault.vc - -/srv/greenpg/ # GREEN SSD (personal, rotated) -├── media/library/ # Personal media files -│ ├── movies/ -│ └── tv/ -└── stash/ # Stash-Pocket data - ├── config/ # Stash database - ├── generated/ # Previews - └── blobs/ # Scene markers - -/srv/mediapg/ # MEDIA-FAMILY SSD (family, rotated) -└── library/ # Family media files - ├── movies/ - └── tv/ +/srv/vaultpg/ # Vault SSD ZFS mount +├── veracrypt-containers/ # VeraCrypt container files (optional) +│ └── vault.vc # Encrypted container +└── (other mirrors from Netgrimoire) /mnt/veracrypt/ # VeraCrypt mount points (optional) ├── vault1/ # Mounted container 1 └── vault2/ # Mounted container 2 (if needed) +/srv/mediapg/ # Media SSD ZFS mount (rotated) +└── library/ # H.264 encoded media + ├── movies/ + └── tv/ + /usr/local/sbin/ # System scripts ├── pocketgrimoire-sync.sh # Main sync script ├── pocketgrimoire-zfs-pull.sh # ZFS replication script -├── unlock-pocket-grimoire.sh # Headless unlock script └── mount-veracrypt-vault.sh # VeraCrypt mount script (optional) /etc/ # Config files @@ -545,28 +512,11 @@ This approach allows you to: - Verify data integrity before moving drives - Test encryption/unlock on powerful hardware first -#### Drive Configuration Overview - -**Drive #1: VAULT** (1-2TB, encrypted, always connected) -- Purpose: Backups and system data ONLY -- Contains: Git repos, Wiki backups, Kopia repository, photos, documents -- Does NOT contain media or Stash data - -**Drive #2: GREEN** (2TB+, encrypted, rotated for personal trips) -- Purpose: Personal media and Stash-Pocket data -- Contains: Personal media library, Stash database/previews/blobs -- Syncs from `/export/vault/Green/` on Netgrimoire - -**Drive #3: MEDIA-FAMILY** (2TB+, unencrypted, rotated for family trips) -- Purpose: Family-friendly shareable content -- Contains: Simple library structure with movies and TV -- Unencrypted for easy sharing with relatives - #### On Netgrimoire: Create and Populate Drives **Connect drives to Netgrimoire:** - VAULT SSD (1-2TB) via USB 3.0 or SATA -- GREEN SSD (2TB+) via USB 3.0 or SATA +- MEDIA-PERSONAL SSD (2TB+) via USB 3.0 or SATA - MEDIA-FAMILY SSD (2TB+) via USB 3.0 or SATA (optional, can be created later) **Identify drives:** @@ -576,7 +526,7 @@ lsblk # Note device names: /dev/sdX, /dev/sdY, /dev/sdZ ``` -**Create VAULT pool (encrypted - backups only):** +**Create VAULT pool (encrypted):** ```bash # On Netgrimoire sudo zpool create -o ashift=12 \ @@ -592,21 +542,21 @@ sudo zpool create -o ashift=12 \ # Enter STRONG passphrase when prompted # Write down this passphrase - you'll need it on Pocket Grimoire -# Create datasets for backups and system data -sudo zfs create -o recordsize=16K pocket-vault/wiki-pg # PostgreSQL backups -sudo zfs create pocket-vault/repos # Git repository mirrors -sudo zfs create pocket-vault/kopia # Kopia backup repository -sudo zfs create pocket-vault/backups # General backups -sudo zfs create pocket-vault/backups/wiki # Wiki.js backups -sudo zfs create pocket-vault/backups/photos # Photo backups -sudo zfs create pocket-vault/backups/documents # Document backups -sudo zfs create pocket-vault/veracrypt-containers # VeraCrypt (optional) +# Create datasets matching Pocket structure +sudo zfs create -o recordsize=16K pocket-vault/wiki-pg +sudo zfs create pocket-vault/repos +sudo zfs create pocket-vault/pocket-grimoire +sudo zfs create pocket-vault/Green +sudo zfs create pocket-vault/Green/Pocket +sudo zfs create pocket-vault/Green/Pocket/stash +sudo zfs create pocket-vault/Green/Pocket/media +sudo zfs create pocket-vault/veracrypt-containers # Set ownership sudo chown -R 1000:1000 /mnt/pocket-vault ``` -**Create GREEN pool (encrypted - personal media + Stash):** +**Create MEDIA-PERSONAL pool (encrypted):** ```bash # On Netgrimoire sudo zpool create -o ashift=12 \ @@ -616,120 +566,78 @@ sudo zpool create -o ashift=12 \ -O compression=lz4 \ -O atime=off \ -O recordsize=1M \ - -m /mnt/pocket-green \ - pocket-green /dev/sdY + -m /mnt/pocket-media-personal \ + pocket-media-personal /dev/sdY # Enter STRONG passphrase (can be different from VAULT) # Write down this passphrase -# Create datasets matching Netgrimoire structure -sudo zfs create pocket-green/media # Media library root -sudo zfs create pocket-green/media/library # Library directory -sudo zfs create pocket-green/media/library/movies # Movies -sudo zfs create pocket-green/media/library/tv # TV shows -sudo zfs create pocket-green/stash # Stash-Pocket data -sudo zfs create pocket-green/stash/config # Stash database -sudo zfs create pocket-green/stash/generated # Previews -sudo zfs create pocket-green/stash/blobs # Scene markers -sudo zfs create pocket-green/stash/cache # Cache (don't sync) +# Create datasets +sudo zfs create pocket-media-personal/library +sudo zfs create pocket-media-personal/library/movies +sudo zfs create pocket-media-personal/library/tv # Set ownership -sudo chown -R 1000:1000 /mnt/pocket-green +sudo chown -R 1000:1000 /mnt/pocket-media-personal ``` -**Create MEDIA-FAMILY pool (unencrypted - family content):** +**Create MEDIA-FAMILY pool (unencrypted, optional now or later):** ```bash # On Netgrimoire sudo zpool create -o ashift=12 \ -O compression=lz4 \ -O atime=off \ -O recordsize=1M \ - -m /mnt/pocket-media \ - pocket-media /dev/sdZ + -m /mnt/pocket-media-family \ + pocket-media-family /dev/sdZ # No encryption - family can use this drive on any system -# Create simple library structure -sudo zfs create pocket-media/library -sudo zfs create pocket-media/library/movies -sudo zfs create pocket-media/library/tv +# Create datasets +sudo zfs create pocket-media-family/library +sudo zfs create pocket-media-family/library/movies +sudo zfs create pocket-media-family/library/tv # Set ownership -sudo chown -R 1000:1000 /mnt/pocket-media +sudo chown -R 1000:1000 /mnt/pocket-media-family ``` **Perform initial sync to VAULT:** ```bash # On Netgrimoire -# Sync backups and system data to VAULT drive +# Sync data from Netgrimoire to Pocket VAULT drive -# Sync Wiki backups -sudo rsync -avP \ - /export/vault/wiki-backups/ \ - /mnt/pocket-vault/backups/wiki/ - -# Sync Git repositories -sudo rsync -avP \ - /export/vault/repos/ \ - /mnt/pocket-vault/repos/ - -# Sync Kopia repository (if exists) -sudo rsync -avP \ - /export/vault/kopia/ \ - /mnt/pocket-vault/kopia/ - -# Sync photos and documents -sudo rsync -avP \ - /export/vault/photos/ \ - /mnt/pocket-vault/backups/photos/ - -sudo rsync -avP \ - /export/vault/documents/ \ - /mnt/pocket-vault/backups/documents/ - -# Verify data -ls -lh /mnt/pocket-vault/ -du -sh /mnt/pocket-vault/ -``` - -**Perform initial sync to GREEN:** -```bash -# On Netgrimoire -# Sync personal media and Stash data from /export/vault/Green/ - -# Sync entire Green directory structure +# Sync Pocket directory structure sudo rsync -avP --exclude='cache' \ - /export/vault/Green/ \ - /mnt/pocket-green/ + /export/vault/Green/Pocket/ \ + /mnt/pocket-vault/Green/Pocket/ -# Or use ZFS send/receive for atomic snapshot (if Green is a ZFS dataset) -sudo zfs snapshot vault/Green@initial -sudo zfs send vault/Green@initial | \ - sudo zfs receive pocket-green/Green +# Or use ZFS send/receive for atomic snapshot +sudo zfs snapshot vault/Green/Pocket@initial +sudo zfs send vault/Green/Pocket@initial | \ + sudo zfs receive pocket-vault/Green/Pocket # Verify data -ls -lh /mnt/pocket-green/ -ls -lh /mnt/pocket-green/media/library/ -ls -lh /mnt/pocket-green/stash/ -du -sh /mnt/pocket-green/ +ls -lh /mnt/pocket-vault/Green/Pocket/ +du -sh /mnt/pocket-vault/Green/Pocket/ ``` -**Populate MEDIA-FAMILY (optional - curate family content):** +**Populate MEDIA-PERSONAL (optional - curate content):** ```bash # On Netgrimoire -# Copy family-friendly media to MEDIA-FAMILY drive +# Copy curated personal media to Pocket media drive -# Example: Copy family movies -sudo cp /export/vault/media/family-movies/*.mp4 \ - /mnt/pocket-media/library/movies/ +# Example: Copy favorite movies +sudo cp /export/vault/media/library/movies/favorites/*.mp4 \ + /mnt/pocket-media-personal/library/movies/ # Or use rsync for large transfers sudo rsync -avP \ - /export/vault/media/family-shows/ \ - /mnt/pocket-media/library/tv/ + /export/vault/media/library/tv/FavoriteShow/ \ + /mnt/pocket-media-personal/library/tv/FavoriteShow/ # Verify -du -sh /mnt/pocket-media/library/ +du -sh /mnt/pocket-media-personal/library/ ``` **Export pools before disconnecting:** @@ -738,8 +646,8 @@ du -sh /mnt/pocket-media/library/ # CRITICAL: Export pools before physically disconnecting drives sudo zpool export pocket-vault -sudo zpool export pocket-green -sudo zpool export pocket-media # if created +sudo zpool export pocket-media-personal +sudo zpool export pocket-media-family # if created # Verify exported zpool list @@ -751,10 +659,8 @@ zpool list ### 5. Configure ZFS Pools on Pocket Grimoire **Now connect drives to Pocket Grimoire:** -- VAULT → Anker USB-A port #2 (always connected) -- GREEN (for personal trips) → Raspberry Pi USB 3.0 port - OR -- MEDIA-FAMILY (for family trips) → Raspberry Pi USB 3.0 port +- VAULT → Anker USB-A port #2 +- MEDIA-PERSONAL or MEDIA-FAMILY → Raspberry Pi USB 3.0 port **Import and rename pools:** ```bash @@ -764,29 +670,25 @@ ssh user@pocket-grimoire.local # Import VAULT pool with new name sudo zpool import pocket-vault vaultpg -# Import GREEN pool with new name (for personal trips) -sudo zpool import pocket-green greenpg - -# OR import MEDIA-FAMILY pool (for family trips) -# sudo zpool import pocket-media mediapg +# Import MEDIA pool with new name +sudo zpool import pocket-media-personal mediapg +# Or: +# sudo zpool import pocket-media-family mediapg # Verify pools imported zpool list -# Should show: vaultpg, greenpg (or mediapg for family) +# Should show: vaultpg, mediapg ``` **Set mount points for Pocket Grimoire:** ```bash # Set proper mount points sudo zfs set mountpoint=/srv/vaultpg vaultpg -sudo zfs set mountpoint=/srv/greenpg greenpg -# Or for family drive: -# sudo zfs set mountpoint=/srv/mediapg mediapg +sudo zfs set mountpoint=/srv/mediapg mediapg # Create mount points sudo mkdir -p /srv/vaultpg -sudo mkdir -p /srv/greenpg -sudo mkdir -p /srv/mediapg # Create both, use as needed +sudo mkdir -p /srv/mediapg # Unmount and remount with new paths sudo zfs unmount -a @@ -796,14 +698,11 @@ sudo zfs mount -a df -h | grep srv # Should show: # vaultpg mounted on /srv/vaultpg -# greenpg mounted on /srv/greenpg (or mediapg on /srv/mediapg) +# mediapg mounted on /srv/mediapg # Verify data -ls /srv/vaultpg/ -ls /srv/greenpg/media/library/ -ls /srv/greenpg/stash/ -# Or for family: -# ls /srv/mediapg/library/ +ls /srv/vaultpg/Green/Pocket/ +ls /srv/mediapg/library/ ``` **Configure for headless unlock:** @@ -812,8 +711,7 @@ ls /srv/greenpg/stash/ # This prevents boot hanging waiting for passphrase sudo zfs set canmount=noauto vaultpg -sudo zfs set canmount=noauto greenpg -sudo zfs set canmount=noauto mediapg # For when you swap to family drive +sudo zfs set canmount=noauto mediapg # Pools will need manual unlock via SSH after boot ``` @@ -850,9 +748,9 @@ echo " Pocket Grimoire ZFS Unlock (Headless)" echo "==========================================" echo -# Check if VAULT pool is already unlocked +# Check if pools are already unlocked if zfs list vaultpg &>/dev/null && mount | grep -q /srv/vaultpg; then - echo "✓ vaultpg (VAULT) already unlocked and mounted" + echo "✓ vaultpg already unlocked and mounted" else # Import pool if needed if ! zpool list vaultpg &>/dev/null; then @@ -860,8 +758,8 @@ else sudo zpool import vaultpg fi - # Unlock VAULT pool - echo "Unlocking vaultpg (VAULT - backups and system data)..." + # Unlock Vault pool + echo "Unlocking vaultpg (VAULT SSD)..." sudo zfs load-key vaultpg # Mount all vaultpg datasets @@ -878,37 +776,14 @@ fi echo -# Check for GREEN pool (personal media + Stash) -if zpool list greenpg &>/dev/null; then - if zfs list greenpg &>/dev/null && mount | grep -q /srv/greenpg; then - echo "✓ greenpg (GREEN - personal media + Stash) already unlocked" - else - echo "Unlocking greenpg (GREEN - personal media + Stash)..." - sudo zfs load-key greenpg - sudo zfs mount greenpg - sudo zfs mount -a - - if mount | grep -q /srv/greenpg; then - echo "✓ greenpg unlocked and mounted at /srv/greenpg" - else - echo "✗ Failed to mount greenpg" - exit 1 - fi - fi -else - echo "ℹ greenpg pool not found (GREEN drive not connected)" -fi - -echo - -# Check for MEDIA-FAMILY pool (family content) +# Check if media pool is present and unlock if zpool list mediapg &>/dev/null; then if zfs list mediapg &>/dev/null && mount | grep -q /srv/mediapg; then - echo "✓ mediapg (MEDIA-FAMILY) already unlocked" + echo "✓ mediapg already unlocked and mounted" else - echo "Unlocking mediapg (MEDIA-FAMILY - family content)..." + echo "Unlocking mediapg (MEDIA-PERSONAL or MEDIA-FAMILY)..." - # Check if encrypted (shouldn't be, but check anyway) + # Check if encrypted (MEDIA-PERSONAL) or not (MEDIA-FAMILY) if zfs get encryption mediapg | grep -q "encryption.*on"; then sudo zfs load-key mediapg fi @@ -924,7 +799,7 @@ if zpool list mediapg &>/dev/null; then fi fi else - echo "ℹ mediapg pool not found (MEDIA-FAMILY drive not connected)" + echo "ℹ mediapg pool not found (media drive may not be connected)" fi echo @@ -974,17 +849,6 @@ echo "==========================================" echo " Pocket Grimoire Ready!" echo "==========================================" echo -echo "Drives mounted:" -if mount | grep -q /srv/vaultpg; then - echo " ✓ VAULT (vaultpg) at /srv/vaultpg" -fi -if mount | grep -q /srv/greenpg; then - echo " ✓ GREEN (greenpg) at /srv/greenpg - Personal media + Stash" -fi -if mount | grep -q /srv/mediapg; then - echo " ✓ MEDIA-FAMILY (mediapg) at /srv/mediapg - Family content" -fi -echo echo "Services available at:" echo " Wiki.js: http://pocket-grimoire.local:3000" echo " Jellyfin: http://pocket-grimoire.local:8096" @@ -1081,21 +945,17 @@ ssh user@pocket-grimoire.local # Import pools if needed sudo zpool import vaultpg -sudo zpool import greenpg # For GREEN (personal) -# Or: -# sudo zpool import mediapg # For MEDIA-FAMILY +sudo zpool import mediapg # Load encryption keys -sudo zfs load-key vaultpg # VAULT (always encrypted) -sudo zfs load-key greenpg # GREEN (encrypted) -# mediapg is unencrypted (MEDIA-FAMILY) - no key needed +sudo zfs load-key vaultpg +sudo zfs load-key mediapg # Only if MEDIA-PERSONAL (encrypted) # Mount all datasets sudo zfs mount -a # Verify mounted df -h | grep srv -# Should show vaultpg and either greenpg or mediapg # Start Docker sudo systemctl start docker @@ -1857,8 +1717,8 @@ sudo umount /mnt/pocket-media ### 8. Document Passphrases - [ ] ZFS encryption passphrases (written down, secured) - VAULT (vaultpg): [write passphrase on paper] - - GREEN (greenpg): [write passphrase on paper] - - MEDIA-FAMILY (mediapg): N/A (unencrypted) + - MEDIA-PERSONAL (mediapg): [write passphrase on paper] + - MEDIA-FAMILY: N/A (unencrypted) - [ ] VeraCrypt container passwords (if using, written down, secured) - [ ] WiFi credentials for travel router (portapotty network) - [ ] Jellyfin admin password @@ -1882,9 +1742,8 @@ ssh user@pocket-grimoire.local /usr/local/sbin/unlock-pocket-grimoire.sh # 5. Enter passphrases when prompted -# - VAULT passphrase (always) -# - GREEN passphrase (if GREEN drive connected for personal trip) -# - MEDIA-FAMILY has no passphrase (unencrypted) +# - VAULT passphrase +# - MEDIA-PERSONAL passphrase (if encrypted) # - VeraCrypt password (if applicable) # 6. Wait for Docker containers to start (~30 seconds) @@ -1906,26 +1765,20 @@ docker ps ### 10. Verify Data Synced from Netgrimoire ```bash -# Check VAULT data present (backups only) -ls /srv/vaultpg/kopia/ -ls /srv/vaultpg/backups/ -ls /srv/vaultpg/repos/ -du -sh /srv/vaultpg/ +# Check Vault data present +ls /srv/vaultpg/Green/Pocket/stash/ +ls /srv/vaultpg/Green/Pocket/media/ +du -sh /srv/vaultpg/Green/Pocket/ -# Check GREEN data (personal media + Stash) -ls /srv/greenpg/media/library/ -ls /srv/greenpg/stash/ -du -sh /srv/greenpg/ - -# Or check MEDIA-FAMILY data (if that drive is connected) +# Check media drive populated (if applicable) ls /srv/mediapg/library/ du -sh /srv/mediapg/ -# Verify Stash database and previews (only on GREEN) -ls -lh /srv/greenpg/stash/config/ +# Verify Stash database and previews +ls -lh /srv/vaultpg/Green/Pocket/stash/config/ # Should show: stash-go.sqlite -ls /srv/greenpg/stash/generated/ | wc -l +ls /srv/vaultpg/Green/Pocket/stash/generated/ | wc -l # Should show: hundreds of preview files ``` @@ -2325,23 +2178,12 @@ veracrypt --text --list # Unmount and export ZFS pools sudo zfs unmount -a - -# Export VAULT (always present) sudo zpool export vaultpg - -# Export GREEN (if connected for personal trip) -if zpool list greenpg &>/dev/null; then - sudo zpool export greenpg -fi - -# Export MEDIA-FAMILY (if connected for family trip) -if zpool list mediapg &>/dev/null; then - sudo zpool export mediapg -fi +sudo zpool export mediapg # Verify pools exported zpool list -# Should NOT show vaultpg, greenpg, or mediapg +# Should NOT show vaultpg or mediapg # Shutdown Pi sudo shutdown -h now diff --git a/Netgrimoire/Pocket/Stash_Integration.md b/Netgrimoire/Pocket/Stash_Integration.md index 0d82360..0af32dc 100644 --- a/Netgrimoire/Pocket/Stash_Integration.md +++ b/Netgrimoire/Pocket/Stash_Integration.md @@ -2,7 +2,7 @@ title: Pocket Clips description: Integrating Stash published: true -date: 2026-02-21T06:11:15.579Z +date: 2026-02-20T12:54:12.016Z tags: editor: markdown dateCreated: 2026-02-20T04:48:11.191Z @@ -18,20 +18,18 @@ dateCreated: 2026-02-20T04:48:11.191Z This guide extends the Pocket Grimoire deployment to include Stash using a **two-instance architecture**: - **Stash-Main** on Netgrimoire watches your entire media library -- **Stash-Pocket** on Netgrimoire watches only curated personal content (GREEN drive) -- **Stash-Pocket** replicates to Pocket Grimoire's GREEN drive for offline access +- **Stash-Pocket** on Netgrimoire watches only curated travel content +- **Stash-Pocket** replicates to Pocket Grimoire for offline access This approach provides: - Full library management at home (Stash-Main) -- Curated personal subset with independent database (Stash-Pocket) -- Automatic synchronization via existing ZFS replication to GREEN drive +- Curated travel subset with independent database (Stash-Pocket) +- Automatic synchronization via existing ZFS replication - Read-only browsing on travel with all previews pre-generated - Zero CPU load on travel Pi (no scanning/generation) **Key Principle:** All intensive operations happen on Netgrimoire. Pocket Grimoire just serves pre-generated content in read-only mode. -**Important:** Stash data lives on the GREEN drive (personal media), NOT on VAULT. VAULT is for backups only. - --- ## Architecture @@ -50,36 +48,30 @@ This approach provides: │ └─ Does NOT sync to Pocket │ │ │ │ Stash Instance #2: "Stash-Pocket" (Port 9998) │ -│ ├─ Watches: ONLY Green/media (personal content) │ -│ ├─ Location: /export/vault/Green/ │ -│ │ ├── media/library/ (personal media) │ -│ │ └── stash/ (Stash-Pocket data) │ -│ │ ├── config/ (database) │ -│ │ ├── generated/ (previews) │ -│ │ └── blobs/ (markers) │ -│ ├─ Database: 200MB-1GB (personal subset) │ -│ └─ SYNCS to Pocket GREEN drive via ZFS │ +│ ├─ Watches: ONLY Pocket media │ +│ ├─ Location: /export/vault/Green/Pocket/ │ +│ │ ├── stash/config (database) │ +│ │ ├── stash/generated (previews) │ +│ │ ├── stash/blobs (markers) │ +│ │ └── media/library (curated content) │ +│ ├─ Database: 200MB-1GB (travel subset) │ +│ └─ SYNCS to Pocket via ZFS replication │ │ │ └─────────────────────────────────────────────────────┘ ↓ ZFS Send - (Entire /export/vault/Green/ syncs to GREEN drive) + (Entire /export/vault/Green/Pocket/ syncs) ↓ ┌─────────────────────────────────────────────────────┐ │ POCKET GRIMOIRE (Travel) │ ├─────────────────────────────────────────────────────┤ │ │ -│ GREEN Drive (greenpg pool): │ -│ ├─ /srv/greenpg/media/library/ (media files) │ -│ └─ /srv/greenpg/stash/ (Stash data) │ -│ │ │ Stash Instance: "Stash-Pocket" (Port 9999) │ -│ ├─ Watches: GREEN media only (read-only) │ -│ ├─ Location: /srv/greenpg/ │ -│ │ ├── media/library/ (synced media) │ -│ │ └── stash/ (synced, read-only) │ -│ │ ├── config/ (synced database) │ -│ │ ├── generated/ (synced previews) │ -│ │ └── blobs/ (synced markers) │ +│ ├─ Watches: Pocket media only (read-only) │ +│ ├─ Location: /srv/vaultpg/Green/Pocket/ │ +│ │ ├── stash/config (synced, read-only) │ +│ │ ├── stash/generated (synced, read-only) │ +│ │ ├── stash/blobs (synced, read-only) │ +│ │ └── media/library (synced media files) │ │ ├─ Same database as Netgrimoire Stash-Pocket │ │ └─ Browse only - no scanning or generation │ │ │ @@ -99,18 +91,18 @@ This approach provides: - Stays on Netgrimoire (doesn't sync to Pocket) ✅ **Stash-Pocket (Port 9998 at home, 9999 on travel):** -- Manages only curated personal content (GREEN drive) +- Manages only curated travel content - Smaller database (faster, lighter) - Independent from main library -- Syncs to Pocket Grimoire's GREEN drive automatically -- Preview personal setup before trips +- Syncs to Pocket Grimoire automatically +- Preview travel setup before trips ✅ **Separation of Concerns:** - Main library can be massive (thousands of videos) -- Personal subset is manageable (hundreds of videos) +- Travel subset is manageable (hundreds of videos) - No confusion about what's available where - Changes to main library don't affect travel copy -- Faster sync times (only GREEN data replicates) +- Faster sync times (only travel data replicates) --- @@ -128,38 +120,37 @@ Blobs/markers: 5-20GB Total: ~56-225GB (stays on Netgrimoire) ``` -**Stash-Pocket (DOES sync to GREEN drive):** +**Stash-Pocket (DOES sync):** ``` -Location: /export/vault/Green/stash/ +Location: /export/vault/Green/Pocket/stash/ Database: 200MB-1GB (smaller subset) Generated previews: 5-20GB Blobs/markers: 1-5GB ───────────────────────────────────────────── -Total: ~6-26GB (syncs to Pocket GREEN) +Total: ~6-26GB (syncs to Pocket) ``` -**Personal Media (syncs to GREEN drive):** +**Pocket Media:** ``` -Location: /export/vault/Green/media/ +Location: /export/vault/Green/Pocket/media/ Content: 500GB-1TB (curated for travel) ───────────────────────────────────────────── -Total Green data: ~506GB-1TB (entire /Green/ directory) +Total Pocket data: ~506GB-1TB (entire Green/Pocket/ directory) ``` -### On Pocket Grimoire (GREEN Drive) +### On Pocket Grimoire (Vault SSD) ``` -Location: /srv/greenpg/ +Location: /srv/vaultpg/Green/Pocket/ Stash data: ~6-26GB (synced from Netgrimoire) Media files: ~500GB-1TB (synced from Netgrimoire) +Wiki/photos/docs: ~10-50GB (already syncing) ───────────────────────────────────────────── -Total: ~506GB-1TB on GREEN SSD +Total: ~516GB-1.1TB on Vault SSD -This fits comfortably on a 2TB+ GREEN SSD. +This fits comfortably on a 1-2TB Vault SSD. ``` -**Note:** VAULT drive contains backups only (no Stash, no media). - --- ## Resource Impact