Files
homelab-configs/dedup-dryrun-report-cgitta.md
jgitta 290aedf82d Add complete homelab documentation and configurations
Documentation:
- OpenCode + LiteLLM integration guide
- LiteLLM complete setup with 16 models
- Gitea centralized configuration guide
- Testing procedures and verification
- API keys setup instructions

Configurations:
- OpenCode config pointing to LiteLLM
- Updated LiteLLM config with all models
- Nextcloud docker-compose template

Scripts:
- Gitea setup automation
- OpenCode testing script

Infrastructure:
- Gitea: 192.168.88.200:3000
- LiteLLM: 192.168.88.27:4000
- Nextcloud: 192.168.88.62
2026-04-25 10:56:21 -05:00

8.2 KiB
Raw Permalink Blame History

DRY-RUN REPORT: Dedup & Merge cgitta Cold-Storage → Nextcloud

Date: 2026-04-17
Status: Hash scans complete. Analysis ready for review.
Analysis Type: SHA-256 content-based deduplication (zero false positives)


Executive Summary

All clear to proceed with Phase 23. No blocking issues detected. Zero path collisions. Primary disk has ample space for the move.

Metric Value
Total files in cold-storage/cgitta 66,663
Total size in cold-storage/cgitta ~200.61 GB
Duplicate files to delete 15,299 (23.0%)
Unique files to move 51,364 (77.0%)
Est. GB to delete ~46 GB
Est. GB to move ~155 GB
Primary disk free space ~650 GB
Primary disk after move ~495 GB remaining
Path collisions 0
Internal duplicates in cold 5,367 hashes (same file exists >1× in cold)

What the numbers mean

Duplicates → Safe to Delete from Cold-Storage

15,299 files are exact byte-for-byte matches with files already in cgitta's primary Nextcloud account. These are redundant copies sitting in cold-storage that can be safely removed.

  • These files are already available to cgitta through her primary Nextcloud files
  • Deleting them frees up cold-storage space
  • Zero risk of data loss (source file exists in primary)

Unique Files → Must Move to Primary

51,364 files exist in cold-storage but have no match in cgitta's primary files. These are new/unique content that belongs in her Nextcloud account.

  • If we don't move them, cgitta loses access to them (they stay stuck on NFS cold-storage, invisible in Nextcloud)
  • These will be physically moved (not copied) from cold-storage into /mnt/nextcloud-data/cgitta/files/
  • After move, they'll appear in cgitta's Nextcloud web UI under the same folder names (Backup Files/, HP Laptop/, zip drives/)

Internal Duplicates Within Cold-Storage

5,367 unique hashes appear more than once in cold-storage itself. This means the same file (by content) is stored in multiple locations or with multiple filenames within cold-storage/cgitta.

  • When we move unique files to primary, we'll move all copies (including the duplicates)
  • Optional: we could de-duplicate before moving (keep only one copy of each hash in cold), but Phase 0 captures everything as-is
  • Recommendation: move as-is. The duplicates are small relative to the total, and keeping them maintains the original structure cgitta had in cold.

File Breakdown by Category

cold-storage/cgitta (66,663 files):
├─ 15,299 files → already in primary (delete from cold)
├─ 51,364 files → unique to cold (move to primary)
└─ Of the 51,364 unique:
   └─ 5,367 hashes appear multiple times (internal dupes)

Safety Checks Passed

Check Status Notes
Path collisions NONE No filename/path conflicts. Safe to move without renaming.
Primary disk space SAFE 650 GB free > 155 GB needed for unique files.
File ownership WILL HANDLE Phase 4 sets all files to www-data:www-data.
Nextcloud DB sync WILL HANDLE Phase 4 runs occ files:scan to update Nextcloud's database.
ZFS snapshot backup WILL CREATE Phase 2 creates pool1/cold-storage@pre-cgitta-dedup-2026-04-17 before any deletions.
Relative paths preserved YES /mnt/cold-storage/cgitta/Backup Files/foo.txt/mnt/nextcloud-data/cgitta/files/Backup Files/foo.txt

Sample Files

Files being deleted (duplicates)

Bing.url
VSO0807159M3FB5598OK.pdf
PAGO A VIAJES SORIANO 14,946 050919 SNB IOWA.pdf
… (15,299 total)

All of these already exist in cgitta's primary Nextcloud files.

Files being moved (unique)

zip drives/Polar_Pals_roll_&_keep_it.zip
zip drives/PictureJournalPromptsBUNDLELeveledWritingGreatforSpecialEd.zip
zip drives/New_Year_word_wall_cards_(3731009).zip
… (51,364 total)

All of these will be moved into cgitta's primary files.


What Happens Next (Phases 25)

