Vaše nahrávání se zasekne na čtyřech gigabajtech dvanáctigigabajtového archivu a návyk naučený od správců stahování říká stisknout pokračovat. rsync neobnoví TCP proud, protože ten proud zmizel s posledním přenosem tunelu. Co dokáže, je ponechat bajty, které už přijal, a použít je jako základ pro další pokus, což je jiný mechanismus s jinou sadou pravidel. Přepínače, které zvolíte, rozhodují, zda k tomuto opětovnému použití vůbec dojde.

Opakovaný pokus obnovuje stav, ne proud

Když SSH relace spadne, na vzdálené straně zůstane jen to, co stihla vyflushovat na disk, a nic jiného. Neexistuje token relace, ke kterému by se šlo připojit, ani pořadové číslo k přehrání. Další běh otevře nové spojení, znovu přečte zdroj a zeptá se příjemce, co už má.

Právě tato poslední otázka vysvětluje, proč se vyplatí částečný soubor uchovat. Kopie u příjemce dává rsyncu něco k porovnání a algoritmus posílá jen rozdíly, které dokáže určit. Pořád je to nový přenos metadat a nový průchod zdrojem, takže ušetřený čas je úměrný tomu, jak velká část souboru sedí, ne tomu, kam až se dostalo předchozí spojení. Pokud příjemce nic neuchoval, je další pokus plná kopie, bez ohledu na to, kolik gigabajtů ten první přenesl.

Rozhodněte, kde bude znovupoužitelný fragment bydlet

Výchozí chování zapisuje částečný soubor na cílovou cestu, což činí napůl zapsaný archiv viditelným pod konečným názvem. --partial-dir jej přesune do adresáře podle vaší volby a manuál tento adresář popisuje jako uchovávaný pro použití jako data pozdějším přenosem. Relativní název se vyhodnocuje v cílovém adresáři, což je přesně to, co chcete, když obě strany mohou mít různá uspořádání.

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

Na cíli záleží i na pořadí: částečný adresář potřebuje dost místa pro fragment a svazek potřebuje dost i pro dokončený soubor. Zaplnění cílového svazku uprostřed přenosu vyvolá selhání, které vypadá jako síťový problém, ale není, a může ponechat uchovaný fragment zkrácený. Zkontrolujte volné místo na přijímajícím hostiteli před spuštěním, ne poté, co selže. Několik sekund s df -h po stejné SSH cestě je nejlevnější možný test plánu.

Oprávnění jsou menší, ale skutečná starost. Částečný adresář zapisovatelný nesouvisejícími účty umožní někomu jinému nahradit obsah, který váš další běh bude považovat za již přijatý. Držte ho ve vlastnictví přenosového účtu a neumisťujte ho tam, odkud publikují jiné služby.

Spusťte stejnou kopii, ne chytřejší

Opětovné použití platí jen tehdy, když zdroj a cíl stále popisují stejný objekt. Stejná cesta, stejný název, stejný soubor. Přejmenování zdroje nebo ukázání na jiný cílový adresář začíná nové srovnání s ničím užitečným.

Nepřidávejte --whole-file, když očekáváte delta chování. Tato volba říká rsyncu zkopírovat celý soubor bez porovnání klouzavého kontrolního součtu, což je rozumná volba na rychlém místním spoji a přesně špatná po neúspěšném nahrání na dlouhou vzdálenost. --inplace také mění příběh: zapisuje přímo do cílového souboru, takže přerušení nechá soubor mísící starý a nový obsah bez samostatného fragmentu, na který by se dalo spolehnout.

Řádek průběhu hlásí souhrnný průběh přenosu. Není to signál dokončení. Číslo, které dosáhne sta procent, dokud je spojení ještě otevřené, znamená, že data byla odeslána, ne že příjemce něco přejmenoval, synchronizoval nebo přijal.

Přijměte objekt až poté, co se shoduje

Nejprve potvrďte návratový stav, pak porovnejte výsledek, místo abyste věřili nepřítomnosti chyb. Kontrola velikosti zachytí většinu zkrácených přenosů; porovnání kontrolních součtů zachytí zbytek a obojí je levné ve srovnání s opětovným spuštěním nahrávání.

Pokud archiv publikuje navazující proces, přinuťte tento proces čekat na přijatý soubor. Uchovaný fragment, který pod konečným názvem přistane ve sledovaném adresáři, sebere příští sken a chyba spotřebitele bude o poškozeném vstupu, ne o přenosu, který nikdy neskončil.

Nesahejte na zdroj, dokud příjemce nepotvrdí. Obnovení archivu mezi pokusy mění základ srovnání a další běh buď přenese téměř vše, nebo vytvoří soubor, který neodpovídá ani starému, ani novému zdroji.

Když je limitem spoj, ne přepínač

Režie hlavičky a protokolu je jedna cena přenosu a málokdy je tou, která rozhoduje, jak dlouho velký soubor trvá. Chování při restartu je důležitější: metoda, která přežije výpadek bez ručních kroků, dodá použitelný soubor dřív než rychlejší metoda, která musí začít znovu. Úložiště na obou stranách a cesta autentizace patří do stejného srovnání.

Porovnejte povolené alternativní cesty se stejným souborem a stejným cílem a poznamenejte, odkud se každá po přerušení obnovuje. Ten jediný sloupec vám o dvanáctigigabajtovém nahrávání přes VPN řekne víc než jakákoli špičková rychlost změřená v krátkém testu.

Související články