BackupPC és un sistema de còpia de seguretat d’alt rendiment i nivell empresarial, de codi obert, dissenyat per fer còpies de seguretat de màquines Linux, Unix, Windows i macOS cap al disc d’un servidor. Està escrit principalment en Perl (amb extensions en C per a les parts crítiques de rendiment) i funciona com a dimoni al servidor.
La seva filosofia central és:
És adequat tant per a petites xarxes domèstiques com per a entorns corporatius amb centenars de màquines.
Versió documentada: 4.4.0 (20 de juny de 2020)
Llicència: GPL (codi obert)
Web oficial: https://backuppc.github.io/backuppc/
Dipòsit: https://github.com/backuppc/backuppc
| Característica | Descripció |
|---|---|
| Deduplicació (pool) | Fitxers idèntics es guarden una sola vegada, independentment de l’amfitrió o backup d’origen |
| Compressió | Compressió dels fitxers nous (no ja al pool). Impacte CPU baix |
| Sense client | No cal instal·lar res als clients; usa rsync, SMB, tar o FTP |
| Interfície web | Administració, navegació i restauració via CGI (Apache/lighttpd) |
| i18n | Interfície en català, anglès, francès, alemany, espanyol, italià, rus, japonès, xinès i altres |
| Incremental intel·ligent | Detecció de canvis per atributs (mtime, mida, uid, gid) o checksum MD5 complet |
| Deltes inversos | El backup més recent sempre és complet; els antics guarden els canvis inversos |
| Programació flexible | Planificació de full/incremental per cron intern, per amfitrió o global |
| Entorns mòbils | Suport per a portàtils amb DHCP i connexions intermitents |
| Notificació per correu | Avisos automàtics als usuaris si el seu PC no s’ha fet còpia recentment |
| Restauració flexible | Fitxer individual, ZIP/TAR, o restauració directa al client |
| ACL i xattr | Suport d’atributs estesos i llistes de control d’accés (via rsync) |
| RSS i mètriques | Exportació d’estat via RSS i dades de mètriques |
BackupPC no desa els fitxers de backup en directoris convencionals per amfitrió. En canvi, usa un pool global on cada fitxer s’identifica pel seu digest MD5 complet (16 bytes). Dos fitxers amb contingut idèntic apunten al mateix fitxer del pool, independentment d’on vinguin.
El pool de la versió 4 s’organitza en dos nivells de directori, 128 directoris per nivell (7 bits cada nivell), donant 16.384 directoris (128*128).
A diferència de la versió 3 (que usava deltes cap endavant i enllaços durs), la versió 4 usa deltes inversos:
Backup #4 (actual, complet)
Backup #3 = #4 + deltes de #3→#4
Backup #2 = #4 + deltes de #3→#4 + deltes de #2→#3
...Cada directori de backup conté únicament un fitxer attrib de mida zero, el nom del qual inclou el digest MD5
dels seus continguts. El pool conté el fitxer d’atributs real, que
guarda metadades de cada fitxer (permisos, propietari, mtime, digest de
contingut).
BackupPC 4 usa una versió modificada de rsync anomenada rsync_bpc (basada en rsync 3.0.9) al costat del servidor, amb una capa de codi C que emula les crides al sistema de fitxers per ser compatible amb l’emmagatzematge BackupPC. Això fa que tot el camí de dades de rsync sigui codi C compilat, molt més ràpid que Perl.
Extensió Perl en C que substitueix mòduls clau (FileZIO, PoolWrite, Attrib, AttribCache, PoolRefCnt). S’enllaça dinàmicament amb el procés Perl
principal.
| Component | Requisit |
|---|---|
| Sistema operatiu | Linux/Unix (Debian, Ubuntu, RHEL, Fedora, Arch, etc.) |
| Perl | ≥ 5.10 amb diversos mòduls CPAN |
| rsync_bpc | Versió modificada de rsync (cal compilar o instal·lar paquet) |
| BackupPC::XS | Extensió C per a Perl (cal compilar o instal·lar paquet) |
| Servidor web | Apache (mod_cgi o mod_cgid) o lighttpd amb suport CGI |
| Espai en disc | Variable (vegeu secció de càlcul d’espai) |
File::Path Compress::Zlib Archive::Zip
Digest::MD5 XML::RSS POSIX
File::Spec File::Find IO::Socket
Carp::Assert Net::FTP ...| Transport | Eina necessària al servidor |
|---|---|
| rsync | rsync_bpc (obligatori per rsync), ssh |
| SMB/Windows | smbclient (paquet Samba) |
| tar | tar, ssh o rsh |
| FTP | Net::FTP (mòdul Perl) |
| Sistema | Protocol recomanat |
|---|---|
| Linux/Unix/macOS | rsync sobre SSH |
| Windows XP/7/10/11 | SMB (Samba) o rsync amb Cygwin |
| NAS/dispositius | tar sobre SSH o FTP |
Una regla orientativa: amb deduplicació i compressió, BackupPC pot emmagatzemar 10-30 dies de backups d’una màquina ocupant l’equivalent a 1-2 vegades la mida total dels fitxers originals (en lloc de 10-30 vegades).
Factors que influeixen:
| Rol | Hostname | IP | Sistema |
|---|---|---|---|
| Servidor BackupPC | server |
10.0.2.10 |
Ubuntu Server 26.04 |
| Client | client |
10.0.2.20 |
Ubuntu Desktop 26.04 |
Adapta les IP i el hostname al teu entorn real.
Abans d’instal·lar qualsevol paquet, cal assegurar-se que el sistema està completament actualitzat per evitar conflictes de dependències.
Actualitza la llista de paquets:
sudo apt updateActualitza els paquets instal·lats:
sudo apt upgradeInstal·la les dependències:
sudo apt install apache2 apache2-utils libapache2-mod-perl2 \
glusterfs-client par2 perl smbclient rsync tar sendmail gcc \
zlib1g zlib1g-dev libapache2-mod-fcgid rrdtool git make \
perl-doc libarchive-zip-perl libfile-listing-perl \
libxml-rss-perl libcgi-session-perl libacl1-devsudo apt install backuppcLa instal·lació via paquet configura automàticament l’usuari backuppc, el servei systemd i la configuració bàsica
d’Apache.
Atura el servei backuppc
sudo systemctl stop backuppc.serviceEdita la configuració de backuppc
sudo nano -l /etc/backuppc/config.plModifica les línies 873 i 2124:
$Conf{XferMethod} = 'rsync';
$Conf{Language} = 'es';
Modifica la contrasenya de l’usuari backuppc
sudo htpasswd /etc/backuppc/htpasswd backuppcNew password: contrasenya
Re-type new password: contrasenyaModifica la configuració de backuppc a Apache.
sudo nano -l /etc/backuppc/apache.confCanvia la línia 22:
Require all granted
Inicia el servei backuppc
sudo systemctl start backuppc.serviceDona permís a Apache per escriure a la carpeta /etc/backuppc:
sudo mkdir -p /etc/systemd/system/apache2.service.dsudo tee /etc/systemd/system/apache2.service.d/override.conf > /dev/null << 'EOF'
[Service]
ReadWritePaths=/etc/backuppc
EOFRellegeix els unit files (.service, .socket, .timer, etc)
sudo systemctl daemon-reloadReinicia el servei Apache
sudo systemctl restart apache2.serviceInicia sessió amb l’usuari backuppc
sudo su backuppcCanvia de shell
bashCrea el directori ocult ssh al home de l’usuari
mkdir ~/.sshDesplaça’t al directori creat
cd ~/.sshGenera un parell de claus RSA
ssh-keygen -q -t rsa -b 4096 -N '' -C "Clau BackupPC" -f backuppc-emmagatzematgeModifica els permisos de la clau pública
chmod 400 backuppc-emmagatzematge.pubPer a cada client GNU/Linux del qual vulguem emmagatzemar còpies de seguretat
Amb la sessió de l’usuari backuppc iniciada copia la clau pública RSA
al client que, evidentment, ha d’estar en funcionament i ha de
tenir instal·lat el paquet ssh.
ssh-copy-id -i backuppc-emmagatzematge.pub root@10.0.2.20Resposta esperada:
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "backuppc-emmagatzematge.pub"
The authenticity of host '10.0.2.20 (10.0.2.20)' can't be established.
ED25519 key fingerprint is: SHA256:Ijscc6DRKJ7WlUAruAwFFKxpcy/9tZSUgWHHbIZH7Eo
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@10.0.2.20's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh -i ./backuppc-emmagatzematge 'root@10.0.2.20'"
and check to make sure that only the key(s) you wanted were added.Si en la màquina client no es pot iniciar sessió com a root:
sudo nano -l /etc/ssh/sshd_configModifica la línia 54:
PermitRootLogin yes
sudo systemctl restart ssh.serviceComprova que funcioni correctament. Si tot va bé no t’hauria de demanar cap contrasenya.
ssh -i backuppc-emmagatzematge root@10.0.2.20Resposta esperada:
backuppc@server:~/.ssh$ ssh -i backuppc-emmagatzematge root@10.0.2.20
Welcome to Ubuntu 26.04 LTS (GNU/Linux 7.0.0-27-generic x86_64)
* Documentation: https://docs.ubuntu.com
* Management: https://landscape.canonical.com
* Support: https://ubuntu.com/pro
No està activat el mateniment expandit de seguretat per a Applications
Es poden aplicar immediatament 0 actualitzacions.
Activeu ESM Apps per rebre actualitzacions de seguretat addicionals en el futur
Vegeu https://ubuntu.com/esm o executeu: sudo pro status
root@client:~# És imprescindible que el client tingui instal·lat rsync.
Aprofita per instal·lar en el client rsync
sudo apt install rsyncTanca el bash i la sessió de l’usuari backuppc prement dues vegades Ctrl+D
Obre un navegador d’Internet i accedeix a BackupPC
http://10.0.2.10/backuppc/Inicia sessió amb les credencials backuppc / contrasenya
Afegeix un host del qual vulguis emmagatzemar còpies de seguretat
Selecciona un host de la llista
Configura les carpetes que s’han de copiar
Inicia la còpia de seguretat
Confirma l’inici de la còpia
Resposta del servidor
Llista de còpies de seguretat
Explora una còpia de seguretat. Es poden restaurar fitxers seleccionats.
| Fitxer | Descripció |
|---|---|
/etc/BackupPC/config.pl |
Configuració global del servidor |
/etc/BackupPC/hosts |
Llista d’amfitrions a fer backup |
/etc/BackupPC/pc/<HOST>.pl |
Configuració específica per amfitrió |
# Directori de dades
$Conf{TopDir} = '/var/lib/BackupPC';
# Directori d'instal·lació
$Conf{InstallDir} = '/usr/share/backuppc';
# Nombre màxim de backups simultanis
$Conf{MaxBackups} = 4;
# Nombre màxim de backups simultanis d'usuari (iniciats manualment)
$Conf{MaxUserBackups} = 4;
# Protocol per defecte (rsync, smb, tar, ftp)
$Conf{XferMethod} = 'rsync';
# Programació de full backup (cada 7 dies, mínim 6 dies entre fulls)
$Conf{FullPeriod} = 7;
$Conf{FullKeepCnt} = 1;
$Conf{FullKeepCntMin} = 1;
$Conf{FullAgeMax} = 90;
# Programació d'incremental (cada dia, mínim 0.97 dies entre incrementals)
$Conf{IncrPeriod} = 1;
$Conf{IncrKeepCnt} = 6;
# Nivell de compressió (0=cap, 1-9)
$Conf{CompressLevel} = 3;
# Configuració SMTP per notificacions
$Conf{SendmailPath} = '/usr/sbin/sendmail';
$Conf{EMailUserDestDomain} = '@example.com';# host dhcp user moreUsers
servidor01 0 admin
portàtil01 1 usuari root,backup
windows-pc 0 adminpcCamps:
1 si usa IP dinàmica (DHCP)pc/<HOST>.pl)# Sobreescriu el mètode de transport per aquest host
$Conf{XferMethod} = 'rsync';
# Usuari SSH per connectar-se
$Conf{RsyncSshArgs} = ['-e', '/usr/bin/ssh -l root'];
# Directoris a fer backup
$Conf{RsyncShareName} = '/';
# Excloure directoris
$Conf{BackupFilesExclude} = {
'/' => ['/proc', '/sys', '/dev', '/tmp', '/var/tmp',
'/var/cache/apt', '/home/*/.cache'],
};
# Programació pròpia
$Conf{FullPeriod} = 14;
$Conf{IncrPeriod} = 1;$Conf{XferMethod} = 'rsync';
$Conf{RsyncClientPath} = '/usr/bin/rsync';
$Conf{RsyncSshArgs} = ['-e', '/usr/bin/ssh'];
$Conf{RsyncShareName} = '/';
$Conf{RsyncArgsExtra} = ['--acls', '--xattrs'];
$Conf{RsyncFullArgsExtra} = ['--checksum'];$Conf{XferMethod} = 'smb';
$Conf{SmbShareName} = 'C$';
$Conf{SmbShareUserName} = 'Administrador';
$Conf{SmbSharePasswd} = 'contrasenya';
$Conf{SmbClientPath} = '/usr/bin/smbclient';BackupPC suporta quatre mètodes de transport per extreure les dades dels clients:
El millor mètode. Avantatges:
Requereix accés SSH al client (o rsyncd al client per mode rsyncd).
# Configurar accés SSH sense contrasenya del servidor al client
sudo -u backuppc ssh-keygen -t ed25519
sudo -u backuppc ssh-copy-id root@client-linuxUsa smbclient per accedir a recursos compartits de
Windows. No cal res al client Windows (el recurs ADMIN$ o C$ ha d’estar
accessible).
Limitació: els incrementals SMB no detecten fitxers esborrats ni reanomenats (compara per mtime).
Executa tar al client via SSH/RSH i transmet la sortida
al servidor. Útil per a sistemes on rsync no és disponible.
Limitació igual que SMB per a incrementals.
Usa el mòdul Net::FTP per connectar-se a un servidor FTP
al client. Útil per a NAS i dispositius embebits.
La interfície web és la consola principal d’administració i accés d’usuaris.
Accés: http://servidor/BackupPC_Admin
L’autenticació es delega al servidor web (Apache htpasswd, LDAP, PAM, etc.). BackupPC llegeix el nom
d’usuari de la variable d’entorn REMOTE_USER.
Còpia completa de tots els fitxers del share definit. Configurable per periodicitat i nombre de còpies a conservar. BackupPC suporta caducitat exponencial: per exemple, conservar les últimes 4 setmanes i a més còpies amb 2, 4, 8 i 16 setmanes d’antiguitat.
Còpia dels fitxers que han canviat des de l’últim backup reeixit. Amb rsync, detecta canvis per atributs (uid, gid, mtime, modes, mida) i opcionalment per checksum MD5.
Quan un backup s’interromp o falla, el resultat s’etiqueta com a “partial”. A diferència de V3 (on s’eliminava), a V4 el partial es conserva i s’usa com a punt de partida del pròxim intent.
Client A: fitxer.iso (2 GB) ──┐
Client B: fitxer.iso (2 GB) ──┼──► Pool: 1 entrada (2 GB) + metadades
Backup #1 de A ──┘
Backup #2 de A ──/Els fitxers idèntics (per contingut MD5) s’emmagatzemen una sola vegada al pool, independentment del host o backup d’origen.
Tres opcions disponibles:
# Llistar backups d'un host
BackupPC_ls -h HOSTNAME
# Restaurar un fitxer concret
BackupPC_restore -h HOSTNAME -n NUM_BACKUP -s /ruta/original -d /ruta/destíLa funció d’arxivament permet exportar còpies de seguretat a dispositius externs (cinta, DVD, disc extern). S’usa per a backups de llarga durada offline.
# A config.pl o pc/archive-host.pl
$Conf{XferMethod} = 'archive';
$Conf{ArchiveDest} = '/mnt/tape';
$Conf{ArchiveComp} = 'gzip';
$Conf{ArchivePar} = 0;
$Conf{ArchiveSplit} = 0;L’arxivament es pot iniciar des de la interfície web o per línia d’ordres.
| Eina | Descripció |
|---|---|
BackupPC |
Dimoni principal |
BackupPC_ls |
Llista fitxers d’un backup (com ls -l) |
BackupPC_zcat |
Mostra contingut d’un fitxer del pool (amb descompressió) |
BackupPC_restore |
Restauració per línia d’ordres |
BackupPC_nightly |
Manteniment nocturn: neteja del pool, comptadors de referència |
BackupPC_refCountUpdate |
Actualitza comptadors de referència del pool |
BackupPC_fsck |
Verifica i repara comptadors de referència (cal aturar BackupPC) |
BackupPC_backupDuplicate |
Duplica un backup (per crear còpia completa) |
BackupPC_backupDelete |
Elimina un backup concret |
BackupPC_sendEmail |
Envia correus de recordatori manualment |
[Servidor BackupPC] <── SSH/rsync ──< [20 PCs Linux][BackupPC] ──SSH──> [Servidors Linux]
──SMB──> [PCs Windows]# Configuració per a portàtil amb IP dinàmica
$Conf{ClientNameAlias} = ''; # BackupPC buscarà per DHCP
# A hosts:
# portàtil01 1 usuari # dhcp=1BackupPC comprova periòdicament si el host és accessible. Quan el portàtil es connecta a la xarxa, s’inicia automàticament el backup pendent.
Backup diari ──> /var/lib/BackupPC (disc local RAID)
Setmanal ──> Archive ──> /mnt/disco-extern (rotatiu)No és un backup d’imatge de disc. BackupPC fa backup de fitxers, no de sectors de disc. No permet restaurar un sistema completament des de zero sense reinstal·lar primer el SO.
Incrementals SMB i tar no detecten esborrats. Només rsync és capaç de detectar fitxers esborrats i reanomenats en mode incremental.
Fitxers oberts/bloquejats a Windows. smbclient pot no poder accedir a fitxers oberts per
aplicacions (bases de dades, Outlook PST, etc.).
Xifrat de les dades al pool. BackupPC no xifra les dades al pool per defecte. Qualsevol usuari amb accés al directori de dades pot llegir els fitxers.
BackupPC_fsck requereix aturar el
servei. No pot executar-se mentre BackupPC funciona.
Rendiment en la primera còpia. El primer backup complet pot ser lent, especialment si cal calcular checksums MD5 de tots els fitxers.
Caché de checksums rsync_bpc (V4.4.0) no implementada completament. Planificada per a versions futures.
Eines de línia d’ordres poc amigables. Navegar
l’estructura interna del pool manualment és complex sense BackupPC_ls.
Desenvolupament estancat. L’última versió estable (4.4.0) és de 2020. El projecte té activitat a GitHub però sense releases majors recents.
Error: ssh: connect to host 10.0.2.20 port 22: Connection refusedSolució:
# Verificar SSH
sudo -u backuppc ssh -i /var/lib/backuppc/.ssh/id_rsa root@10.0.2.20
# Comprovar que la clau SSH del servidor és als authorized_keys del client
cat /root/.ssh/authorized_keys | grep backuppcCauses i solucions:
$Conf{CompressLevel} a 1
o 2$Conf{MaxBackups}BackupPC_nightly
manualment# Veure estadístiques del pool
BackupPC_nightly --verbose
# Verificar comptadors de referència
sudo systemctl stop backuppc
BackupPC_fsck
sudo systemctl start backuppc# Comprovar permisos
ls -la /usr/share/backuppc/cgi-bin/BackupPC_Admin
chmod +x /usr/share/backuppc/cgi-bin/BackupPC_Admin
# Comprovar logs d'Apache
tail -f /var/log/apache2/error.log
# Verificar que mod_cgi és actiu
sudo a2enmod cgi
sudo systemctl restart apache2# Sintaxi correcta a config.pl
$Conf{BackupFilesExclude} = {
'/' => ['/proc', '/sys', '/dev/pts'],
};
# Atenció: la clau és el share, no un directori genèric# Provar smbclient manualment
smbclient //PC-WINDOWS/C$ -U Administrador
# Si falla, revisar política de seguretat local de Windows (LanMan auth level)sudo systemctl stop backuppc
# Reconstruir comptadors (pot trigar hores en pools grans)
BackupPC_fsck --fix
sudo systemctl start backuppc# Augmentar el temps mínim de transferència
$Conf{ClientTimeout} = 7200; # 2 hores en lloc del valor per defecteLes dades al pool no estan xifrades. Cal
protegir el directori $Conf{TopDir} amb permisos adequats.
Només l’usuari backuppc hauria de tenir accés de
lectura.
Autenticació web. La interfície CGI delega l’autenticació a Apache. Usar HTTPS és imprescindible si s’accedeix des de fora de la xarxa local.
# Exemple amb autenticació bàsica + HTTPS
<Location /BackupPC_Admin>
AuthType Basic
AuthName "BackupPC"
AuthUserFile /etc/BackupPC/htpasswd
Require valid-user
SSLRequireSSL
</Location>SSH amb clau dedicada. L’accés SSH dels clients
s’ha de fer amb una clau dedicada a l’usuari backuppc, amb command= restringit si és possible.
Privilegis mínims al client. En lloc de fer SSH
com a root, es pot configurar sudo al client
per permetre rsync amb privilegis elevats només per als directoris
necessaris.
# Al client: /etc/sudoers.d/backuppc
backuppc ALL=(root) NOPASSWD: /usr/bin/rsync --server *Restricció de restauració. Un usuari normal a la
interfície web només pot restaurar fitxers del seu propi host (definit
al camp user del fitxer hosts).
La migració és transparent i no requereix passos manuals previs:
$Conf{PoolV3Enabled} = 1 (ho configura configure.pl automàticament si detecta pool V3).Notes de la migració:
| Recurs | URL |
|---|---|
| Web oficial | https://backuppc.github.io/backuppc/ |
| Documentació completa | https://backuppc.github.io/backuppc/BackupPC.html |
| Dipòsit principal | https://github.com/backuppc/backuppc |
| BackupPC::XS | https://github.com/backuppc/backuppc-xs |
| rsync-bpc | https://github.com/backuppc/rsync-bpc |
| Wiki comunitari | https://github.com/backuppc/backuppc/wiki |
| Releases | https://github.com/backuppc/backuppc/releases |