IT | EN
ddiff è un tool Linux per sincronizzare file e block device in maniera differenziale via SSH, oppure può creare dei file differenziali per aggiornare un backup offline rapidamente.
dd disponibile per le scritture a blocchi
ddiff disponibile anche sulla destinazione remota per il confronto hash via SSHddiff opera a basso livello su file e dispositivi. Un percorso errato può sovrascrivere dati in modo irreversibile. L’autore non può ritenersi responsabile di eventuali danni causati dall’uso errato del comando.
ddiff [OPTIONS] <input> <output>
ddiff --hash [OPTIONS] <file> [start_block_number] [count]
ddiff --map [OPTIONS] <input> <output_map>
ddiff --makediff [OPTIONS] <map_file> <input> <output_diff_file> [output_map_file]
ddiff --applydiff [OPTIONS] <diff_file> <output>
<input> può essere un file normale o un block device. <output> può essere un file o un block device locale o raggiungibile via SSH nel formato user@host:/percorso.
-y, --yes: risponde automaticamente sì alle richieste di conferma
-q, --quiet: nasconde le progress barddiff source.img backup.img
ddiff /dev/sdb user@host:/srv/backup.img
ddiff /dev/sdb root@host:/dev/sdb
Per eseguire backup in due tempi è necessario:
1) Creare o avere un file map della situazione del backup
2) Creare un file diff confrontando il sorgente con il file map del backup
3) Applicare il file diff al backup
**Nota: si suggerisce di creare e mantenere la mappa aggiornata durante la funzione --makediff per averla già disponibile per il backup successivo.**
ddiff --map disk.img disk.map
Il file map è binario e contiene la sequenza degli hash BLAKE3 di tutti i blocchi da 1 MiB del file sorgente. Il file map andrebbe creato per il backup e servirà per confrontarlo con il sorgente.
ddiff --makediff baseline.map disk.img patch.diff
ddiff --makediff baseline.map disk.img patch.diff new.map
--makediff confronta il file corrente con il map_file di base e crea un archivio ZIP contenente solo i blocchi modificati.
Se output_map_file è specificato, viene scritto anche il nuovo file map del sorgente corrente. Funzione utilissima per avere i riferimenti del backup sul PC dove risiede il sorgente.
ddiff --applydiff patch.diff restored.img
--applydiff scrive i blocchi presenti nel diff su un file locale esistente o su un block device locale. Prima di scrivere, verifica che l'hash corrente dei blocchi da sovrascrivere coincida con il campo old presente nel diff.
Se uno di questi controlli fallisce, il comando termina con codice di uscita 3.
Se l'output è un file normale, al termine viene troncato alla lunghezza finale registrata nel diff. Se è un block device, non viene eseguito alcun troncamento.
ddiff --hash disk.img
ddiff --hash disk.img 120
ddiff --hash disk.img 120 32
--hash restituisce gli hash BLAKE3 di uno o più blocchi:
start_block_number e count restituisce tutti gli hash del file, in ordine;
start_block_number restituisce un solo blocco;
start_block_number e count restituisce count hash consecutivi.stdout in formato esadecimale, uno per riga. Progress bar, warning e messaggi di servizio vanno su stderr.
map è un file binario composto da record consecutivi di 32 byte, uno per ogni hash BLAKE3.
diff è un archivio ZIP che contiene:
index.json
index.json contiene:
version
size: dimensione finale attesa dell'output
blocks: array dei blocchi modificati0: esecuzione completata con successo
1: errore generico
2: ddiff mancante sulla destinazione remota oppure versione non compatibile
3: mismatch degli hash old durante --applydiff