Phase 2: Delete duplicates from cold-storage

  • Takes ZFS snapshot on TrueNAS (instant, zero-cost backup)
  • Deletes 15,299 duplicate files from cold-storage
  • Estimated time: 1020 minutes (local NFS delete operations are fast)
  • Reversible: snapshot exists on TrueNAS if anything goes wrong

Phase 3: Move unique files to primary

  • Moves 51,364 files from cold-storage into /mnt/nextcloud-data/cgitta/files/
  • Preserves folder structure and relative paths
  • Estimated time: 24 hours (network copy from NFS to local disk, ~100 MB/s bottleneck)
  • Safety: files moved one at a time; any partial failure leaves cold copies intact for retry

Phase 4: Ownership & Nextcloud rescan

  • Fixes file ownership to www-data:www-data (Nextcloud requirement)
  • Runs occ files:scan to register files in Nextcloud database
  • Estimated time: 510 minutes
  • Files become visible in cgitta's Nextcloud web UI

Phase 5: Verify & cleanup

  • Log into Nextcloud as cgitta, verify files appear in web UI
  • Confirm cold-storage/cgitta is now empty
  • Remove scratch directory (/var/tmp/dedup-cgitta)
  • Optionally destroy ZFS snapshot after a grace period (1 week)

Disk Impact Summary

On /mnt/cold-storage (NFS)

Before:

cold-storage/cgitta: 200.61 GB

After Phase 2 (delete duplicates):

cold-storage/cgitta: ~154 GB (46 GB freed)

After Phase 3 (move unique):

cold-storage/cgitta: ~0 GB (empty)

On /mnt/nextcloud-data/cgitta/files (local SSD)

Before:

Used: ~1.35 TB
Free: ~650 GB

After Phase 3 (move unique):

Used: ~1.5 TB (original + 155 GB of unique files)
Free: ~495 GB ✅ (still comfortable margin)

Recommendations

  1. Proceed with Phases 25. All safety checks pass. No blocking issues.

  2. Optional: If you want to de-duplicate internal copies before moving, let me know. We can identify which of the 5,367 internal-dup hashes should be kept (e.g., keep only the first occurrence of each unique hash). This would reduce the move size slightly but complicate the process.

  3. Time estimate: Plan for 35 hours total runtime (mostly Phase 3, which is network-bound).

  4. Schedule: Phase 23 can run during off-peak hours. Nextcloud will be usable during the move (files being moved are in cold-storage, not primary), though cgitta might notice new files appearing mid-move as Phase 3 progresses.


Questions Before Proceeding?

Before I kick off Phase 2, let me know:

  • Proceed with deletion and move as described?
  • Any concern about the file counts or size estimates?
  • Want to de-duplicate internal copies first, or keep the originals as-is?
  • Preferred time to start? (Can run anytime; no downtime needed.)

Appendix: Command Reference

All Phase 25 commands are in the main strategy doc (dedup-strategy-cgitta.md). Below is a quick reference:

Phase 2 (Delete):

# TrueNAS snapshot
curl -sk -u "root:<password>" -X POST https://192.168.88.24/api/v2.0/zfs/snapshot …

# VM103 delete
awk '{ $1=""; sub(/^ +/,""); print }' /var/tmp/dedup-cgitta/dup.files | \
  sudo xargs -d '\n' -I{} rm -v "{}"

# Prune empty dirs
sudo find /mnt/cold-storage/cgitta -depth -type d -empty -delete

Phase 3 (Move):

# Dry-run first (review /var/tmp/dedup-cgitta/move-plan.txt)
awk '{ $1=""; sub(/^ +/,""); print }' /var/tmp/dedup-cgitta/unique.files | \
  while IFS= read -r src; do
    rel="${src#/mnt/cold-storage/cgitta/}"
    dst="/mnt/nextcloud-data/cgitta/files/${rel}"
    echo "MOVE: $src  ->  $dst"
  done | tee /var/tmp/dedup-cgitta/move-plan.txt

# Real move
awk '{ $1=""; sub(/^ +/,""); print }' /var/tmp/dedup-cgitta/unique.files | \
  while IFS= read -r src; do
    rel="${src#/mnt/cold-storage/cgitta/}"
    dst="/mnt/nextcloud-data/cgitta/files/${rel}"
    sudo install -d -o www-data -g www-data "$(dirname "$dst")"
    sudo mv -n -v "$src" "$dst"
  done | tee /var/tmp/dedup-cgitta/moved.log

Phase 4 (Ownership & Scan):

sudo chown -R www-data:www-data /mnt/nextcloud-data/cgitta/files/
sudo -u www-data php /var/www/nextcloud/occ files:scan cgitta

Report generated: 2026-04-17 17:18 UTC
Next action: Review and approve Phases 25.