Din upload går i stå ved fire gigabyte af et arkiv på tolv gigabyte, og vanen fra downloadmanagere siger, at du skal trykke genoptag. rsync genoptager ikke TCP-strømmen, fordi den strøm forsvandt med tunnelens sidste retransmission. Det, den kan, er at beholde de bytes, den allerede har modtaget, og bruge dem som grundlag for det næste forsøg, hvilket er en anden mekanisme med et andet regelsæt. De flag, du vælger, afgør, om denne genbrug overhovedet finder sted.

Nyt forsøg genopbygger tilstand, det genoptager ikke strømmen

Når SSH-sessionen falder, er der kun det tilbage på den fjerne ende, som den nåede at skrive til disken, og intet andet. Der er ingen sessionstoken at knytte sig til og intet sekvensnummer at afspille. Næste kørsel åbner en ny forbindelse, læser kilden igen og spørger modtageren, hvad den allerede har.

Det sidste spørgsmål er grunden til, at en delvis fil er værd at beholde. Modtagerens kopi giver rsync noget at sammenligne med, og algoritmen sender kun de forskelle, den kan identificere. Det er stadig en ny overførsel af metadata og en ny gennemgang af kilden, så den sparede tid er proportional med, hvor meget af filen der matcher, ikke med hvor langt den forrige forbindelse var nået. Har modtageren intet bevaret, er næste forsøg en fuld kopi, uanset hvor mange gigabyte den første flyttede.

Beslut, hvor det genbrugelige fragment skal bo

Standardadfærden skriver den delvise fil på destinationsstien, hvilket gør et halvt skrevet arkiv synligt under det endelige navn. --partial-dir flytter den til en mappe, du vælger, og manualen beskriver den mappe som bevaret til brug som data af en senere overførsel. Et relativt navn opløses under destinationsmappen, hvilket er det, du vil have, når de to ender kan have forskellige layouts.

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

Rækkefølgen betyder også noget ved destinationen: den delvise mappe skal have plads nok til fragmentet, og disken skal også have plads nok til den færdige fil. Fyldes måldisken midt i overførslen, giver det en fejl, der ligner et netværksproblem, men ikke er det, og det kan efterlade det bevarede fragment afkortet. Tjek fri plads på modtagerhosten, før kørslen starter, ikke efter den fejler. Et par sekunder med df -h over samme SSH-vej er den billigst mulige test af planen.

Tilladelser er en mindre, men reel bekymring. En delvis mappe, som uvedkommende konti kan skrive i, lader andre erstatte indhold, som din næste kørsel vil behandle som allerede modtaget. Hold den ejet af overførselskontoen, og læg den ikke et sted, hvor andre tjenester publicerer fra.

Kør den samme kopi, ikke en klogere

Genbruget gælder kun, når kilden og destinationen stadig beskriver det samme objekt. Samme sti, samme navn, samme fil. Omdøbning af kilden eller peg på en anden destinationsmappe starter en ny sammenligning mod intet nyttigt.

Tilføj ikke --whole-file, mens du forventer delta-adfærden. Den indstilling beder rsync kopiere hele filen uden sammenligningen med rullende kontrolsum, hvilket er et rimeligt valg på et hurtigt lokalt link og præcis det forkerte efter en mislykket langdistance-upload. --inplace ændrer også historien: den skriver direkte i destinationsfilen, så en afbrydelse efterlader en fil, der blander gammelt og nyt indhold uden et separat fragment at falde tilbage på.

Statuslinjen rapporterer samlet fremdrift for overførslen. Det er ikke et færdiggørelsessignal. Et tal, der når hundrede procent, mens forbindelsen stadig er åben, betyder, at dataene er skubbet, ikke at modtageren har omdøbt, synkroniseret eller accepteret noget.

Accepter objektet først, når det matcher

Bekræft exitstatus først, og sammenlign derefter resultatet i stedet for at stole på fraværet af fejl. En størrelseskontrol fanger de fleste afkortede overførsler; en kontrolsumsammenligning fanger resten, og begge er billige sammenlignet med at køre uploadet igen.

Hvis arkivet publiceres af en nedstrøms proces, så lad den proces vente på den accepterede fil. Et bevaret fragment, der lander i en overvåget mappe under det endelige navn, bliver samlet op af den næste scanning, og forbrugerens fejl vil handle om korrupt input snarere end om en overførsel, der aldrig blev færdig.

Lad kilden være, indtil modtageren bekræfter. Regenerering af arkivet mellem forsøg ændrer sammenligningsgrundlaget, og den næste kørsel overfører enten næsten alt eller producerer en fil, der hverken matcher den gamle eller den nye kilde.

Når forbindelsen, ikke flaget, er grænsen

Header- og protokoloverhead er én omkostning ved en overførsel, og det er sjældent den, der afgør, hvor lang tid en stor fil tager. Genstartsadfærd betyder mere: en metode, der overlever et udfald uden manuelle trin, leverer en brugbar fil før en hurtigere metode, der skal begynde forfra. Lagring i begge ender og autentificeringsvejen hører til i den samme sammenligning.

Sammenlign tilladte alternative veje med den samme fil og den samme destination, og noter, hvor hver af dem genstarter efter en afbrydelse. Den ene kolonne fortæller dig mere om en upload på tolv gigabyte over en VPN end nogen spidsrate målt i en kort test.

Relaterede artikler