The Pain of Managing Backups for Dozens of VMs
System administrators are no strangers to that “cold sweat” feeling when a critical VM suddenly fails, only to realize the latest backup is from… last week. I run a Proxmox homelab cluster with about 15 VMs and containers. While Proxmox Backup Server (PBS) is powerful, I still find it difficult when I need to quickly extract a few small config files in Windows or want a protection layer completely independent of the Hypervisor.
After several trials and errors, I chose UrBackup. It is an extremely reliable open-source Client-Server backup system. It allows for Image backups (for Windows) and File backups (for both Windows and Linux) with an impressive storage optimization mechanism.
Comparison of Popular Backup Solutions
Each approach has its own pros and cons. Understanding these helps you choose the right tool for specific problems:
1. Hypervisor-level Backup (like Proxmox Backup Server)
- Pros: Captures the entire VM without needing internal software installation (agentless).
- Cons: Mounting a 50-100GB image file just to retrieve a single text file is often slow and resource-intensive.
2. Script-based Backup (Rsync, Restic)
- Pros: Extremely lightweight and flexible—the top choice for pure Linux servers.
- Cons: Lacks a centralized management interface. When the number of servers reaches 20-30, checking which ones backed up successfully becomes a nightmare.
3. Client-Server Backup (UrBackup, Veeam)
- Pros: Monitor status via Web UI, supports incremental backups to save network bandwidth.
- Cons: Requires installing an Agent on the client machine. However, the UrBackup Agent is very lightweight and won’t cause system hangs.
Why UrBackup is Worth Your Time?
Even though it’s completely free, the features UrBackup offers truly exceeded my expectations:
Key Advantages:
- Deduplication: Suppose you have 10 identical Windows 10 VMs. Instead of using 300GB to store system files, UrBackup only uses about 35GB for the first original copy. Disk space savings can reach 70-80%.
- Image Backup for Windows: Back up the entire C: drive while the machine is running (Live backup). When needed, you can restore via the network or a recovery USB in just 15-20 minutes.
- Modern Web UI: The dashboard lists detailed information on which machines are online, the backup size of each, and error history.
Limitations:
- Linux Image backup still lags behind Windows, primarily relying on File backups.
- The configuration interface has many retention parameters, which can be confusing for beginners.
Deploying UrBackup Server with Docker
To keep the system tidy and portable, I always prioritize using Docker Compose. Here is the standard configuration for immediate deployment:
# Prepare the environment
mkdir -p ~/urbackup/data ~/urbackup/backups
# Create configuration file
cat <<EOF > ~/urbackup/docker-compose.yml
version: '3.8'
services:
urbackup:
image: urbackup/urbackup-server:latest
container_name: urbackup-server
restart: unless-stopped
environment:
- PUID=1000
- PGID=1000
- TZ=Asia/Ho_Chi_Minh
volumes:
- ./data:/var/urbackup
- ./backups:/media/backups
network_mode: "host"
EOF
# Start the system
cd ~/urbackup && docker compose up -d
Pro Tip: Using network_mode: "host" allows the Server to automatically detect Clients on the LAN without manual IP configuration. If using it on the Cloud (AWS, Azure), remember to open ports 55413 to 55415 on your firewall.
After starting, access http://<Your-IP>:55414. The first thing you should do is go to Settings -> Users to set up an Admin password immediately.
Installing the Client Agent
For Windows Machines
Simply download the installer (.msi) from the homepage and click Next. If the client and server are on the same LAN, they will “find” each other automatically. If the client is on a different network, right-click the UrBackup icon in the system tray, select Settings, and enter the Server’s IP address in the Internet Server Designator field.
For Linux Machines (Ubuntu/Debian)
UrBackup provides a very fast installation script via the command line. On the Web Admin, select Add Client -> Add new Internet client to get a unique installation code for each machine:
# Quick installation example command
TF=$(mktemp) && wget "http://<SERVER-IP>:55414/x?a=download_client&lang=en&clientid=1&authkey=xxxx" -O "$TF" && sudo sh "$TF"
To add a specific data directory (e.g., database or code), use the command:
urbackupclientctl add-backupdir -x -f -d /var/www/data_important
Real-world Optimization Tips
Through practical operation, I’ve gathered three golden rules for a smooth system:
- Use Smart File Systems: Store backups on ZFS or Btrfs partitions. Combining File System compression with UrBackup’s deduplication can save up to 60% of disk space compared to standard Ext4.
- Automate Cleanup: Don’t let disk space go to waste. Go to Settings -> Archiving to set up rules for automatically deleting old backups after 30 or 60 days.
- Client-side hashing: Enable this feature so the client calculates the hash before sending data. If the file already exists on the server, the client won’t need to re-upload it, significantly reducing network bandwidth usage.
Setting up UrBackup takes only 15 minutes, but it provides total peace of mind for your system. Remember to check the logs weekly to ensure everything is running as planned.

