All checks were successful
Reindex Knowledge Base / reindex (push) Successful in 3s
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>
120 lines
3.4 KiB
Markdown
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.
|