Guide Pratiche

Trasferire File di Grandi Dimensioni tra Server Linux con rsync via SSH: Guida Pratica e Sicura

  • Tempo di lettura: 13 minuti
  • Team Hostragons
Trasferire File di Grandi Dimensioni tra Server Linux con rsync via SSH: Guida Pratica e Sicura

Il comando rsync via SSH rappresenta una delle soluzioni più efficaci e affidabili per trasferire file voluminosi tra due server Linux. Che si tratti di siti web da centinaia di GB, archivi di backup, cartelle media o dati applicativi, rsync offre un vantaggio significativo rispetto ai metodi tradizionali perché trasferisce solo i blocchi modificati, riducendo drasticamente i tempi. In pratica, i file vengono sincronizzati dal server sorgente al server di destinazione tramite un tunnel SSH cifrato; se la connessione si interrompe, il trasferimento può essere ripreso da dove si era fermato.

Durante migrazioni di server, upgrade di hosting, cambi di datacenter o operazioni di backup, la velocità è importante tanto quanto l’integrità dei dati. Scaricare un intero archivio e poi ricaricarlo comporta inutili perdite di tempo e, in caso di errori di rete, potrebbe costringerti a ricominciare da capo. rsync mantiene timestamp, permessi, proprietà e struttura delle cartelle, motivo per cui viene scelto quotidianamente da sysadmin Linux, team DevOps e specialisti web hosting.

In questa guida analizzeremo passo passo il trasferimento di file di grandi dimensioni tra due server Linux usando rsync via SSH, con esempi pratici di comando. Vedremo anche i parametri per ottimizzare le performance, controlli di sicurezza, scenari di errore, metodi di test e checklist da seguire prima di passare in produzione. Se stai pianificando una migrazione verso un nuovo VPS o hosting, assicurati prima di avere abbastanza spazio su disco, accesso SSH e permessi utente corretti su entrambi i server. Per la scelta dell’infrastruttura consulta Soluzioni server VPS Hostragons e Pacchetti di Hosting Linux.

Cosa è rsync e perché è la scelta migliore per trasferire file voluminosi?

rsync è uno strumento da riga di comando estremamente potente per sincronizzare file e directory localmente o tra server remoti. Il suo vero punto di forza è l’algoritmo di trasferimento delta: invece di inviare ogni volta l’intero file, trasmette solo le parti che sono cambiate. Ad esempio, se un backup di 80 GB ha solo 2 GB di dati nuovi, rsync invierà solo quei blocchi, ottimizzando tempo e banda.

SSH aggiunge la crittografia al trasferimento: rsync non invia i dati in chiaro ma li protegge durante il viaggio. Questo è vitale per dati sensibili come informazioni clienti, ordini e-commerce, archivi media, backup database e file applicativi riservati. In hosting, la sicurezza non si limita ai certificati SSL dei siti web (certificato SSL), ma riguarda anche le comunicazioni tra server: per i trasferimenti file scegli sempre la crittografia SSH.

rsync è molto più flessibile di FTP o download/upload manuali: preserva permessi, può trasferire link simbolici, cancellare sul target i file rimossi dal source, limitare la banda e simulare il trasferimento prima di eseguirlo. Questo livello di controllo è fondamentale quando si trattano file voluminosi o procedure a rischio.

Quando usare rsync via SSH?

rsync via SSH è ideale quando hai file molto grandi, numerosi o che cambiano spesso. Per una semplice cartella di immagini, SFTP manuale può bastare, ma con migliaia di file, permessi diversi e archivi pesanti rsync è molto più affidabile.

  • Stai migrando un sito da un vecchio server a un nuovo VPS.
  • Devi trasferire directory con migliaia di file media (es. uploads WordPress).
  • Copi backup periodici verso un server remoto.
  • Cambi datacenter o provider hosting.
  • Sincronizzi file applicativi tra ambienti di produzione e backup.
  • Hai bisogno di trasferimenti lunghi, con rischio di disconnessione.

Ad esempio, scaricare una cartella media da 250 GB sul tuo PC e poi caricarla sul nuovo server raddoppia il tempo e mette sotto stress la tua connessione domestica. Con rsync, il trasferimento avviene direttamente tra i due server, eliminando passaggi intermedi.

Preparativi essenziali prima di iniziare

Conoscere il comando non basta: controlla sempre le condizioni dei server sorgente e destinazione per ridurre rischi di perdita dati o trasferimenti interrotti. In produzione, questi check sono obbligatori.

1. Verifica l’accesso SSH

Devi poter collegarti al server di destinazione via SSH dal server sorgente. Prova con: ssh utente@ip-destinazione. Se SSH usa una porta diversa da 22, prova: ssh -p 2222 utente@ip-destinazione. Se la connessione fallisce, rsync non funzionerà. Controlla firewall, Fail2ban, porta SSH, permessi utente e autenticazione (password o chiave).

