Качването ви засяда на четири гигабайта от архив с размер дванадесет гигабайта и навикът, научен от мениджърите за изтегляне, казва да натиснете „продължи“. rsync няма да продължи TCP потока, защото този поток е изчезнал с последното препредаване на тунела. Това, което може да направи, е да запази байтовете, които вече е получил, и да ги използва като основа за следващия опит — различен механизъм с различен набор от правила. Флаговете, които изберете, решават дали това повторно използване ще се случи изобщо.

Повторният опит възстановява състояние, а не подновява потока

Когато SSH сесията прекъсне, отдалечената страна остава само с това, което е успяла да изхвърли на диска, и нищо друго. Няма токен на сесията, към който да се прикачите, и няма пореден номер, който да преиграете. Следващото пускане отваря нова връзка, прочита източника отново и пита получателя какво вече има.

Именно този последен въпрос обяснява защо частичният файл си струва да се пази. Копието на получателя дава на rsync нещо за сравнение и алгоритъмът изпраща само разликите, които може да установи. Това все още е нов трансфер на метаданни и ново минаване през източника, така че спестеното време е пропорционално на това колко от файла съвпада, а не на това докъде е стигнала предишната връзка. Ако получателят не е запазил нищо, следващият опит е пълно копие, без значение колко гигабайта е преместил първият.

Решете къде живее многократно използваният фрагмент

Поведението по подразбиране записва частичния файл по пътя на дестинацията, което прави наполовина записан архив видим под окончателното име. --partial-dir го премества в директория по ваш избор, а ръководството описва тази директория като запазена за използване като данни от по-късен трансфер. Относителното име се разрешава под директорията на дестинацията, което е точно това, което искате, когато двете страни може да имат различни подредби.

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

Редът има значение и в дестинацията: частичната директория се нуждае от достатъчно място за фрагмента, а томът — от достатъчно и за завършения файл. Запълването на целевия том по средата на трансфера води до отказ, който изглежда като мрежов проблем, но не е, и може да остави запазения фрагмент отрязан. Проверете свободното място на приемащия хост преди началото на пускането, а не след като се провали. Няколко секунди с df -h по същия SSH път са възможно най-евтиният тест на плана.

Разрешенията са по-малка, но реална грижа. Частична директория, достъпна за запис от несвързани акаунти, позволява на някой друг да подмени съдържание, което следващото ви пускане ще третира като вече получено. Дръжте я собственост на трансферния акаунт и не я слагайте там, откъдето публикуват други услуги.

Пуснете същото копие, а не по-умно такова

Повторното използване важи само когато източникът и дестинацията все още описват същия обект. Същият път, същото име, същият файл. Преименуването на източника или соченето към друга директория на дестинацията започва ново сравнение с нищо полезно.

Не добавяйте --whole-file, докато очаквате делта поведението. Тази опция казва на rsync да копира целия файл без сравнението с плъзгаща се контролна сума — разумен избор при бърза локална връзка и точно грешният след провалено качване на дълги разстояния. --inplace също променя историята: пише директно във файла на дестинацията, така че прекъсване оставя файл, смесващ старо и ново съдържание, без отделен фрагмент, на който да се разчита.

Редът за напредък отчита общ напредък на трансфера. Той не е сигнал за завършване. Число, което стига сто процента, докато връзката е още отворена, означава, че данните са изпратени, а не че получателят е преименувал, синхронизирал или приел нещо.

Приемете обекта само след като съвпадне

Първо потвърдете изходния статус, после сравнете резултата, вместо да се доверявате на липсата на грешки. Проверката за размер хваща повечето отрязани трансфери; сравнението на контролни суми хваща останалите и двете са евтини в сравнение с повторното пускане на качването.

Ако архивът се публикува от процес надолу по веригата, накарайте този процес да чака приетия файл. Запазен фрагмент, който попадне в наблюдавана директория под окончателното име, се прихваща от следващото сканиране и грешката на потребителя ще бъде за повреден вход, а не за трансфер, който никога не е завършил.

Не пипайте източника, докато получателят не потвърди. Регенерирането на архива между опитите променя базата за сравнение и следващото пускане или прехвърля почти всичко, или създава файл, който не съвпада нито със стария, нито с новия източник.

Когато ограничението е връзката, а не флагът

Овърхедът на заглавието и протокола е една цена на трансфера и рядко е тази, която решава колко време отнема един голям файл. Поведението при рестарт е по-важно: метод, който преживява прекъсване без ръчни стъпки, доставя използваем файл по-рано от по-бърз метод, който трябва да започне отново. Съхранението от двете страни и пътят за автентикация принадлежат на същото сравнение.

Сравнете разрешените алтернативни пътища със същия файл и същата дестинация и отбележете откъде всеки се възобновява след прекъсване. Тази единствена колона ви казва повече за качване от дванадесет гигабайта през VPN, отколкото всяка пикова скорост, измерена при кратък тест.

Подобни статии