# BackupPC

# 1. Què és BackupPC?

![Logo BackupPC](https://proferamon.com/tic/imatges/backuppc/backuppc01.png)

**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:

- **No cal programari al client.** Utilitza protocols estàndard (rsync, SMB/Samba, tar, FTP) ja presents als sistemes operatius.
- **Deduplicació de dades (pooling).** Fitxers idèntics entre múltiples còpies de seguretat (del mateix amfitrió o d'amfitrions diferents) s'emmagatzemen una sola vegada.
- **Gestió centralitzada.** Tot es gestiona des del servidor, incloent-hi una interfície web.

É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>

# 2. Característiques principals

| 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 |

# 3. Arquitectura i disseny intern

## 3.1. Emmagatzematge: el Pool

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).

## 3.2. Deltes inversos (V4+)

A diferència de la versió 3 (que usava deltes cap endavant i enllaços durs), la versió 4 usa **deltes inversos**:

- El backup **més recent sempre és complet** (filled).
- Els backups antics contenen els **canvis necessaris per reconstruir** aquell estat a partir del backup complet posterior.
- Avantatge: restaurar el backup més recent (el més usat) no requereix fusionar res.

```ini
Backup #4 (actual, complet)
Backup #3 = #4 + deltes de #3→#4
Backup #2 = #4 + deltes de #3→#4 + deltes de #2→#3
...
```

## 3.3. Fitxers d'atributs (attrib)

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).

## 3.4. rsync_bpc

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.

## 3.5. BackupPC::XS

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.

# 4. Requisits

## Servidor

| 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) |

## Mòduls Perl necessaris

```ini
File::Path          Compress::Zlib      Archive::Zip
Digest::MD5         XML::RSS            POSIX
File::Spec          File::Find          IO::Socket
Carp::Assert        Net::FTP            ...
```

## Eines opcionals per transport

| 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) |

## Clients (sense programari addicional per defecte)

| 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 |

## Càlcul d'espai en disc

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:

