claude-home/networking/pihole-disk-optimization.md
Cal Corum 4b7eca8a46
All checks were successful
Reindex Knowledge Base / reindex (push) Successful in 3s
docs: add YAML frontmatter to all 151 markdown files
Adds title, description, type, domain, and tags frontmatter to every
doc for improved KB semantic search. The description field is prepended
to every search chunk, and domain/type/tags enable filtered queries.

Type values: context, guide, runbook, reference, troubleshooting
Domain values match directory structure (networking, docker, etc.)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 09:00:44 -05:00

120 lines
3.4 KiB
Markdown

---
title: "Pi-hole Disk Optimization"
description: "Resolved critical disk space issue on primary Pi-hole by reducing query log retention to 7 days, pruning Docker resources, and removing old gravity backups."
type: runbook
domain: networking
tags: [pihole, disk-space, docker, optimization, maintenance]
---
# Pi-hole Disk Optimization - 2026-02-06
## Problem
Primary Pi-hole (npm-pihole at 10.10.0.16) had critical disk space issues:
- **Root filesystem**: 91% full (27GB used of 31GB)
- **Pi-hole data**: 3.6GB total
- `pihole-FTL.db`: 2.8GB (query log database)
- `gravity.db`: 460MB (blocklist database)
- `gravity.db.v5.backup`: 114MB (old v5 backup)
- **Query retention**: 91 days (default)
- **Total queries stored**: 26.4 million
## Actions Taken
### 1. Removed Old Backup Database
```bash
rm /home/cal/container-data/pihole/etc-pihole/gravity.db.v5.backup
```
**Space freed**: 114MB
### 2. Cleaned Up Docker Resources
```bash
docker system prune -af --volumes
```
**Space freed**: 4.3GB
- Removed unused images (old Pi-hole versions, Jellyfin, Foundry, etc.)
- Removed stopped containers
- Removed unused networks
### 3. Reduced Query Log Retention
```bash
echo "database.maxDBdays=7.0" >> /etc/pihole/pihole-FTL.conf
docker compose restart
```
**Configuration**: Changed from 91 days to 7 days
**Future savings**: Database will automatically maintain ~7 days of logs instead of 91
## Results
| Metric | Before | After | Improvement |
|--------|--------|-------|-------------|
| Disk Usage | 91% (27GB/31GB) | 73% (22GB/31GB) | -18% |
| Free Space | 2.8GB | 8.2GB | +5.4GB |
| Total Freed | - | 4.3GB | - |
## Ongoing Maintenance
### Automatic Cleanup
Pi-hole will now automatically:
- Delete queries older than 7 days
- Maintain FTL database size around ~300-500MB (instead of 2.8GB)
- Keep the most recent week of query logs for troubleshooting
### Manual Cleanup (if needed)
```bash
# Flush Pi-hole logs
docker exec pihole pihole -f
# Check disk usage
df -h /
du -sh /home/cal/container-data/pihole/etc-pihole/*
# Clean unused Docker resources
docker system prune -af --volumes
# Check query count
docker exec pihole pihole-FTL sqlite3 /etc/pihole/pihole-FTL.db 'SELECT COUNT(*) FROM queries;'
```
### Monitoring Recommendations
**Set up disk space alerts** when usage exceeds 85%:
```bash
# Add to cron (daily check)
0 8 * * * df -h / | awk '$5+0 > 85 {print "Warning: Disk usage at " $5 " on npm-pihole"}' | mail -s "Disk Alert" admin@example.com
```
**Check Pi-hole database size monthly**:
```bash
du -h /home/cal/container-data/pihole/etc-pihole/pihole-FTL.db
```
## Configuration File
`/etc/pihole/pihole-FTL.conf`:
```conf
database.maxDBdays=7.0 # Keep queries for 7 days only
```
## Prevention Tips
1. **Regular Docker cleanup**: Run `docker system prune` monthly
2. **Monitor disk usage**: Check `df -h` weekly
3. **Review query retention**: 7 days is sufficient for most troubleshooting
4. **Consider disabling query logging** if not needed:
```bash
pihole logging off
```
5. **Archive old logs** before major upgrades (like v5→v6)
## Space Budget Estimates
With 7-day retention:
- **Pi-hole FTL database**: ~300-500MB (vs 2.8GB before)
- **Gravity database**: ~460MB (36 blocklists)
- **Docker images**: ~2-3GB (active containers only)
- **System overhead**: ~20GB
- **Recommended free space**: 5GB+ for headroom
**Current allocation is healthy** at 73% with 8.2GB free.