Skip to content

Architecture & components

NGBackup is a modern, Rust-native data-protection platform — an all-new, memory-safe codebase with significantly improved performance and far more features than legacy backup tools. It stays wire-, config- and catalog-compatible with Bacula Community 15 (so migration is painless), but ships under its own brand-neutral backup-* programs and a friendlier toolset.

A working installation is made of a few small services that talk to each other over the network. You don’t have to run them on the same machine — that separation is exactly what lets NGBackup scale from one server to thousands.

Architecture and data flow

ComponentProgramDefault portWhat it does
Directorbackup-dir9101The brain. Schedules jobs, applies policies, and coordinates the other services.
Storage Daemonbackup-sd9103Reads and writes backup data to disk, S3/object, NFS or tape — with global deduplication, immutability and encryption.
File Daemonbackup-fd9102The lightweight agent on each protected machine; streams its data to the Storage Daemon.
CatalogPostgreSQLThe database that records every file, job and volume, so restores are fast.
Consolebackup-consoleThe command-line interface to run and watch jobs.
Web consoleWeb ConsoleThe dark-mode web UI: dashboards, policy designer, restore explorer and a Ctrl+K command palette.

One job, three services. A backup flows like this: the Director starts the job → the File Daemon reads the data → the Storage Daemon deduplicates, encrypts and writes it → the Catalog records what happened. Restores run the same path in reverse.

Everything installs under /opt/backup/ by default:

PathContents
/opt/backup/bin/All programs (backup-dir, backup-sd, backup-fd, backup-console, …)
/opt/backup/etc/Configuration files (backup-dir.conf, backup-sd.conf, backup-fd.conf, backup-console.conf)
/opt/backup/plugins/File Daemon plugins (override with --plugin-dir)

The File Daemon can also run without a config file — fully flag-driven, ideal for automated and container deployments:

Terminal window
backup-fd --fd-address 127.0.0.1 --fd-port 9102 \
--sd-address 127.0.0.1 --sd-port 9103
ProgramUse it to…Bacula equivalent
backup-clidrive the Director from scripts
backup-copycopy/migrate volumes between poolsbcopy
backup-extractextract files straight from a volumebextract
backup-lslist the contents of a volumebls
backup-scanrebuild the catalog from volumesbscan
backup-dbcheckcheck and repair the catalogdbcheck
backup-dirjson · backup-sdjson · backup-fdjson · backup-consjsondump any config as JSON

Workload-specific protection (databases, hypervisors, Microsoft 365, …) is delivered by File Daemon plugins in /opt/backup/plugins/. Enable one in a FileSet, passing options as key=value pairs:

FileSet {
Name = "proxmox-cluster"
Include {
Options { Plugin = "proxmox: pve_host=10.0.0.10 vm=* backup_type=full" }
}
}

Each plugin documents its own backup and restore parameters — including Instant Recovery and cross-hypervisor restore (V2V). See Plugins.

Coming from Bacula? Your existing resources work as-is: NGBackup reads the same syntax (Director{}, Storage{}, Client{}, Job{}, FileSet{}) and can point at an existing catalog and volumes. See Migrating from Bacula.

Cloud and object storage targets

Connecting clients behind NAT or a firewall