2. Controlla che rsync sia installato

La maggior parte delle distribuzioni Linux include rsync, ma verifica con rsync --version. Su Debian/Ubuntu: apt install rsync. Su AlmaLinux, Rocky Linux o CentOS: dnf install rsync o yum install rsync. Su VPS Hostragons basati su Linux l’installazione richiede pochi secondi.

3. Calcola lo spazio su disco

Se il server di destinazione non ha spazio sufficiente, il trasferimento si interrompe. Verifica la dimensione della directory sorgente con du -sh /source/dir e lo stato disco sul target con df -h. Oltre allo spazio per i file, lascia un margine per file temporanei e log. Per 500 GB di dati, pianifica almeno 550-600 GB liberi sul target.

4. Pianifica servizi critici e file modificabili

Su siti attivi, i file possono cambiare durante il trasferimento (es. upload utenti, cache, log). Un buon approccio è trasferire prima i dati principali, mettere il sito in modalità manutenzione e poi eseguire un ultimo rsync. Così riduci la downtime a pochi minuti. Per siti WordPress consulta anche Guida al trasferimento dell'hosting WordPress.

Comando base rsync: trasferimento tra due server

La sintassi più usata è: rsync -avz /source/dir/ utente@ip-destinazione:/dest/dir/. Il flag -a attiva la modalità archivio (preserva permessi, timestamp, link simbolici), -v mostra output dettagliato, -z comprime i dati durante il trasferimento. La slash finale è importante: /source/dir/ copia il contenuto della directory, /source/dir copia la directory stessa sotto il target.

Esempio: vuoi trasferire i file web da /var/www/site/public_html/ (180 GB) al nuovo server nella stessa posizione. Il comando sarà: rsync -avz /var/www/site/public_html/ root@203.0.113.20:/var/www/site/public_html/. Il trasferimento avviene via SSH.

Se non vuoi usare root, crea un utente con permessi di scrittura sulla directory (es. deploy) e assegna la proprietà della cartella. In produzione, evitare l’uso diretto di root è consigliato per motivi di sicurezza.

Parametri consigliati per trasferimenti sicuri e resilienti con rsync

Solo il comando base non basta per trasferimenti complessi. Per gestire disconnessioni, file parziali, cancellazioni errate o reti lente, usa parametri aggiuntivi:

rsync -aHAXv --numeric-ids --partial --progress --append-verify -e ssh /source/dir/ utente@ip-destinazione:/dest/dir/

Qui -a è archivio, -H preserva hard link, -A mantiene permessi ACL, -X salva attributi estesi. --numeric-ids usa gli ID numerici di utenti e gruppi (utile se i nomi differiscono tra server). --partial mantiene i file incompleti. --progress visualizza lo stato. --append-verify permette di continuare e verificare i file grandi.

Non tutti i parametri sono necessari sempre: per siti semplici -aHAX può bastare, mentre applicazioni con permessi speciali richiedono ACL e attributi estesi. Per questo è importante testare prima il trasferimento.

Come gestire il trasferimento con SSH su porta diversa

Se SSH non usa la porta 22, va specificata nel comando rsync. Esempio: rsync -avz -e ssh -p 2222 /source/dir/ utente@ip-destinazione:/dest/dir/. Ma la sintassi corretta è: rsync -avz -e 'ssh -p 2222' /source/dir/ utente@ip-destinazione:/dest/dir/.

Occhio alle virgolette: in terminale vanno usate correttamente. Se usi chiavi SSH, aggiungi -i: rsync -avz -e 'ssh -p 2222 -i /root/.ssh/id_rsa' /source/dir/ utente@ip-destinazione:/dest/dir/. Questa modalità è comune in automazioni e backup programmati via cron.

Test prima del trasferimento: uso di --dry-run

Per trasferimenti di grandi dati, il passo più professionale è usare --dry-run, che simula il trasferimento senza copiare realmente i file. Così puoi vedere quali file verranno trasferiti, directory create e potenziali errori.

Esempio: rsync -avz --dry-run /var/www/site/ utente@ip-destinazione:/var/www/site/. Ottieni un report di file e directory coinvolte. Se usi --delete, il dry-run è ancora più importante: --delete cancella sul target i file assenti sul source, quindi va testato con attenzione.

La sequenza migliore: test SSH, verifica spazio disco, dry-run rsync, test su directory piccola, trasferimento finale. Spendere qualche minuto in più evita ore di errori.

Ottimizzazione: compressione, banda e impostazioni SSH

La velocità di rsync dipende non solo dalla dimensione dei file, ma anche da CPU, tipo di disco, latenza di rete, banda e numero di file. Molti file piccoli sono più lenti di un unico file grande, perché richiedono più operazioni. Su VPS NVMe (server VPS NVMe) la scansione e scrittura sono molto più rapide.

