rsync праз VPN: паўтор, які выкарыстоўвае сарваную перадачу
Абрынуты тунэль спыняе злучэнне, а не даныя. Захавайце фрагмент з --partial-dir, паўтарыце тую ж копію і праверце файл перад публікацыяй.
Ваша загрузка спыняецца на чатырох гігабайтах з архіва ў дванаццаць гігабайтаў, і звычка, навучаная мэнэджарамі спампоўкі, кажа націснуць «працягнуць». 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 больш, чым любая пікавая хуткасць, замечаная ў кароткім тэсце.