Skip to main content

Troubleshooting Guide

Solve common issues with backups, SSH connections, caching, and system errors.

Authentication Issues

Symptom: Login fails with “Could not validate credentials” error.Possible causes:
  1. Wrong username or password
  2. User account deactivated
  3. Database corruption
  4. JWT token issues
Solutions:Reset admin password:
Then recreate admin user via first-run mechanism:
Check JWT secret key:
Symptom: With DISABLE_AUTHENTICATION=true, still prompted for login.Diagnosis:Check environment variables:
Check reverse proxy headers:
Common issues:Missing header from reverse proxy:
Wrong header name:
Security: Borg UI accessible without proxy:
Supported headers (from app/core/security.py:109-120):
  • X-Forwarded-User (default)
  • X-Remote-User
  • Remote-User
  • X-authentik-username

SSH Connection Issues

Symptom: SSH connection test fails with “Permission denied (publickey)”.Diagnosis:
Common causes:1. Public key not deployed to remote server:
2. Wrong username or hostname:
3. SSH key file missing:
4. Remote server permissions incorrect:
5. SELinux blocking (CentOS/RHEL):
Symptom: Connection fails with “Host key verification failed”.Solution:
Symptom: Connection test hangs or times out.Diagnosis:
Common causes:Firewall blocking SSH port:
Wrong port:
Network unreachable:

Backup Failures

Symptom: Backup fails with “Failed to create/acquire the lock” or “Timeout waiting for lock”.Cause: Another Borg process is using the repository, or stale lock file exists.Solutions:Wait for other operation to complete:
Break stale lock (if no operation is running):
Only break lock if you’re certain no other Borg process is running. Breaking an active lock can corrupt the repository!
Configure bypass lock (for read operations):
This allows browsing archives while backups are running (from migration 061_add_bypass_lock_on_info.py and 069_add_bypass_lock_on_list.py).
Symptom: Backup fails with timeout error after running for configured duration.Solutions:Increase backup timeout:
Check for stuck operations:
Optimize backup performance:
  • Use faster compression: --compression lz4
  • Exclude unnecessary files: --exclude '*.tmp'
  • Check network speed for remote repositories
Symptom: Backup fails with “No space left on device”.Diagnosis:
Solutions:Run compact to reclaim space:
Run prune to delete old archives:
Increase repository volume size:
Symptom: Backup fails during pre-backup or post-backup script execution.Diagnosis:
Common issues:Script timeout:
Missing dependencies:
Incorrect permissions:
Script errors:

Cache Issues

Symptom: Archive browsing is slow even after first load.Diagnosis:
Solutions:Redis not running:
Redis connection failed:
Fallback to in-memory cache:
Cache cleared or expired:
Symptom: Logs show “Failed to connect to Redis” or “Connection refused”.Solutions:Check Redis is listening:
Check network connectivity:
For external Redis:
Verify Redis URL format:
Symptom: Archive list or contents show outdated data after backup/prune.Solution:
Auto-clear cache after operations:
  • Cache is automatically cleared for a repository after prune/compact operations
  • Implementation: await cache_service.clear_repository(repo_id)

Repository Issues

Symptom: “Repository does not exist” or “Permission denied” when accessing repository.For local repositories:
For SSH repositories:
Common causes:
  1. Typo in repository path - Check path spelling
  2. Missing volume mount - Ensure path is mounted in docker-compose.yml
  3. Wrong permissions - Repository not readable by container user (UID 1000)
  4. SSH key not deployed - For remote repositories
Symptom: Borg errors mentioning “corrupted” or “integrity check failed”.Solutions:
Repository corruption is rare but serious. Always maintain offsite backups.
Run repository check:
Repair repository:
Rebuild index:

Performance Issues

Expected performance:
  • First browse: Depends on archive size (1-90 seconds)
  • Subsequent browses: 100ms with Redis cache
Solutions:Enable Redis cache:
Increase Redis memory:
Increase cache size:
Check cache hit rate:
Symptom: Container using excessive memory (>4GB).Diagnosis:
Solutions:Limit Redis memory:
Limit container memory:
Reduce cache size:
Clear cache:

System Errors

Diagnosis:
Common causes:Port already in use:
Volume mount permission error:
Database migration failed:
Symptom: “Database is locked” errors in logs.Cause: Multiple processes trying to write to SQLite simultaneously (rare with WAL mode).Solutions:

Getting Help

When reporting issues, include:
Community support:

Security

Authentication and SSH troubleshooting

Performance

Cache and timeout optimization

Maintenance

Database and log cleanup

SSH Keys Guide

SSH connection setup