- Percentatge de fitxers idèntics entre màquines (com més homogeni l'entorn, millor)
- Percentatge de fitxers que canvien entre backups
- Tipus de dades (textos comprimeixen molt; imatges/vídeos, poc)

# 5. Instal·lació

## 5.1. Escenari del document

| 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 |

> [!NOTE]
> Adapta les IP i el hostname al teu entorn real.

## 5.2. Actualitza el sistema

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:

```bash
sudo apt update
```

Actualitza els paquets instal·lats:

```bash
sudo apt upgrade
```

## 5.3. Instal·la dependències

Instal·la les dependències:

```bash
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-dev
```

## 5.4. Instal·la BackupPC

```bash
sudo apt install backuppc
```

La instal·lació via paquet configura automàticament l'usuari `backuppc`, el servei systemd i la configuració bàsica d'Apache.

![Tria del servidor web](https://proferamon.com/tic/imatges/backuppc/backuppc02.png)

![Usuari administrador](https://proferamon.com/tic/imatges/backuppc/backuppc03.png)

Atura el servei backuppc

```bash
sudo systemctl stop backuppc.service
```

Edita la configuració de backuppc

```bash
sudo nano -l /etc/backuppc/config.pl
```

Modifica les línies 873 i 2124:

```nano
$Conf{XferMethod} = 'rsync';
$Conf{Language} = 'es';
```

Modifica la contrasenya de l'usuari backuppc

```bash
sudo htpasswd /etc/backuppc/htpasswd backuppc
```

```ini
New password: contrasenya
Re-type new password: contrasenya
```

Modifica la configuració de backuppc a Apache. 

```bash
sudo nano -l /etc/backuppc/apache.conf
```

Canvia la línia 22:

```nano
Require all granted
```

Inicia el servei backuppc

```bash
sudo systemctl start backuppc.service
```

## 5.5. Permisos d'Apache

Dona permís a Apache per escriure a la carpeta `/etc/backuppc`:

```bash
sudo mkdir -p /etc/systemd/system/apache2.service.d
```

```bash
sudo tee /etc/systemd/system/apache2.service.d/override.conf > /dev/null << 'EOF'
[Service]
ReadWritePaths=/etc/backuppc
EOF
```

Rellegeix els *unit files* (.service, .socket, .timer, etc)

```bash
sudo systemctl daemon-reload
```

Reinicia el servei Apache

```bash
sudo systemctl restart apache2.service
```

## 5.6. Crea una clau RSA de l'usuari backuppc

Inicia sessió amb l'usuari backuppc

```bash
sudo su backuppc
```

Canvia de shell

```bash
bash
```

Crea el directori ocult ssh al home de l'usuari

```bash
mkdir ~/.ssh
```

Desplaça't al directori creat

```bash
cd ~/.ssh
```

Genera un parell de claus RSA

```bash
ssh-keygen -q -t rsa -b 4096 -N '' -C "Clau BackupPC" -f backuppc-emmagatzematge
```

Modifica els permisos de la clau pública

```bash
chmod 400 backuppc-emmagatzematge.pub
```

## 5.7. Copia la clau pública al client

Per 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`**. 

```bash
ssh-copy-id -i backuppc-emmagatzematge.pub root@10.0.2.20
```

Resposta esperada:

```ini
/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.
```

> [!NOTE]
> Si en la màquina client no es pot iniciar sessió com a root:
>
> ```bash
> sudo nano -l /etc/ssh/sshd_config
> ```
>
> Modifica la línia 54:
>
>```nano
>     PermitRootLogin yes
> ```
>
> ```bash
> sudo systemctl restart ssh.service
> ```
> 

Comprova que funcioni correctament. Si tot va bé no t'hauria de demanar cap contrasenya.

```bash
ssh -i backuppc-emmagatzematge root@10.0.2.20
```

Resposta esperada:

```ini
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:~# 
```

> [!WARNING]
> És imprescindible que el client tingui instal·lat rsync.
 
Aprofita per instal·lar en el client rsync

```bash
sudo apt install rsync
```

Tanca el bash i la sessió de l’usuari backuppc prement dues vegades Ctrl+D

## 5.8. Accedeix a BackupPC i configura els clients

Obre un navegador d'Internet i accedeix a BackupPC

```ini
http://10.0.2.10/backuppc/
```

Inicia sessió amb les credencials backuppc / contrasenya

![Inicia sessió](https://proferamon.com/tic/imatges/backuppc/backuppc04.png)

---

Afegeix un host del qual vulguis emmagatzemar còpies de seguretat

![Afegeix un host](https://proferamon.com/tic/imatges/backuppc/backuppc05.png)

---

Selecciona un host de la llista

![Selecciona un host](https://proferamon.com/tic/imatges/backuppc/backuppc06.png)

---

Configura les carpetes que s'han de copiar

![Configura una còpia de seguretat](https://proferamon.com/tic/imatges/backuppc/backuppc07.png)

---

Inicia la còpia de seguretat

![Inicia la còpia](https://proferamon.com/tic/imatges/backuppc/backuppc08.png)

---

Confirma l'inici de la còpia

![Confirma la còpia](https://proferamon.com/tic/imatges/backuppc/backuppc09.png)

---

Resposta del servidor

![Resposta ok del servidor](https://proferamon.com/tic/imatges/backuppc/backuppc10.png)

---

Llista de còpies de seguretat

![Còpia completada](https://proferamon.com/tic/imatges/backuppc/backuppc11.png)

---

Explora una còpia de seguretat. Es poden restaurar fitxers seleccionats.

![Explora una còpia de seguretat](https://proferamon.com/tic/imatges/backuppc/backuppc12.png)

# 6. Configuració

## 6.1. Fitxers de configuració principals

| 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ó |

## 6.2. config.pl — Paràmetres essencials

```ini
# 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';
```

## 6.3. hosts — Definició de clients

```ini
# host        dhcp    user     moreUsers
servidor01    0       admin
portàtil01    1       usuari   root,backup
windows-pc    0       adminpc
```

Camps:

- **host**: nom DNS o IP del client
- **dhcp**: `1` si usa IP dinàmica (DHCP)
- **user**: usuari responsable (rep notificacions per correu)
- **moreUsers**: usuaris addicionals que poden fer restore via web

## 6.4. Configuració per host (`pc/<HOST>.pl`)

```ini
# 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;
```

## 6.5. Configuració rsync (paràmetres clau)

```ini
$Conf{XferMethod}         = 'rsync';
$Conf{RsyncClientPath}    = '/usr/bin/rsync';
$Conf{RsyncSshArgs}       = ['-e', '/usr/bin/ssh'];
$Conf{RsyncShareName}     = '/';
$Conf{RsyncArgsExtra}     = ['--acls', '--xattrs'];
$Conf{RsyncFullArgsExtra} = ['--checksum'];
```

## 6.6. Configuració SMB/Windows

```ini
$Conf{XferMethod}     = 'smb';
$Conf{SmbShareName}   = 'C$';
$Conf{SmbShareUserName} = 'Administrador';
$Conf{SmbSharePasswd} = 'contrasenya';
$Conf{SmbClientPath}  = '/usr/bin/smbclient';
```

# 7. Protocols de transport

BackupPC suporta quatre mètodes de transport per extreure les dades dels clients:

## 7.1. rsync (recomanat per Linux/Unix/macOS)

El millor mètode. Avantatges:

- Detecció de canvis precisa (atributs + checksum opcional)
- Suport d'ACL i xattrs
- Eficient en amplada de banda (transmissió de blocs modificats)
- Detecta fitxers esborrats, nous i reanomenats en incrementals

Requereix accés SSH al client (o rsyncd al client per mode `rsyncd`).

```bash
# 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-linux
```

## 7.2. SMB (Windows)

Usa `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).

## 7.3. tar

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.

## 7.4. FTP

Usa el mòdul `Net::FTP` per connectar-se a un servidor FTP al client. Útil per a NAS i dispositius embebits.

# 8. Interfície web (CGI)

La interfície web és la consola principal d'administració i accés d'usuaris.

**Accés:** `http://servidor/BackupPC_Admin`

## Funcions d'administrador

- Veure estat de tots els hosts (últim backup, errors, mida)
- Iniciar/cancel·lar backups manualment
- Editar configuració global i per host
- Afegir/eliminar hosts
- Consultar logs detallats per host i backup
- Navegar pels fitxers de qualsevol backup
- Restaurar fitxers (descàrrega directa, ZIP/TAR, o push al client)
- Veure mètriques de pool i ús de disc
- Feed RSS d'estat

## Funcions d'usuari normal

- Veure els seus backups
- Iniciar backup manual del seu PC
- Navegar i restaurar fitxers propis

## Autenticació

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`.

# 9. Còpia de seguretat: tipus i funcionament

## 9.1. Full backup

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.

## 9.2. Incremental backup

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.

## 9.3. Partial backup (V4)

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.

## 9.4. Pool i deduplicació

```ini
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.

# 10. Restauració de fitxers

## 10.1. Via interfície web

Tres opcions disponibles:

1. **Descàrrega directa**: fitxer individual directament des del navegador
2. **Arxiu ZIP o TAR**: selecció múltiple de fitxers/directoris per descarregar com a arxiu comprimit
3. **Restore directe al client**: envia els fitxers de tornada al client via SMB o tar/SSH

## 10.2. Via línia d'ordres

```bash
# 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í
```

# 11. Arxivament (Archive)

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.

## Configuració d'un amfitrió d'arxivament

```ini
# 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.

# 12. Eines de 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 |

# 13. Casos d'ús típics

## Cas 1: Servidor de còpies per a una xarxa d'aula Linux

```ini
[Servidor BackupPC] <── SSH/rsync ──< [20 PCs Linux]
```

- Transport: rsync sobre SSH
- Programació: full setmanal + incremental diari
- Usuari backuppc amb clau SSH configurada a tots els clients
- Interfície web per a l'administrador

## Cas 2: Entorn mixt Linux + Windows

```ini
[BackupPC] ──SSH──> [Servidors Linux]
           ──SMB──> [PCs Windows]
```

- Linux: rsync
- Windows: smbclient (accés a C$, D$, etc.)
- Notificacions per correu als usuaris

## Cas 3: Backup de portàtils (DHCP/mòbil)

```ini
# Configuració per a portàtil amb IP dinàmica
$Conf{ClientNameAlias} = '';  # BackupPC buscarà per DHCP
# A hosts:
# portàtil01   1   usuari    # dhcp=1
```

BackupPC comprova periòdicament si el host és accessible. Quan el portàtil es connecta a la xarxa, s'inicia automàticament el backup pendent.

## Cas 4: Backup cap a disc extern rotatiu

```ini
Backup diari ──> /var/lib/BackupPC (disc local RAID)
Setmanal     ──> Archive ──> /mnt/disco-extern (rotatiu)
```

## Cas 5: Servidor de fitxers NAS

- Transport FTP o rsync sobre SSH (si el NAS suporta SSH)
- Backup de shares NFS/CIFS muntats al servidor

# 14. Limitacions conegudes

1. **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.

2. **Incrementals SMB i tar no detecten esborrats.** Només rsync és capaç de detectar fitxers esborrats i reanomenats en mode incremental.

3. **Fitxers oberts/bloquejats a Windows.** `smbclient` pot no poder accedir a fitxers oberts per aplicacions (bases de dades, Outlook PST, etc.).

4. **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.

5. **`BackupPC_fsck` requereix aturar el servei.** No pot executar-se mentre BackupPC funciona.

6. **Rendiment en la primera còpia.** El primer backup complet pot ser lent, especialment si cal calcular checksums MD5 de tots els fitxers.

7. **Caché de checksums rsync_bpc** (V4.4.0) no implementada completament. Planificada per a versions futures.

8. **Eines de línia d'ordres poc amigables.** Navegar l'estructura interna del pool manualment és complex sense `BackupPC_ls`.

9. **Desenvolupament estancat.** L'última versió estable (4.4.0) és de 2020. El projecte té activitat a GitHub però sense releases majors recents.

# 15. Problemàtiques habituals i solucions

## Problema: El backup falla amb "Can't connect to host"

```ini
Error: ssh: connect to host 10.0.2.20 port 22: Connection refused
```

**Solució:**

```bash
# 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 backuppc
```

## Problema: Backup molt lent

**Causes i solucions:**

- Compressió massa alta: reduir `$Conf{CompressLevel}` a 1 o 2
- Massa backups simultanis: ajustar `$Conf{MaxBackups}`
- Pool fragmentat: executar `BackupPC_nightly` manualment

## Problema: El pool creix sense control

```bash
# Veure estadístiques del pool
BackupPC_nightly --verbose

# Verificar comptadors de referència
sudo systemctl stop backuppc
BackupPC_fsck
sudo systemctl start backuppc
```

## Problema: Interfície web "Forbidden" o "500 Internal Server Error"

```bash
# 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
```

## Problema: Fitxers exclosos no s'exclouen

```ini
# Sintaxi correcta a config.pl
$Conf{BackupFilesExclude} = {
    '/' => ['/proc', '/sys', '/dev/pts'],
};
# Atenció: la clau és el share, no un directori genèric
```

## Problema: Backup Windows falla per credencials SMB

```bash
# Provar smbclient manualment
smbclient //PC-WINDOWS/C$ -U Administrador
# Si falla, revisar política de seguretat local de Windows (LanMan auth level)
```

## Problema: Errors de "reference count" al pool

```bash
sudo systemctl stop backuppc
# Reconstruir comptadors (pot trigar hores en pools grans)
BackupPC_fsck --fix
sudo systemctl start backuppc
```

## Problema: Missatge "Xfer too slow, aborted"

```ini
# Augmentar el temps mínim de transferència
$Conf{ClientTimeout} = 7200;   # 2 hores en lloc del valor per defecte
```

# 16. Seguretat

## Consideracions importants

1. **Les 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.

2. **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.

   ```ini
   # Exemple amb autenticació bàsica + HTTPS
   <Location /BackupPC_Admin>
       AuthType Basic
       AuthName "BackupPC"
       AuthUserFile /etc/BackupPC/htpasswd
       Require valid-user
       SSLRequireSSL
   </Location>
   ```

3. **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.

4. **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.

   ```bash
   # Al client: /etc/sudoers.d/backuppc
   backuppc ALL=(root) NOPASSWD: /usr/bin/rsync --server *
   ```

5. **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`).

# 17. Migració de V3 a V4

La migració és transparent i no requereix passos manuals previs:

1. Instal·lar BackupPC V4.
2. Verificar que `$Conf{PoolV3Enabled} = 1` (ho configura `configure.pl` automàticament si detecta pool V3).
3. En el primer backup de cada host, BackupPC crea una còpia completa en format V4 a partir de l'últim backup V3.
4. Els backups V3 antics segueixen sent accessibles per a restauració.
5. Amb el temps, els backups V3 caduquen i desapareixen.

**Notes de la migració:**

- La duplicació inicial pot trigar molt (cal llegir tots els fitxers V3).
- Els fitxers del pool V3 es mouen al pool V4 (no es duplica espai innecessàriament).
- No es recomana fer downgrade V4→V3.

# 18. Recursos i documentació

| 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> |

#### Versions d'aquest document

+ HTML - [backuppc.html](https://proferamon.com/tic/backuppc.html)
+ PDF - [backuppc.pdf](https://proferamon.com/tic/docs/backuppc.pdf)
+ ODT - [backuppc.odt](https://proferamon.com/tic/odt/backuppc.odt)
+ MD - [backuppc.md](https://proferamon.com/tic/md/backuppc.md)

[Domini Públic (CC0)](https://creativecommons.org/publicdomain/zero/1.0/deed.ca)

