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
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:
- Crea la sessione:
screen -S backup_cliente - Lancia il comando di compressione (vedi la sezione successiva).
- Scollegati: premi
CTRL + Ae poiD. Ora puoi chiudere il terminale e spegnere il PC, il server continuerà a lavorare. - Ricollegati quando vuoi controllare l'avanzamento:
screen -r backup_cliente
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/
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
Al cliente, per estrarre i dati, scrivo di:
- scaricare tutti i volumi:
archive_name.7z.001,archive_name.7z.002e così via, senza saltarne nessuno; - usare un programma come 7-Zip (su Windows);
- aprire solo il primo file, quello che finisce in
.001: il programma ricompone da solo l'intero archivio.
Top comments (0)