Opplastingen din stopper ved fire gigabyte av et arkiv på tolv gigabyte, og vanen fra nedlastingsbehandlere sier at du skal trykke gjenoppta. rsync vil ikke gjenoppta TCP-strømmen, fordi den strømmen forsvant med tunnelens siste retransmisjon. Det den kan gjøre, er å beholde bytene den allerede har mottatt og bruke dem som grunnlag for neste forsøk, som er en annen mekanisme med et annet regelsett. Flaggene du velger avgjør om denne gjenbruken skjer i det hele tatt.

Nytt forsøk bygger opp tilstand, det gjenopptar ikke strømmen

Når SSH-økten faller, er det bare det som rakk å bli skrevet til disk som blir igjen på fjernenden, og ingenting annet. Det finnes ingen økttoken å feste seg til og ingen sekvensnummer å spille av. Neste kjøring åpner en ny forbindelse, leser kilden på nytt og spør mottakeren hva den allerede har.

Det siste spørsmålet er grunnen til at en delvis fil er verdt å beholde. Mottakerens kopi gir rsync noe å sammenligne med, og algoritmen sender bare de forskjellene den kan identifisere. Det er fortsatt en ny overføring av metadata og en ny gjennomgang av kilden, så tiden som spares er proporsjonal med hvor mye av filen som stemmer, ikke med hvor langt den forrige forbindelsen kom. Hvis mottakeren ikke beholdt noe, er neste forsøk en full kopi, uansett hvor mange gigabyte den første flyttet.

Bestem hvor det gjenbrukbare fragmentet bor

Standardoppførselen skriver den delvise filen på målstien, noe som gjør et halvskrevet arkiv synlig under det endelige navnet. --partial-dir flytter den til en mappe du velger, og håndboken beskriver den mappen som beholdt for bruk som data av en senere overføring. Et relativt navn løses under målmappen, som er nettopp det du vil når de to endene kan ha ulike oppsett.

rsync -e ssh --partial-dir=.rsync-partial --info=progress2 -- \
  large-archive.bin [email protected]:/srv/incoming/

Rekkefølgen betyr noe på målet også: den delvise mappen trenger nok plass til fragmentet, og volumet trenger nok plass til den ferdige filen også. Å fylle målvolumet midt i overføringen gir en feil som ser ut som et nettverksproblem, men ikke er det, og den kan la det beholdte fragmentet bli avkortet. Sjekk ledig plass på mottakerverten før kjøringen starter, ikke etter at den feiler. Noen sekunder med df -h over samme SSH-sti er den billigste mulige testen av planen.

Tillatelser er en mindre, men reell bekymring. En delvis mappe som uvedkommende kontoer kan skrive i, lar andre erstatte innhold som neste kjøring vil behandle som allerede mottatt. Hold den eid av overføringskontoen, og ikke legg den der andre tjenester publiserer fra.

Kjør samme kopi, ikke en smartere

Gjenbruket gjelder bare når kilden og målet fortsatt beskriver samme objekt. Samme sti, samme navn, samme fil. Å gi kilden nytt navn eller peke på en annen målmappe starter en ny sammenligning mot ingenting nyttig.

Ikke legg til --whole-file mens du forventer deltaoppførselen. Det alternativet ber rsync kopiere hele filen uten sammenligningen med rullende sjekksum, som er et fornuftig valg på en rask lokal lenke og nøyaktig feil etter en mislykket langdistanseopplasting. --inplace endrer også historien: det skriver direkte i målfilen, så en avbrytelse etterlater en fil som blander gammelt og nytt innhold uten et eget fragment å falle tilbake på.

Fremdriftslinjen rapporterer samlet fremdrift for overføringen. Det er ikke et fullføringssignal. Et tall som når hundre prosent mens forbindelsen fortsatt er åpen, betyr at dataene er dyttet ut, ikke at mottakeren har gitt nytt navn, synkronisert eller godtatt noe.

Godta objektet bare når det stemmer

Bekreft utgangsstatusen først, og sammenlign deretter resultatet i stedet for å stole på at det ikke finnes feil. En størrelseskontroll fanger de fleste avkortede overføringene; en sjekksumsammenligning fanger resten, og begge er billige sammenlignet med å kjøre opplastingen på nytt.

Hvis arkivet publiseres av en nedstrøms prosess, la den prosessen vente på den godtatte filen. Et beholdt fragment som lander i en overvåket mappe under det endelige navnet, blir plukket opp av neste skanning, og forbrukerens feil vil handle om korrupt inndata og ikke om en overføring som aldri ble ferdig.

La kilden være i fred til mottakeren bekrefter. Å generere arkivet på nytt mellom forsøk endrer sammenligningsgrunnlaget, og neste kjøring overfører enten nesten alt eller produserer en fil som verken passer den gamle eller den nye kilden.

Når forbindelsen, ikke flagget, er grensen

Overhead for header og protokoll er én kostnad ved en overføring, og det er sjelden den som avgjør hvor lang tid en stor fil tar. Omstartsoppførsel betyr mer: en metode som overlever et brudd uten manuelle trinn, leverer en brukbar fil før en raskere metode som må begynne på nytt. Lagring i begge ender og autentiseringsstien hører til i samme sammenligning.

Sammenlign tillatte alternative stier med samme fil og samme mål, og noter hvor hver av dem starter på nytt etter en avbrytelse. Den ene kolonnen forteller deg mer om en opplasting på tolv gigabyte over en VPN enn noen topphastighet målt i en kort test.

Relaterte artikler