Come eseguire il backup di un file di grandi dimensioni con piccole modifiche?


9

Se una serie di file (diversi GB ciascuno ciascuno) e ciascuno cambia leggermente ogni giorno (in punti casuali, non solo informazioni aggiunte alla fine), come può essere copiato in modo efficiente? Voglio dire, nel senso che vengono aggiornate solo le parti modificate e non i file interi. Ciò significherebbe la differenza tra copiare alcuni Kb qua e là o alcuni GB.


Diff binario? Penso che sia una cosa, ma non credo che difflo farà
gatto

@cat: diffpotrebbe essere in grado di segnalare le differenze, ma qui il problema sta copiando le piccole differenze.
Quora Feans

Beh, stavo pensando di copiare il diff - rsyncè meglio
cat

Risposte:


25

Il programma rsync fa esattamente questo. Dalla pagina man:

È famoso per il suo algoritmo di trasferimento delta, che riduce la quantità di dati inviati sulla rete inviando solo le differenze tra i file di origine e quelli esistenti nella destinazione. Rsync è ampiamente utilizzato per backup e mirroring e come comando di copia migliorato per l'uso quotidiano.


In effetti, rsync è effettivamente in esecuzione durante la scrittura di questa risposta, eseguendo il backup di tutto su questa macchina sul mio file server (con zfs).
hlovdal

A scopo di backup, vorrei raccomandare rdiff-backup ( nongnu.org/rdiff-backup ). Lo sto usando per eseguire il backup di quattro macchine diverse, ormai da diversi anni, con buoni risultati.
Thomas Padron-McCarthy,

Wikipedia ha una buona spiegazione di come rsyncconfronta blocchi di file usando checksum rolling.
Adam Katz

Ho provato rsync a "ripristinare" una vecchia immagine del disco rigido della VM in cui sono stati modificati solo pochi file all'interno, purtroppo rsync sembra copiare di nuovo l'intero file (impiegando ~ 3 minuti a scrivere ~ 300 MB / s)? rsync -av --progress --partial --inplace arch-test1.qcow2.bak arch-test1.qcow2
feedc0de,

8

Probabilmente si desidera un moderno programma di backup con deduplicazione. Dai un'occhiata a BorgBackup .

Ciò consentirà di eseguire più backup di ogni versione del file di grandi dimensioni, ma condividerà il contenuto comune tra le diverse versioni, quindi lo spazio totale utilizzato per una determinata versione del file di grandi dimensioni sarà solo leggermente superiore allo spazio su disco totale per un singolo versione, supponendo che le diverse versioni differiscano solo leggermente.


5

Se hai un limite di I / O in qualsiasi modo, usa un filesystem come BTRFS o ZFS che supporta direttamente i backup incrementali senza dover trovare le differenze nei file, come quello che rsyncdeve fare.

L'uso rsyncsarà lento e molto intenso.

Perché se qualunque applicazione stia scrivendo le modifiche ai file è in qualche modo limitata da I / O, l'utilizzo rsynctoglierà significativi cicli di I / O dall'applicazione, questa è la vera ragione per cui esistono i file. E se il processo di backup o il sistema è limitato all'IO, rsynceliminerà i cicli di IO dalla larghezza di banda di backup disponibile.

Solo Google "rsync è lento". Ad esempio: rsync è molto lento (fattore 8-10) rispetto a cp nella copia di file da nfs-share a dir locale


Ciò ha l'ulteriore vantaggio di preservare tutti i metadati senza doverli verificare e sapere sempre che la copia di backup è valida come la copia originale. rsync va bene per un uso generale, ma se hai un filesystem moderno, sarebbe sciocco ignorarne i vantaggi.
user121391
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.