-z (compressione) è utile su file di testo, log e alcuni backup, ma su file già compressi (zip, tar.gz, jpg, mp4) può consumare CPU inutilmente. Tra due server veloci con 1 Gbps, per file media, ometti -z per migliori performance; su connessioni lente e file testuali, -z fa la differenza.

Per limitare la banda usa --bwlimit. Esempio: --bwlimit=50000 imposta circa 50 MB/s. Questo evita di saturare la rete del sito in produzione. Trasferisci di notte, limita la banda e monitora il load average.

Confronto tra rsync, scp, SFTP e FTP

Confronto tra rsync, scp, SFTP e FTP

Esistono diversi strumenti per il trasferimento file, ognuno con pro e contro. Ecco una tabella di confronto per scenari di grandi file e migrazioni server:

Confronto tra rsync, scp, SFTP e FTP
MetodoSicurezzaRipresaPerformance file grandiUso consigliato
rsync + SSHAltaOttimaEccellenteMigrazioni, backup, sincronizzazione
scpAltaLimitataMediaCopia rapida di pochi file
SFTPAltaDipende dal clientMediaGestione manuale file
FTPBassaDipende dal clientVariabileSistemi legacy senza criticità di sicurezza

Come si vede, rsync è la scelta migliore per sincronizzazioni ripetute e trasferimenti voluminosi. scp è rapido e semplice, ma non rileva cambiamenti nei file come rsync. FTP senza crittografia non è più accettabile per la sicurezza moderna. Per operazioni critiche tra server, scegli sempre metodi SSH-based.

Workflow di esempio per migrare un sito attivo

Migrare un sito non significa solo copiare i file: DNS, database, SSL, versioni PHP, permessi e mail vanno controllati. Ecco un workflow a basso downtime per siti web con grandi file:

  • Prepara web server, PHP, database e moduli sul nuovo server.
  • Abbassa il TTL DNS a 300 secondi prima della migrazione (Verifica del dominio e gestione del dominio).
  • Avvia il primo rsync a sito attivo per trasferire la maggior parte dei dati.
  • Fai il backup del database e trasferiscilo.
  • Metti il sito in manutenzione.
  • Esegui un secondo rsync per sincronizzare i file modificati.
  • Rifai il backup database o usa una strategia incrementale.
  • Controlla permessi, apertura sito e log sul nuovo server.
  • Installa o rinnova il certificato SSL (installazione del certificato SSL).
  • Aggiorna i record DNS al nuovo IP.

Il grosso dei dati viene trasferito con il sito online; la downtime è limitata a manutenzione e cambio DNS. Per siti WordPress media-heavy questo metodo riduce la sospensione da ore a pochi minuti.

Controllo dell’integrità dei dati dopo il trasferimento

Non basta che il comando finisca: verifica numero e dimensione dei file, soprattutto quelli critici. Confronta du -sh su source e target, ma considera possibili differenze dovute al filesystem. Puoi rilanciare rsync con gli stessi parametri: se non ci sono file nuovi, l’output sarà minimo.

Per un controllo ancora più accurato, usa rsync -avc --dry-run /source/dir/ utente@ip-destinazione:/dest/dir/. Il flag -c confronta anche il checksum, ma su grandi dati può essere pesante per CPU e disco. Per archivi critici, dump database o documenti riservati, questa verifica è preziosa.

Se hai migrato un sito, controlla anche dal lato applicativo: homepage, backend, upload, pagine di pagamento, form di contatto e log errori. Nei siti e-commerce, verifica anche integrazioni di pagamento e cron job sul nuovo server.

Errori comuni e come risolverli

Permission denied

Di solito dipende da permessi utente SSH, scrittura sulla directory target o autenticazione con chiave. Prova una connessione SSH normale con lo stesso utente; se funziona, verifica la possibilità di creare file nella directory di destinazione. Se serve, cambia proprietà con chown o usa sudo.

No space left on device

Se il disco del target è pieno, il trasferimento si interrompe. Controlla df -h e verifica anche /tmp e i mount point. Rimuovi vecchi log, backup o cache. Se serve, aumenta lo spazio disco o scegli un VPS più capiente.

Connection reset o Broken pipe

Su trasferimenti lunghi, possono verificarsi disconnessioni. Con --partial e --append-verify puoi riprendere il trasferimento. Configura anche SSH keepalive (es. ServerAliveInterval 60) per ridurre le interruzioni.

Trasferimento molto lento

La lentezza può dipendere dal numero di file, limiti I/O disco, compressione, banda. Se ci sono molti file piccoli, creare un archivio tar può essere più rapido (ma perdi il vantaggio rsync sul delta). Su file già compressi, prova senza -z. Usa strumenti come iotop, htop e iftop per identificare il collo di bottiglia.

