Vraag Rsync verschil tussen --checksum en --ignore-times opties


Kan iemand de verschillen tussen de verduidelijken? --checksum en --ignore-times opties van rsync?

Mijn begrip is als volgt:

--checksum
Als de bestandsgrootte en tijd overeenkomen, voert het een controlesom uit aan beide kanten om te zien of de bestanden echt identiek zijn.

--ignore-times
'Overdracht' van elk bestand, ongeacht of de bestandstijd aan beide kanten hetzelfde is. Omdat het algoritme voor delta-overdracht nog steeds wordt gebruikt, wordt een bestand eigenlijk identiek als een bestand identiek is.

Dat is het technische verschil, maar voor zover ik weet, zijn ze semantisch hetzelfde.

Dus, wat ik me afvraag is:

  • Wat is het praktische verschil tussen de twee opties?
  • In welke gevallen zou u de ene in plaats van de andere gebruiken?
  • Is er een verschil in prestaties tussen beide?

75
2017-12-09 20:15


oorsprong




antwoorden:


Normaal gesproken, rsync slaat bestanden over wanneer de bestanden identieke formaten en tijden hebben aan de bron- en de bestemmingszijde. Dit is een heuristiek die meestal een goed idee is, omdat dit voorkomt rsync van het onderzoeken van de inhoud van bestanden die hoogstwaarschijnlijk identiek zijn aan de bron- en de bestemmingszijde.

--ignore-times vertelt rsync om de heuristische bestandsgrootte-en-formaten uit te schakelen en ALLE bestanden onvoorwaardelijk van bron naar bestemming over te brengen. rsync zal dan verder gaan met het lezen van elk bestand aan de bronzijde, omdat het ofwel het delta-transfer-algoritme moet gebruiken of eenvoudig elk bestand in zijn geheel moet verzenden, afhankelijk van of de --whole-file optie is opgegeven.

--checksum wijzigt ook de heuristische bestandsgrootte en grootte, maar hier worden tijden genegeerd en worden alleen de grootten bekeken. Bestanden aan de bron- en bestemmingszijde die verschillen in grootte, worden overgedragen, omdat ze duidelijk van elkaar verschillen. Bestanden met dezelfde grootte worden gereageerd (met MD5 in rsync versie 3.0.0+, of met MD4 in eerdere versies), en degenen waarvan is vastgesteld dat ze verschillende bedragen hebben, worden ook overgedragen.

In gevallen waar de bron- en de bestemmingszijde meestal hetzelfde zijn, --checksum zal ertoe leiden dat de meeste bestanden aan beide zijden worden gecontroleerd. Dit kan lang duren, maar het resultaat is dat het minste minimum aan gegevens daadwerkelijk over de draad wordt overgedragen, vooral als het algoritme voor delta-overdracht wordt gebruikt. Dit is natuurlijk alleen maar een overwinning als je erg trage netwerken hebt en / of een zeer snelle CPU hebt.

--ignore-times, aan de andere kant, zal meer gegevens verzenden over het netwerk, en het zal ervoor zorgen dat alle bronbestanden worden gelezen, maar het zal in ieder geval niet de extra last leggen van het berekenen van veel cryptografisch sterke hashsums op de bron- en doel-CPU's. Ik zou verwachten dat deze optie beter presteert dan --checksum wanneer uw netwerken snel zijn en / of uw CPU relatief traag.

Ik denk dat ik het alleen ooit zou gebruiken --checksum of --ignore-times als ik bestanden zou overbrengen naar een bestemming waar vermoed werd dat de inhoud van sommige bestanden beschadigd was, maar waarvan de modificatietijden niet waren veranderd. Ik kan niet echt een andere goede reden bedenken om beide opties te gebruiken, hoewel er waarschijnlijk andere use-cases zijn.


83
2017-12-09 23:41



