DEV Community

minnogit
minnogit

Posted on Edited on

Eseguire backup grandi su Debian: compressione, split e sessioni persistenti

Mi è capitato di dover preparare per un cliente un backup di oltre 100 GB su un server Debian remoto. I problemi da tenere sotto controllo erano due: le risorse del server (RAM e CPU), che non doveva rallentare troppo né andare in crash, e la connessione SSH. Se la sessione cade mentre l'archivio è a metà, il processo si interrompe e si ricomincia da capo.

Qui racconto come ho usato 7-Zip per creare un archivio diviso in volumi e screen per proteggere il processo dalle disconnessioni.


1. Il problema della disconnessione SSH

Un comando avviato tramite SSH è legato alla sessione. Se la connessione cade o chiudi il terminale, il sistema manda al processo il segnale di «hangup» (SIGHUP) e il lavoro si interrompe. Per un backup che può richiedere ore è un rischio da evitare.

La soluzione: GNU Screen

screen è un multiplexer di terminale: avvia i processi in una sessione virtuale che sopravvive anche se ti disconnetti.

Installazione:

sudo apt update && sudo apt install screen 7zip
Enter fullscreen mode Exit fullscreen mode

Su Debian 12 il comando 7z è nel pacchetto p7zip-full. Dalla 13 il pacchetto da installare è 7zip, e p7zip-full è rimasto solo come pacchetto di transizione.


2. Flusso di lavoro con Screen

Prima di lanciare la compressione, crea una sessione dedicata:

  1. Crea la sessione: screen -S backup_cliente
  2. Lancia il comando di compressione (vedi la sezione successiva).
  3. Scollegati: premi CTRL + A e poi D. Ora puoi chiudere il terminale e spegnere il PC, il server continuerà a lavorare.
  4. Ricollegati quando vuoi controllare l'avanzamento:
screen -r backup_cliente
Enter fullscreen mode Exit fullscreen mode

3. Il comando 7-Zip con poca RAM

Per non mandare il server in esaurimento di memoria, uso parametri che limitano RAM e CPU:

7z a -v1g -mx=1 -mmt=2 -p -mhe=on archive_name.7z ./source_folder/
Enter fullscreen mode Exit fullscreen mode

I parametri

  • a: aggiunge i file all'archivio.
  • -v1g: divide l'archivio in volumi da 1 GB, più facili da caricare e scaricare via FTP.
  • -mx=1: compressione minima e veloce. Usa anche un dizionario piccolo, quindi poca memoria: con 7-Zip 26.01 il dizionario è di 256 KB.
  • -mmt=2: limita l'uso a 2 thread della CPU.
  • -p: chiede la password in modo interattivo, così non compare nella cronologia dei comandi.
  • -mhe=on: cifra anche i nomi dei file, così senza password non si vede nemmeno l'elenco del contenuto.

Nella prima versione di questo comando avevo aggiunto -md=16m, convinto che limitasse il dizionario e quindi la RAM. È il contrario: con -mx=1 il dizionario è già molto più piccolo, e -md=16m lo porta a 16 MB. In una prova su 60 MB di dati, la memoria usata è passata da circa 19 MB a 134 MB e il tempo da meno di 2 a più di 11 secondi.


4. Verifica e consegna al cliente

Una volta terminato, verifico l'integrità dei volumi prima di caricarli sull'FTP:

7z t archive_name.7z.001
Enter fullscreen mode Exit fullscreen mode

Al cliente, per estrarre i dati, scrivo di:

  1. scaricare tutti i volumi: archive_name.7z.001, archive_name.7z.002 e così via, senza saltarne nessuno;
  2. usare un programma come 7-Zip (su Windows);
  3. aprire solo il primo file, quello che finisce in .001: il programma ricompone da solo l'intero archivio.

Top comments (0)