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


119

Vedo sulla pagina man di rsync che ci sono una serie di deleteopzioni, ma non capisco davvero 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

2
Perché --delete-beforeè descritto come (default)? Non riesco a capire cosa (default)significhi.
Marco Marsala,

1
Non è più specificato come predefinito nella manpagina per rsync version 3.1.2 protocol version 31. Tuttavia, la mia ipotesi sulla versione con il testo tra virgolette è che se usi solo --deletepiuttosto che --delete-WHEN, allora è come se avessi specificato --delete-WHENdove sono le WHENimpostazioni predefinite before.
Tom Hale,

Risposte:


115
  • --del/--delete_during: Elimina i file dalla directory di destinazione man mano che vengono copiati (risparmia memoria rispetto a --delete-before: --delete-beforeesegue una scansione separata per cercare eliminabili)

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

  • --delete-before: Eliminare 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 DURANTE la copia del file con lo stesso nome dalla directory di origine

  • --delete-delay: Mark elimina durante il trasferimento, ma attendi fino al completamento del trasferimento

  • --delete-after: Il ricevitore elimina dopo il trasferimento, non prima ... Se qualche altra parte di rsync spostava file extra altrove, lo vorresti invece --delete-delay, perché --delete-delaydecide cosa eliminerà nel mezzo del trasferimento, mentre --delete-aftercontrolla la directory per i file che dovrebbe essere cancellato DOPO che tutto è finito.

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

Il punto di rsync non è la copia, è l'archiviazione. Questa è una distinzione importante. L'elaborazione di file eliminati / modificati è fondamentale e in molti casi è sfumata.

La --deletebandiera in particolare è quella che ho visto rovinare molte volte. Molte persone usano rsync per spostare i file nella memoria a bassa priorità e in questo caso si desidera che i file che si stanno spostando ESISTONO ancora nella directory di destinazione. Non è quello che fa l'eliminazione: --deleteassicurati che, quando elimini un file dalla directory di origine, sia ANCHE eliminato dalla directory di destinazione, quindi la tua destinazione non si riempie di spazzatura ... Una volta visto un ragazzo cancellare il suo backup inserendo una nuova unità e non disattivando la sua sceneggiatura rsync notturna. Script ha visto che la directory di origine ora era vuota e ha eliminato tutti i file nella directory di destinazione, in modo che corrispondessero.

La maggior parte delle altre opzioni sono legate allo spazio o alle prestazioni. Quando si eliminano i file è importante se si desidera assicurarsi che il trasferimento abbia esito positivo prima di eseguire qualsiasi operazione, ma se il dispositivo è troppo piccolo per gestire 2 copie di tutte le informazioni, è necessario eliminare mentre si procede, ecc. È un un po 'strano a causa della sua lunga storia su più piattaforme: alcune opzioni sono state aggiunte in modo che le persone abituate a determinati comportamenti non vengano confuse.


3
Quindi --delete e --delete-prima dello stesso? man rsync non dice quando --delete elimina i file.
ppr

@ppr: dipende dal sistema. Il motivo per cui ha così tante opzioni specifiche è perché elimina su Solaris! = Elimina su HP-UX! = Elimina su AIX! = Elimina su Linux.
Satanicpuppy,

Quando rsincronizza un'intera directory, delete-afterelimina ogni file tra la sincronizzazione o solo dopo il mirroring dell'intera directory ? Pensavo delete-afterfosse sufficiente per le mie esigenze, ma non riesco a lasciare spazio sul dispositivo quando eseguo il backup di una delle mie unità.
Sridhar Sarnobat,

1
@ Sridhar-Sarnobat: entrambi. Sposta tutto ciò che sta per spostare e, una volta terminato, inizia a eliminare le cose. Se vuoi che venga eliminato prima che venga spostato tutto, usa --delete-during
Satanicpuppy

2
Dopo qualche esperienza, sto scoprendo che anche delete-duringnon sempre impedisce no space left on device(su Linux). Quindi delete-beforeè l'unico modo garantito per evitarlo (come quando si esegue il mirroring di un'unità quasi piena e anche l'unità di destinazione è quasi piena).
Sridhar Sarnobat,

1

Ci sono due cose che stanno succedendo:

  1. Chi fa l'eliminazione
  2. Quando succede

Il mittente o 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'altro lato, questo determina chi sta effettivamente emettendo il comando delete.

Quando succede è abbastanza facile ... prima significa che tutti i file vengono eliminati, quindi rsync copia i file. durante significa che passa attraverso l'elenco dei file, li elimina quando si tratta di loro, e dopo significa che attende fino a quando tutti i file vengono trasferiti e quindi elimina il lato remoto. Ciò importa solo quando il trasferimento viene interrotto.


Sono abbastanza sicuro che nessuna di queste opzioni sia correlata all'eliminazione di elementi dal lato del mittente . Tutti (AFAIK) riguardano l'eliminazione di oggetti dal lato del destinatario . Inoltre, dici: "prima significa che tutti i file vengono eliminati, e quindi rsync copia i file" - è giusto? Mi aspetto --delete-beforedi eliminare solo quei file che devono essere spariti, non tutti i file! Ma immagino sia possibile che rsync elimini tutto e poi trasferisca sui "nuovi" dati (probabilmente invariati) ...
Quuxplusone,

1
Ah, "elimina dal lato del mittente" è supportato da rsync, ma il nome di tale opzione è --remove-source-files.
Quuxplusone,

1

Un altro punto degno di nota è che se la directory di origine termina /*, allora rsync prenderà in considerazione solo quei file e non la directory stessa (e quindi l'assenza di file che si desidera eliminare sulla destinazione).

Se stai specificando un'opzione di eliminazione sopra, ma sembra che rsync non stia eliminando, quindi assicurati di non essere accidentalmente globale e fornire un elenco di file quando intendi la directory stessa.

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.