Ik heb gevonden --checksum handig samen met --itemize-changes voor het controleren van back-ups. Zo nu en dan lopen mijn back-upscripts volledig op deze manier nadat de huidige dagelijkse / wekelijkse updates zijn voltooid. Ik krijg een e-mail met de melding dringend als --itemize-changes levert iets onverwachts op, dus ik weet dat er een mogelijk probleem is waar ik naar moet kijken. - David Spillett
--checksum is handig wanneer u in Git werkt en tussen filialen wisselt met veranderde bestanden, waardoor de updatetijden van bestanden die u niet vanuit een bepaald filiaal wilt verzenden, worden gewijzigd. - FriendlyDev
--ignore-times En in het bijzonder --checksum zijn nodig als een van uw "bestanden" een Truecrypt-bestandscontainer is, omdat de tijdstempel van het bestand standaard niet wordt bijgewerkt. Zien productforums.google.com/forum/#!topic/drive/gnmDp3UXEgs en ask-leo.com/why_wont_my_truecrypt_volume_backup.html - Marcus Junius Brutus
Opmerking: ik deed een snel experiment en ctime wordt niet vergeleken, alleen mtijd. Op Mac tenminste. Dit kan handig zijn om te weten. Dat is de reden waarom ik zoveel problemen ondervind met Windows-bestandssystemen, die tegelijkertijd (ctime) rapporteren voor tijd, mtime en ctime. - Edward Falk
Doet --checksum controlesom alleen de bronbestandsnamen op de doelcomputer of alle bestanden in de doelmap? - Greg


controlesom is ook handig als u een ander systeem hebt gebruikt om bestanden te synchroniseren, dat geen tijdstempels heeft bewaard. Checksum stuurt alleen bestanden die anders zijn EN alle tijdstempels aan de ontvangende kant bij zodat ze overeenkomen


13
2017-07-24 08:37





Eén detail: de checksum-optie controleert aan de ene kant een heel bestand en vervolgens aan de andere kant het hele bestand. Als uw bestanden ietwat groot zijn, doodt dit soort parallellisme.

En als u grote bestanden heeft, zult u waarschijnlijk een time-out tegenkomen --checksum, zoals je niet met -I.


4
2018-06-03 14:43





Van info rsync met betrekking tot de --checksum optie - "Aangezien dit hele bestandscontrolesysteem van alle bestanden aan beide kanten van de verbinding optreedt in aanvulling op de automatische controlesomverificaties die optreden tijdens de overdracht van een bestand, kan deze optie vrij traag zijn."


2
2017-12-09 20:34



Die zin lijkt niet op mijn man-pagina's te staan ​​... dus, impliceert dit dat de checksum-optie checksums gebruikt om te identificeren of de bestanden identiek zijn, en als dat niet het geval is, zal het worden overgedragen, waardoor checksums opnieuw worden gegenereerd als deel van de overdracht? De optie -ignore-times slaat de cheque gewoon over en gaat ervan uit dat ze zijn gewijzigd? Dus prestatiegewijze --ignore-tijden is een betere manier om hetzelfde te bereiken? Ik ben nog steeds aan het worstelen om te zien waarom er 2 verschillende opties zijn (afgezien van het feit dat --checksum transparanter is) - Andy Madge
Je zou naar de nieuwste documentatie moeten kijken: gitweb.samba.org/... - Aleksandr Levchuk


De --ignore-times optie zal waarschijnlijk resulteren in alle bestanden die delta-gecodeerd zijn en het delta-transfer-algoritme (delta-codering) is minstens zo traag als de controlesom.

Ik weet niet of rsync --ignore-times is slim genoeg om de "automatische na-de-overdracht verificatie" te vermijden in het geval dat de delta-overdracht ertoe leidt dat er niets wordt overgedragen.

Voor --ignore-times:

  • In het geval rsync niet slim is (of de delta-codering niet vertrouwt), wordt het controleren (controlesom en codering) tweemaal uitgevoerd.
  • Het kan ook zo zijn dat delta-codering veel langzamer is dan de 128-bits MD4-controlesom.

Beide --checksum en --ignore-times zal "vrij langzaam" zijn maar --ignore-times is waarschijnlijk nog langzamer (vanwege de 2 bovenstaande mogelijkheden).

Goede vraag - gelieve te plaatsen als je in de praktijk prestatieverschillen vindt.


2
2017-12-09 22:22



Ik snap wat je bedoelt. Ik voer wat testen uit en post het terug. - Andy Madge