Jūsų įkėlimas sustoja ties keturiais dvylikos gigabaitų archyvo gigabaitais, o iš atsisiuntimo tvarkyklių išmokytas įprotis sako spausti tęsti. rsync neatnaujins TCP srauto, nes tas srautas dingo kartu su paskutiniu tunelio persiuntimu. Ką jis gali padaryti – išsaugoti jau gautus baitus ir naudoti juos kaip pagrindą kitam bandymui, o tai kitas mechanizmas su kita taisyklių rinkiniu. Pasirinktos vėliavėlės sprendžia, ar tas pakartotinis naudojimas apskritai įvyks.

Pakartotinis bandymas atkuria būseną, o ne atnaujina srautą

Kai SSH sesija nutrūksta, tolimajame gale lieka tik tai, ką pavyko įrašyti į diską, ir nieko daugiau. Nėra sesijos žetono, prie kurio būtų galima vėl prisijungti, ir nėra sekos numerio, kurį būtų galima pergroti. Kitas paleidimas atidaro naują ryšį, vėl nuskaito šaltinį ir paklausia gavėjo, ką jis jau turi.

Būtent šis paskutinis klausimas paaiškina, kodėl dalinį failą verta išsaugoti. Gavėjo kopija duoda rsync kažką lyginti, o algoritmas siunčia tik tuos skirtumus, kuriuos gali atpažinti. Tai vis dar naujas metaduomenų perdavimas ir nauja šaltinio peržiūra, todėl sutaupytas laikas proporcingas tam, kiek failo sutampa, o ne tam, kiek buvo pažengęs ankstesnis ryšys. Jei gavėjas nieko neišsaugojo, kitas bandymas yra visa kopija, nesvarbu, kiek gigabaitų perkėlė pirmasis.

Nuspręskite, kur gyvena daugkartinio naudojimo fragmentas

Numatytasis elgesys įrašo dalinį failą į paskirties kelią, todėl pusiau įrašytas archyvas tampa matomas galutiniu vardu. --partial-dir perkelia jį į jūsų pasirinktą katalogą, o vadove tas katalogas apibūdinamas kaip saugomas, kad vėlesnis perdavimas jį naudotų kaip duomenis. Santykinis vardas sprendžiamas paskirties kataloge, ir būtent to norite, kai abu galai gali turėti skirtingą išdėstymą.

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

Tvarka svarbi ir paskirtyje: daliniam katalogui reikia pakankamai vietos fragmentui, o tomui reikia pakankamai vietos ir užbaigtam failui. Paskirties tomo užpildymas perdavimo viduryje sukelia gedimą, kuris atrodo kaip tinklo problema, bet ja nėra, ir gali palikti išsaugotą fragmentą nukirptą. Patikrinkite laisvą vietą priimančiame hoste prieš paleidimą, o ne po to, kai jis nepavyksta. Kelios sekundės su df -h tuo pačiu SSH keliu – pigiausias įmanomas plano bandymas.

Leidimai yra mažesnis, bet tikras rūpestis. Dalinis katalogas, į kurį gali rašyti nesusijusios paskyros, leidžia kam nors kitam pakeisti turinį, kurį jūsų kitas paleidimas traktuos kaip jau gautą. Laikykite jį perdavimo paskyros nuosavybėje ir nedėkite ten, iš kur publikuoja kitos paslaugos.

Paleiskite tą pačią kopiją, o ne gudresnę

Pakartotinis naudojimas taikomas tik tada, kai šaltinis ir paskirtis vis dar apibūdina tą patį objektą. Tas pats kelias, tas pats vardas, tas pats failas. Šaltinio pervadinimas arba nukreipimas į kitą paskirties katalogą pradeda naują palyginimą su niekuo naudingu.

Nepridėkite --whole-file tikėdamiesi delta elgsenos. Ta parinktis liepia rsync kopijuoti visą failą be riedančios kontrolinės sumos palyginimo, o tai pagrįstas pasirinkimas greitoje vietinėje jungtyje ir visiškai neteisingas po nepavykusio tolimojo įkėlimo. --inplace taip pat keičia istoriją: rašo tiesiogiai į paskirties failą, todėl nutrūkimas palieka failą, kuriame maišosi senas ir naujas turinys, be atskiro fragmento, į kurį būtų galima atsitraukti.

Eigos eilutė praneša bendrą perdavimo eigą. Tai nėra užbaigimo signalas. Skaičius, pasiekiantis šimtą procentų, kol ryšys dar atidarytas, reiškia, kad duomenys nustumti, o ne kad gavėjas ką nors pervadino, sinchronizavo ar priėmė.

Priimkite objektą tik jam sutapus

Pirmiausia patvirtinkite išėjimo būseną, tada palyginkite rezultatą, o ne pasitikėkite klaidų nebuvimu. Dydžio patikra pagauna daugumą nukirptų perdavimų; kontrolinių sumų palyginimas pagauna likusius, ir abu yra pigūs, palyginti su pakartotiniu įkėlimu.

Jei archyvą publikuoja pasroviui esantis procesas, priverskite tą procesą laukti priimto failo. Išsaugotas fragmentas, kuris galutiniu vardu patenka į stebimą katalogą, paimamas kito nuskaitymo, o vartotojo klaida bus apie sugadintą įvestį, o ne apie perdavimą, kuris niekada nepasibaigė.

Nelieskite šaltinio, kol gavėjas nepatvirtins. Archyvo atkūrimas tarp bandymų pakeičia palyginimo pagrindą, ir kitas paleidimas arba perkelia beveik viską, arba sukuria failą, kuris neatitinka nei seno, nei naujo šaltinio.

Kai riba yra jungtis, o ne vėliavėlė

Antraštės ir protokolo sąnaudos yra viena perdavimo kaina, ir retai būtent ji nusprendžia, kiek laiko užtrunka didelis failas. Restartavimo elgsena svarbesnė: metodas, kuris išgyvena nutrūkimą be rankinių veiksmų, pateikia tinkamą failą anksčiau nei greitesnis metodas, kurį reikia pradėti iš naujo. Saugykla abiejuose galuose ir autentifikavimo kelias priklauso tam pačiam palyginimui.

Palyginkite leidžiamus alternatyvius kelius su tuo pačiu failu ir ta pačia paskirtimi, ir pažymėkite, iš kur kiekvienas atsinaujina po nutrūkimo. Tas vienas stulpelis pasako apie dvylikos gigabaitų įkėlimą per VPN daugiau nei bet koks trumpame teste išmatuotas didžiausias greitis.

Susiję straipsniai