Best practices di sicurezza per il trasferimento tra server

Non sottovalutare la sicurezza: root, chiavi SSH e backup sono dati sensibili. Preferisci sempre autenticazione via chiave SSH, con permessi restrittivi e passphrase. Non condividere chiavi private.

Crea un utente temporaneo solo per il trasferimento, limitando i permessi alle directory necessarie. Dopo l’operazione, elimina o disabilita l’utente. Limita l’accesso SSH agli IP autorizzati. Firewall, Fail2ban e OpenSSH aggiornato sono essenziali.

Se trasferisci dump database, documenti clienti o dati personali, elimina file temporanei inutili da source e target. Non lasciare mai file .sql, .zip o .tar nella root web: vanno protetti o rimossi subito.

Uso di rsync per backup automatici

rsync non è solo per trasferimenti una tantum, ma anche per backup regolari. Puoi schedulare un backup notturno via cron, con autenticazione SSH sicura e banda limitata.

Esempio: rsync -a --delete --bwlimit=30000 /var/www/site/ backup@ip-backup:/backup/site/. Questo rende la directory target identica al source, ma --delete cancella dal target i file rimossi dal source: usalo con attenzione. Per backup critici, preferisci snapshot, cartelle giornaliere o soluzioni con versioning.

Segui la regola 3-2-1: almeno 3 copie, su 2 supporti diversi, 1 copia offsite. rsync agevola la copia tra server. Per strategie avanzate vedi Soluzioni di backup e servizi di hosting aziendale.

Checklist finale prima del trasferimento

Prima di avviare il trasferimento di file voluminosi, segui questa breve lista per ridurre i rischi. In produzione, dovrebbe essere uno standard:

  • rsync è installato su entrambi i server?
  • La connessione SSH funziona con utente e porta corretti?
  • C’è abbastanza spazio disco sul target?
  • Hai fatto un test con --dry-run?
  • Hai pianificato manutenzione e sincronizzazione finale per siti live?
  • Se usi --delete, hai verificato la directory di destinazione?
  • Controllerai dimensione file, permessi e funzionamento applicativo dopo il trasferimento?
  • Pulirai in modo sicuro backup temporanei e dump?

Sembra banale, ma gli errori più frequenti nascono da directory sbagliate, permessi mancanti, spazio disco insufficiente e DNS non pianificato. Un processo rsync ben organizzato riduce tempi e rischi.

Domande frequenti

Se la connessione SSH si interrompe durante rsync, il trasferimento riparte da capo?

No, se usi i parametri giusti. --partial e --append-verify permettono di riprendere il trasferimento dei file grandi dal punto di interruzione. Prima di rilanciare il comando, controlla spazio su disco e stato dei file parziali sul target.

Posso trasferire direttamente database con rsync?

rsync trasferisce file, ma non è adatto per database live. Per MySQL o MariaDB usa mysqldump o tool di backup, poi trasferisci il dump con rsync. In sistemi attivi, usa modalità manutenzione o replica per garantire la coerenza.

Serve l’accesso root su entrambi i server per usare rsync?

No, basta un utente con permessi di scrittura sulla directory di destinazione. Per preservare proprietà, permessi speciali o ACL, potrebbe servire root, ma per sicurezza meglio usare utenti con privilegi limitati.

Il parametro --delete è sicuro?

Usato correttamente, --delete mantiene la directory target identica al source. Ma se lo usi sulla directory sbagliata, rischi di perdere file. Testalo sempre con --dry-run e verifica i percorsi.

Per grandi file è meglio rsync o scp?

Per copie veloci di pochi file scp va bene, ma per grandi volumi, molteplici file o sincronizzazioni ripetute rsync è superiore: rileva cambiamenti, riprende trasferimenti interrotti, limita banda e permette test.

Conclusioni e prossimi passi

Usare rsync via SSH per trasferire file di grandi dimensioni tra server Linux è una soluzione veloce, sicura e facilmente gestibile. Con i parametri giusti diventa resiliente alle disconnessioni, trasferisce solo i file nuovi e minimizza la downtime nei siti attivi. Controlla sempre SSH e spazio disco, testa con --dry-run e pianifica il trasferimento principale.

Se stai pensando a una migrazione verso nuovi server, storage capienti o hosting più performanti, scopri le soluzioni Hostragons e scegli VPS, hosting, dominio e SSL per una migrazione senza rischi. Parti sempre con piccoli test, misura i risultati e pianifica la sincronizzazione finale.

Condividi questo articolo:

Team Hostragons

Guide aggiornate dal nostro team di esperti su hosting, server e nomi di dominio. Troviamo insieme la soluzione ideale per il tuo progetto.

Contattaci