Common Issues
Connection Refused
failed to connect to server: connection refusedCauses: Server not running, wrong address, or firewall blocking port 50051.
# 1. Verify server is running
sudo systemctl status backup-server
ps aux | grep "xreplicator server"
# 2. Check agent config matches server address
# storage.grpc.server_address: "192.168.1.100:50051"
# 3. Test connectivity
telnet 192.168.1.100 50051
nc -zv 192.168.1.100 50051
# 4. Open firewall port
sudo ufw allow 50051
# or
sudo firewall-cmd --add-port=50051/tcp --permanent
sudo firewall-cmd --reloadLicense Validation Failed
FATAL: License validation failed# Check license file exists
ls -la /var/lib/backup/repo/license.json
# Verify hostname matches
hostname
# Inspect license content
cat /var/lib/backup/repo/license.json | jq .
# Check environment for public key
echo $LICENSE_PUBLIC_KEYSee Licensing for detailed resolution steps.
Slow Backup Speed
Symptoms: Backup taking too long, low throughput.
# Check throughput in logs
sudo journalctl -u backup-agent | grep "Throughput"
# Test raw network bandwidth
iperf3 -c backup-server-ipSolutions:
For single-server SQLite deployments, avoid starting several initial full backups at the same time. Start with one or two concurrent full backups, then increase only after checking server CPU, disk I/O, and network headroom.
# Increase batch size and workers
daemon:
pipeline:
batch_size: 400
workers: 8
compression:
level: 1 # Fastest compressionMultiple Full Backups Are Running Slowly
Symptoms: Several VMs start initial full backups together and each backup runs much slower than a single backup.
Causes: The backup server, repository disk, and metadata backend are shared resources. Initial full backups are the heaviest workload because they read, send, index, and store a large amount of data at once.
What to do:
- Limit initial full backups to a small number per backup server.
- Stagger first-time backups across maintenance windows.
- Keep
server.max_concurrent_backup_streamsset in single-server installs. - Use faster repository disks before increasing agent workers.
- For larger estates, use the PostgreSQL/object-storage deployment model and benchmark it with your storage and network before production rollout.
server:
max_concurrent_backup_streams: 2Backup Stuck In Progress
Symptoms: A backup remains in receiving data, pausing, or another
in-progress state after an agent crash, network interruption, or server
restart.
What to check:
sudo journalctl -u backup-agent -f
sudo journalctl -u backup-server -f
xreplicator snapshots --server localhost:50051If the agent is healthy, retry or resume the backup from the UI or CLI. If the job is stale and cannot be resumed, use the repository maintenance command provided for your metadata backend, then restart the backup server.
xreplicator repository --config /etc/xreplicator/server.yaml stale-jobs
xreplicator repository --config /etc/xreplicator/server.yaml stale-jobs --execute
sudo systemctl restart backup-serverRun the first command as a dry-run. Use --execute only after confirming the
agent is not still uploading.
Do not edit repository database files manually unless support asks you to do so.
Failed Or Partial Backup Cannot Be Deleted
Symptoms: A failed backup remains visible, deletion fails, or a partial restore point appears after an interrupted backup.
What to do:
- Prefer deleting failed restore points from the Web UI.
- If UI deletion fails, check the backup server logs before retrying.
- Run repository maintenance in dry-run mode before cleanup when available.
- Do not remove repository files or edit database rows manually.
Backup data can be shared between restore points. Manual deletion can break a later healthy restore point even when the failed restore point looks unrelated.
High Memory Usage
Symptoms: Daemon using excessive RAM.
daemon:
pipeline:
batch_size: 100
max_pipeline_memory_mb: 1024
max_io_queue_depth: 5
channel_buffer_mult: 2
workers: 2Snapshot Not Found
snapshot not found: <id># List available snapshots
xreplicator snapshots --server localhost:50051
# Check snapshot directory
ls -la /var/lib/backup/repo/snapshots/
# Retrieve specific snapshot
xreplicator snapshots --server localhost:50051 --id <snapshot-id>Verification Or Restore Uses The Wrong Snapshot
Symptoms: Verification or restore is attempted against a restore point that is still in progress, or the selected snapshot is not yet available.
Only completed restore points should be used for restore or verification. Wait until the backup is marked complete/available, refresh the Backups page, and select the completed restore point. If an in-progress restore point remains visible after an interruption, follow Backup Stuck In Progress above before running verification.
Cloud Sync Finds No Targets
Symptoms: Cloud Sync logs show messages such as no matching targets or no target mappings configured.
Cause: The service is reading the wrong cloud config path, or the
target_mappings section does not match the protected host/device.
xreplicator cloud-sync \
--repo /var/lib/backup/repo \
--cloud-config /etc/xreplicator/cloud-config.yaml \
--dry-run=trueFor scheduled jobs, make sure the systemd timer or cron entry includes the same
--cloud-config path used in manual tests.
Diagnostic Commands
Service Status
sudo systemctl status backup-agent
sudo systemctl status backup-server# Windows agent service
Get-Service XReplicatorAgentViewing Logs
# Individual services
sudo journalctl -u backup-agent -f
sudo journalctl -u backup-server -f
# All backup services at once
sudo journalctl -u backup-* -f# WinSW logs
Get-Content "C:\ProgramData\xreplicator\logs\XReplicatorAgent.err.log" -Tail 200
Get-Content "C:\ProgramData\xreplicator\logs\XReplicatorAgent.out.log" -Tail 200Testing Connectivity
# Basic TCP test
telnet backup-server-ip 50051
# gRPC reflection (if enabled)
grpcurl -plaintext backup-server-ip:50051 listResource Usage
# CPU and memory
top | grep xreplicator
# Disk I/O
iotop | grep xreplicator
# Network
nethogsValidating Config
cat /etc/xreplicator/agent.yaml
yamllint /etc/xreplicator/agent.yamlPerformance Tuning Reference
High Bandwidth (1 Gbps+)
daemon:
pipeline:
batch_size: 400
workers: 8
compression:
enabled: true
level: 1Low Bandwidth (10 Mbps)
daemon:
pipeline:
batch_size: 20
workers: 2
compression:
enabled: true
level: 3Memory-Constrained (1 GB Limit)
daemon:
pipeline:
max_io_queue_depth: 3
channel_buffer_mult: 2
max_pipeline_memory_mb: 1024
workers: 2
fixed_block_size_mb: 8
compression:
enabled: true
level: 1High Performance (4 GB+ Available)
daemon:
pipeline:
max_io_queue_depth: 20
channel_buffer_mult: 8
max_pipeline_memory_mb: 4096
workers: 8
fixed_block_size_mb: 16
compression:
enabled: true
level: 1