Complete restructure from patterns/examples/reference to technology-focused directories: • Created technology-specific directories with comprehensive documentation: - /tdarr/ - Transcoding automation with gaming-aware scheduling - /docker/ - Container management with GPU acceleration patterns - /vm-management/ - Virtual machine automation and cloud-init - /networking/ - SSH infrastructure, reverse proxy, and security - /monitoring/ - System health checks and Discord notifications - /databases/ - Database patterns and troubleshooting - /development/ - Programming language patterns (bash, nodejs, python, vuejs) • Enhanced CLAUDE.md with intelligent context loading: - Technology-first loading rules for automatic context provision - Troubleshooting keyword triggers for emergency scenarios - Documentation maintenance protocols with automated reminders - Context window management for optimal documentation updates • Preserved valuable content from .claude/tmp/: - SSH security improvements and server inventory - Tdarr CIFS troubleshooting and Docker iptables solutions - Operational scripts with proper technology classification • Benefits achieved: - Self-contained technology directories with complete context - Automatic loading of relevant documentation based on keywords - Emergency-ready troubleshooting with comprehensive guides - Scalable structure for future technology additions - Eliminated context bloat through targeted loading 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
92 lines
2.2 KiB
Markdown
92 lines
2.2 KiB
Markdown
# Network Filesystem Limitations
|
|
|
|
## SQLite on Network Filesystems
|
|
|
|
### The Problem
|
|
SQLite's WAL (Write-Ahead Logging) mode requires proper file locking that many network filesystems don't support:
|
|
|
|
```
|
|
[ERROR] Tdarr_Server - Error: SQLITE_BUSY: database is locked
|
|
[ERROR] Tdarr_Server - {
|
|
"func": "run",
|
|
"query": "PRAGMA journal_mode = WAL"
|
|
}
|
|
```
|
|
|
|
### Affected Filesystems
|
|
- ❌ **NFS** - Inconsistent locking behavior
|
|
- ❌ **SMB/CIFS** - Limited locking support
|
|
- ❌ **sshfs** - No proper locking
|
|
- ✅ **Local ext4/xfs/btrfs** - Full locking support
|
|
|
|
### Solutions
|
|
|
|
#### Hybrid Storage Pattern
|
|
```yaml
|
|
volumes:
|
|
# Database: Local storage
|
|
- ./tdarr/server:/app/server
|
|
|
|
# Backups: Network storage
|
|
- /mnt/nas/tdarr/backups:/app/server/Tdarr/Backups
|
|
|
|
# Media: Network storage (read-mostly)
|
|
- /mnt/nas/media:/media
|
|
```
|
|
|
|
#### Application-Specific Fixes
|
|
```yaml
|
|
# Force SQLite to use different journal mode
|
|
environment:
|
|
- SQLITE_JOURNAL_MODE=DELETE # Less efficient but compatible
|
|
```
|
|
|
|
## Performance Considerations
|
|
|
|
### Local vs Network Storage
|
|
| Operation | Local SSD | Gigabit NFS | 10Gb NFS |
|
|
|-----------|-----------|-------------|----------|
|
|
| Database writes | <1ms | 10-50ms | 2-10ms |
|
|
| Config reads | <1ms | 5-15ms | 1-5ms |
|
|
| Large file reads | 500MB/s | 100MB/s | 800MB/s |
|
|
|
|
### When to Use Network Storage
|
|
- ✅ **Large static files** (media, backups)
|
|
- ✅ **Shared access** between multiple services
|
|
- ✅ **Centralized backups**
|
|
- ❌ **Frequent small writes** (databases, logs)
|
|
- ❌ **Applications requiring file locking**
|
|
|
|
## Troubleshooting
|
|
|
|
### Symptoms of Network FS Issues
|
|
- Database locked errors
|
|
- Slow application startup
|
|
- Intermittent connection failures
|
|
- File corruption on network interruption
|
|
|
|
### Diagnostic Commands
|
|
```bash
|
|
# Test file locking
|
|
flock /mnt/nas/test.lock -c "sleep 5" &
|
|
flock /mnt/nas/test.lock -c "echo success"
|
|
|
|
# Monitor network filesystem performance
|
|
iotop -ao
|
|
iostat -x 1
|
|
|
|
# Check mount options
|
|
mount | grep nfs
|
|
cat /proc/mounts | grep cifs
|
|
```
|
|
|
|
### Mount Optimization
|
|
```bash
|
|
# NFS optimizations
|
|
mount -t nfs -o rw,hard,intr,rsize=8192,wsize=8192,timeo=14 \
|
|
server:/path /mnt/point
|
|
|
|
# CIFS optimizations
|
|
mount -t cifs //server/share /mnt/point \
|
|
-o username=user,cache=loose,file_mode=0644,dir_mode=0755
|
|
``` |