2010-06-25 12:29:20 +0000 2010-06-25 12:29:20 +0000
126
126

Quali sono le differenze tra le opzioni di cancellazione di rsync?

Vedo nella pagina man di rsync che ci sono diverse opzioni delete, ma non capisco bene le differenze tra loro. Quali sono le differenze tra queste opzioni?

--del an alias for --delete-during
 --delete delete extraneous files from dest dirs
 --delete-before receiver deletes before transfer (default)
 --delete-during receiver deletes during xfer, not before
 --delete-delay find deletions during, delete after
 --delete-after receiver deletes after transfer, not before
 --delete-excluded also delete excluded files from dest dirs

Risposte (4)

125
125
125
2010-06-25 14:19:55 +0000
  • --del/--delete_during: Cancella i file dalla cartella di destinazione mentre vengono copiati (risparmia memoria rispetto a --delete-before: --delete-before fa una scansione separata per cercare i cancellabili)

  • --delete: Cancella i file nella directory di destinazione se non esistono nella directory di origine.

  • --delete-before: Elimina i file nella directory di destinazione prima di copiare il file con lo stesso nome dalla directory di origine

  • --delete-during: Elimina i file nella directory di destinazione MENTRE si copiano i file con lo stesso nome dalla directory di origine

  • --delete-delay: Segna cancella durante il trasferimento, ma aspetta che il trasferimento sia completo

  • --delete-after: Il ricevitore cancella dopo il trasferimento, non prima… Se qualche altra parte di rsync ha spostato file extra altrove, vorresti questo invece di --delete-delay, perché --delete-delay decide cosa cancellare nel mezzo del trasferimento, mentre --delete-after controlla la directory per i file che dovrebbero essere cancellati DOPO che tutto è finito.

  • --delete-excluded: Cancella i file dalla directory di destinazione che sono esplicitamente esclusi dal trasferimento dalla directory di origine.

Lo scopo di rsync non è copiare, è archiviare. Questa è una distinzione importante. Il trattamento dei file cancellati/modificati è critico, e in molti casi sfumato.

Il flag --delete in particolare è uno che ho visto incasinato molte volte. Un sacco di gente usa rsync per spostare file in archivi a bassa priorità, e in questo caso volete che i file che state spostando esistano ancora nella directory di destinazione. Non è quello che fa delete: --delete fa in modo che, quando si cancella un file dalla directory di origine, questo venga ANCHE cancellato dalla directory di destinazione, così la destinazione non si riempie di spazzatura… Una volta ho visto un tizio cancellare il suo backup mettendo un nuovo disco e non spegnendo il suo script rsync notturno. Lo script ha visto che la directory di origine era ora vuota, e ha cancellato ogni file nella directory di destinazione, in modo che corrispondessero.

La maggior parte delle altre opzioni sono legate allo spazio o alle prestazioni. Quando cancelli i file è importante se vuoi assicurarti che il trasferimento abbia successo prima di fare qualsiasi cosa, ma se il tuo dispositivo è troppo piccolo per gestire 2 copie di tutte le informazioni, devi cancellare man mano che vai, ecc. È un po’ stravagante a causa della sua lunga storia su più piattaforme: alcune opzioni sono state aggiunte in modo che le persone che erano abituate a certi comportamenti non fossero confuse.

2
2
2
2013-01-17 18:50:20 +0000

Un altro punto che vale la pena menzionare è che se la vostra directory di origine finisce con /*, allora rsync considererà solo questi file e non la directory stessa (e quindi l'assenza di file che volete cancellare sulla destinazione).

Se state specificando un'opzione di cancellazione qui sopra, ma rsync sembra che non stia cancellando, allora controllate che non stiate accidentalmente globalizzando e fornendo una lista di file quando intendete la directory stessa.

2
2
2
2010-06-25 12:57:07 +0000

Ci sono due cose in corso:

  1. Chi fa la cancellazione
  2. Quando avviene

Sia il mittente che il destinatario possono essere istruiti a fare la cancellazione (non sono sicuro del perché sia importante). Quindi quando rsync da un computer si connette al server rsync dall'altra parte, questo determina chi sta effettivamente emettendo il comando di cancellazione.

Quando succede è abbastanza facile… prima significa che tutti i file vengono cancellati, e ALLORA rsync copia i file. durante significa che mentre passa attraverso l'elenco dei file, li cancella quando li trova, e dopo significa che aspetta finché tutti i file vengono trasferiti e poi cancella il lato remoto. Questo ha importanza solo quando il trasferimento viene interrotto.

0
0
0
2019-12-31 14:32:28 +0000

Per default rsync non cancella alcun file dalla parte della destinazione. Per fare in modo che rsync cancelli i file, devi usare almeno una delle opzioni di cancellazione.

Se non ti interessa quando i file vengono cancellati, usa semplicemente --delete e lascia la scelta a rsync. Puoi combinare --delete con altre opzioni di cancellazione (non c'è conflitto), ma non devi farlo perché tutte le altre opzioni di cancellazione implicano già --delete.

--delete-before funziona come segue: rsync guarda quali file sono presenti nella sorgente e quali nella destinazione, cancella tutti i file trovati nella destinazione ma non nella sorgente e poi inizia la sincronizzazione vera e propria. Questo ordine è utile se la destinazione ha poco spazio in quanto libererà più spazio su disco nella destinazione prima di iniziare il trasferimento di qualsiasi nuovo file. L'aspetto negativo è che rsync richiederà più memoria per eseguire l'operazione e l'intera operazione è un processo a due fasi e quindi più lento.

--delete-during funziona come segue: rsync inizia immediatamente a sincronizzare i file e quando incontra un file che esiste solo nella destinazione, viene cancellato. In questo modo non c'è nessuna penalità di velocità e non è nemmeno richiesta memoria aggiuntiva. L'aspetto negativo è che può succedere che prima vengano copiati molti nuovi file nelle destinazioni prima che i file rimossi vengano cancellati, quindi la destinazione può richiedere molto più spazio di memoria sul disco durante l'operazione di quanto ne richieda alla fine, una volta che l'intera operazione è stata fatta.

--delete-after funziona come segue: Prima sincronizza tutti i file, poi esegue la stessa operazione che --delete-before esegue prima della fase di sincronizzazione. Questa è la scelta peggiore nella maggior parte dei casi comuni poiché richiede più memoria, più spazio su disco nella destinazione, ed è più lenta poiché è un processo a due fasi; fondamentalmente combina tutti gli svantaggi degli altri due metodi. Questa opzione esiste principalmente per il caso in cui si stiano usando “merge files” (cosa siano i merge files e come funzionino va oltre lo scopo di questa risposta). Poiché questi file possono contenere regole per i file da escludere durante la cancellazione, i nuovi file di unione devono essere copiati prima della fase di cancellazione se il loro contenuto deve essere considerato durante la fase di cancellazione. A meno che questo sia un requisito, --delete-after non ha alcun vantaggio.

--delete-delay è un'opzione piuttosto nuova (non è disponibile in rsync 2.6.9, che è ancora il default in macOS 10.15 per esempio). Funziona come --delete-during, tranne che non cancella i file immediatamente ma dopo che la sincronizzazione è stata fatta, quindi è un ibrido di --delete-during e --delete-after. Il vantaggio è che è più veloce di --delete-after, lo svantaggio è che richiede più memoria durante la sincronizzazione.

--delete-excluded dice a rsync di non cancellare solo i file che mancano all'origine ma di cancellare anche i file nella destinazione che sono stati esclusi dalla sincronizzazione (--exclude o --exclude-from), indipendentemente dal fatto che questi file esistano o meno all'origine.