Se il backup vive solo sul server, non hai un backup: hai una seconda copia nello stesso punto di guasto. Per portare i dati dal server al PC locale in modo automatico, la scelta sensata è costruire un flusso pull o push con un trasferimento incrementale, un canale cifrato e un controllo periodico del restore. La differenza la fa il dettaglio operativo: cosa copi, quando, con quale retention e soprattutto come verifichi che il file sul desktop non sia corrotto o incompleto.
In ambito hosting la soluzione più robusta, nella maggior parte dei casi, è far partire il trasferimento dal PC locale verso il server, non il contrario. Così eviti di esporre il client in ingresso, riduci la superficie d’attacco e semplifichi firewall e NAT. Se però il PC deve ricevere i backup da un server remoto, il principio resta identico: il server prepara un archivio consistente, il client lo scarica in una cartella di destinazione, poi valida checksum, retention e spazio libero.
Architettura corretta: copia, consistenza, verifica
La domanda giusta non è “come copio un file”, ma “come garantisco che il backup sia coerente al momento del prelievo”. Se devi salvare database, configurazioni e file web, non basta un semplice cp o una sincronizzazione cieca. Serve almeno una di queste tre strategie: snapshot del filesystem, dump applicativo consistente o archivio di directory già ferme in scrittura.
Per hosting classico, il modello più pratico è questo:
- Il server crea una copia temporanea coerente: dump SQL, tar di directory, snapshot LVM/ZFS o esportazione del pannello di controllo.
- Il PC locale esegue il download automatico via SSH/SFTP, rsync o un job schedulato.
- Il client verifica checksum, dimensione e timestamp, poi applica una retention locale.
- Il sistema notifica il fallimento se una fase non torna.
Il punto critico è la verifica. Un backup che “sembra arrivato” ma non è ripristinabile vale zero. Per questo conviene salvare anche un file manifesto con nome archivio, data, dimensione e hash. È una piccola disciplina che evita ore di diagnosi quando il restore serve davvero.
Scelta del metodo: rsync, scp, SFTP, snapshot o dump
Non tutti i metodi sono equivalenti. scp è semplice, ma poco flessibile per retention e ripartenze. SFTP è utile se vuoi restare in ambito SSH con un client grafico o con script. rsync è il cavallo di battaglia quando devi fare trasferimenti incrementali, riprendere una copia interrotta e limitare il traffico. Per database e ambienti dinamici, invece, serve quasi sempre un dump applicativo prima della sincronizzazione.
Se il backup è un archivio già preparato sul server, rsync via SSH è la scelta più solida. Se devi scaricare un singolo file compresso ogni notte, anche scp può bastare. Se vuoi automatizzare e tenere sotto controllo file nuovi, file rimossi e bandwidth, rsync resta il punto di equilibrio migliore.
Una regola pratica: se il contenuto cambia spesso e il file è grande, usa rsync. Se il contenuto è un dump giornaliero già compresso, un trasferimento semplice può bastare. Se devi copiare dati aperti in scrittura, non copiare mai “a caldo” senza prima congelare la sorgente.
Flusso consigliato: server prepara, PC scarica
Il flusso più pulito è questo: il server genera il backup in una directory dedicata, il PC locale lo scarica con un job schedulato e il job locale conserva una rotazione di copie. In questo modo il PC non deve restare esposto in ingresso e puoi applicare una logica di fallback: se il backup di oggi fallisce, quello di ieri resta disponibile.
Un esempio concreto su Linux recente:
server-side: /srv/backup/export/app-2026-04-21.tar.gzIl server produce il file in una cartella dedicata, con permessi stretti, poi il PC locale lo scarica con rsync. La cartella remota non deve contenere altro. Meno rumore c’è, più facile è capire se un job ha fallito davvero.
Esempio pratico con rsync e SSH
Supponiamo che il server esponga una directory con archivi giornalieri e che il PC locale debba conservarli in /data/backups/server1. L’obiettivo è scaricare solo i file nuovi o cambiati, mantenere la struttura e cancellare localmente ciò che non esiste più sul server solo se la politica lo consente. Per prudenza, all’inizio conviene non usare la cancellazione automatica.
rsync -avh --partial --append-verify -e ssh backupuser@server.example.com:/srv/backup/export/ /data/backups/server1/Questa riga fa tre cose utili: preserva attributi e leggibilità, riprende trasferimenti interrotti e usa SSH come trasporto cifrato. Se vuoi schedularla con cron o systemd timer, il comando deve essere non interattivo, quindi l’autenticazione va preparata con chiave SSH dedicata e permessi stretti sul lato client.
Per evitare che il job si fermi su un file in scrittura, il server dovrebbe pubblicare solo archivi chiusi e rinominati in modo atomico. Un pattern semplice è scrivere prima in un file temporaneo e poi fare rename quando il dump è finito. Il client deve scaricare solo il nome finale, mai il file in lavorazione.
Credenziali e sicurezza: SSH, chiavi e permessi minimi
Se il backup passa in rete, il tema non è solo tecnico ma anche di esposizione. Usa un account dedicato al trasferimento, senza shell se non serve, e una chiave SSH separata per il backup. Sul PC locale la chiave privata deve stare con permessi restrittivi e, se possibile, protetta da passphrase e da un agente gestito in modo controllato.
La logica corretta è limitare il danno in caso di compromissione. L’utente di backup deve poter leggere solo la directory di export e non toccare il resto del server. Sul client, la destinazione deve essere scrivibile solo dal servizio che esegue il job e dal sistema di retention.
Se usi un pannello hosting, vale la stessa regola: esporta verso una directory dedicata, poi preleva con un utente separato. Non mischiare backup, log e dati operativi nello stesso percorso. Quando tutto è insieme, un errore di script può cancellare ciò che invece doveva essere conservato.
Automazione locale: cron, systemd timer e retention
Per l’automazione, cron è sufficiente se il flusso è semplice. Se vuoi logging migliore, retry e dipendenze più chiare, un systemd timer è spesso più pulito. L’importante è che il job faccia sempre le stesse tre cose: scarica, verifica, ruota.
Una retention minima sensata sul PC locale è giornaliera per pochi giorni, poi settimanale o mensile in base allo spazio disponibile. Non accumulare tutto “perché il disco è grande”: il disco si riempie sempre nel momento peggiore. Meglio definire una politica esplicita e misurare la crescita prima che diventi un problema.
Controlla sempre lo spazio libero prima del download. Un backup parziale lasciato a metà può essere peggio di nessun backup, perché induce a credere che il dato sia disponibile quando non lo è. La verifica deve essere automatica e il fallimento deve risultare evidente nei log o nelle notifiche.
Verifica del restore: l’unico test che conta davvero
La parte che quasi tutti rimandano è la prova di ripristino. Non basta vedere il file nel file manager. Devi estrarre un archivio, aprire un dump, controllare che le directory abbiano il numero atteso di file e, se possibile, ripristinare in una cartella di test o in un database di staging.
Per i file compressi, un controllo minimo è confrontare hash e dimensione. Per i dump SQL, il test utile è importare in un’istanza vuota e verificare che il numero di tabelle e righe sia coerente. Per gli archivi applicativi, il restore deve produrre una struttura leggibile, non solo un file “presente”.
Un backup non testato è una scommessa. Se il restore non è mai stato provato, il giorno del bisogno stai solo sperando che il processo sia corretto. La speranza non è un controllo.
Script di esempio completo: download, checksum, pulizia
Questo schema mostra l’idea di base: scaricare un archivio, verificarlo e conservare una copia locale con nome coerente. Adattalo alla tua struttura, ma mantieni la separazione tra sorgente, staging e archivio finale.
#!/bin/sh
set -eu
SRC="backupuser@server.example.com:/srv/backup/export/app-latest.tar.gz"
DST_DIR="/data/backups/server1"
TMP="$DST_DIR/.app-latest.tar.gz.tmp"
FINAL="$DST_DIR/app-latest.tar.gz"
mkdir -p "$DST_DIR"
rsync -avh --partial --append-verify -e ssh "$SRC" "$TMP"
sha256sum "$TMP" > "$TMP.sha256"
mv "$TMP" "$FINAL"
mv "$TMP.sha256" "$FINAL.sha256"Lo script è volutamente essenziale: non fa magie, ma separa il trasferimento dal nome finale e produce un hash locale. In un ambiente reale aggiungeresti controllo dello spazio, logging su file e notifica in caso di errore. Se il server pubblica anche il checksum ufficiale, confrontalo con quello scaricato invece di rigenerarlo soltanto in locale.
Quando usare il push dal server e quando il pull dal PC
Se il PC locale è sempre acceso e raggiungibile, il pull dal client è quasi sempre la scelta migliore. Se invece il PC è dietro NAT, cambia spesso rete o non vuoi aprire porte in ingresso, il push dal server verso il client può essere più pratico, ma richiede più attenzione su firewall e autenticazione.
In entrambi i casi, la priorità resta la stessa: il backup deve uscire da un punto di rischio e arrivare in un punto diverso, con una procedura ripetibile. Il dettaglio del verso del flusso conta meno della disciplina operativa: copia coerente, trasporto cifrato, verifica, retention e restore testato.
Errori tipici da evitare
Il primo errore è copiare direttamente il database live senza dump o snapshot. Il secondo è usare credenziali condivise tra più servizi. Il terzo è fidarsi della sola data di modifica del file. Il quarto è tenere i backup nella stessa partizione dei dati originali. Il quinto è non monitorare lo spazio libero sul PC locale.
Un altro errore frequente è lasciare che il job scarichi file parziali e li consideri buoni. Se la procedura non distingue tra staging e archivio finale, prima o poi un file incompleto finirà nel posto sbagliato. Il rename atomico e il file manifesto servono proprio a evitare questo tipo di ambiguità.
Schema operativo consigliato
- Genera il backup sul server in una directory dedicata e con nome univoco.
- Pubblica solo file chiusi e verificabili, non contenuti in lavorazione.
- Scarica dal PC locale con SSH e trasferimento incrementale.
- Verifica checksum, dimensione e presenza del file finale.
- Applica retention locale e conserva almeno una copia precedente utile al rollback.
- Prova periodicamente il restore su un ambiente di test.
Assunzione: il PC locale è un host Linux o comunque un sistema capace di eseguire job schedulati, SSH e verifica hash; se il tuo scenario è Windows o un NAS, il flusso resta valido ma cambiano gli strumenti di automazione.
Commenti (0)
Nessun commento ancora.
Segnala contenuto
Elimina commento
Eliminare definitivamente questo commento?
L'azione non si può annullare.