Portál AbcLinuxu, 12. května 2025 01:07

Dotaz: Jak zjistit, kolik toho rsync přenese

7.2.2016 18:15 ttt
Jak zjistit, kolik toho rsync přenese
Přečteno: 1663×
Odpovědět | Admin
Na cílovém stroji mám databázový dump (~5GB), na zdrojovém stroji jsem udělal nový dump. Dokážu to přenést pomocí rsyncu ze zdrojového na cílový stroj, ale předtím, než to udělám, by mě zajímalo, kolik dat bude potřeba opravdu přenést a kolik ušetřím díky shodným blokům. Jak to zjistit?

V manuálových stránkách rsyncu jsem zjistil jen jak vypsat, které soubory se budou přenášet. Možná nějaký jiný nástroj, který dělá jen porovnání a ne přenos? Skript to jistí, ale než se to něj pustím, rád bych věděl, ze nevynalézám kolo.


Řešení dotazu:


Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Řešení 1× (Jindřich Makovička)
8.2.2016 08:57 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Odpovědět | | Sbalit | Link | Blokovat | Admin
Od verze 3.1.0 má mít rsync volbu info, která s parametrem progress2 vypíše po skončení přenosu celkovou statistiku viz na stránce dole.
8.2.2016 16:37 OldFrog {Ondra Nemecek} | skóre: 36 | blog: Žabákův notes | Praha
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Jenže autor to chce vědet předem:
(...) ale předtím, než to udělám, by mě zajímalo, kolik dat bude potřeba opravdu přenést (...)
Možná přidat --dry-run ?
-- OldFrog
8.2.2016 21:13 rastos | skóre: 63 | blog: rastos
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Krátky experiment ukazuje, že s --dry-run dostane len počet bajtov potrebných na ten dry-run. Teda ak má 10 blokov po 1kB, a jeden blok sa líši. Tak to nepovie ~1kB, ale pár bajtov, ktoré potrebuje na to, aby zistil, že treba preniesť jeden blok.
8.2.2016 22:44 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Kdybyste se na ten link podívali pořádně, tak byste viděli, že je tam malý skript, který přesně tenhle problém řeší. Rsync při --dry-run jen vrací seznam souborů, které se budou přenášet, ten se rourou předává utilitě pv, která ho přežvýkává.
9.2.2016 17:50 ttt
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Nevidím z toho, jak mi pv pomůže.
pv shows the progress of data through a pipeline by giving information such as time elapsed, percentage completed (with progress bar), current throughput rate, total data transferred, and ETA.
Potřebuju ho dopředu nakrmit maximem, které ale neznám - je to předmětem dotazu. Na odkazované stránce je jak zjistit počet přenesených souborů, ale to já vím - bude to 1.

Ještě se musím zamyslet, jestli je to vůbec možné. Nejsem si jistý, jestli rsync s plovoucími hashi nepotřebuje mít přenesený všechno předešlé, aby dokázal dopočítat, jestli bude přenášet další blok.
10.2.2016 07:25 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Jestli je to jeden soubor, tak to bude objem jeho dát. Nevím o tom, že by rsync posílal data atomicky.
10.2.2016 10:16 ttt
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Objem dat by to byl, pokud bych neměl podobný soubor na cílovém stroji. Já tam mám dump, který je o 2 dny starší. A buď je to rsync friendly a bude potřeba přenést jen třeba 1 % nebo ne a musím zkopírovat 99 %. A tu informaci bych chtěl dřív než spustím přenos.
10.2.2016 11:33 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Podle mě to je ta informace, kterou jsi dostal. Dva dny starý dump se obsahově lišit nemusí. Jinak podle toho co jsem se dočetl, funguje rsync tak, že nejprve vytvoří dočasný soubor do kterého stahuje po síti pouze bloky, které jsou odlišné od bloků v cílovém souboru a tím pak cílový soubor nahradí. Pokud půjde o binární blob, který nebude mít shodné datové bloky, tak defakto přetáhne celý soubor, ale u databázového dumpu může být skutečně přenos minimální. Viz Jak pracuje rsync

10.2.2016 11:41 Filip Jirsák
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Ale o to přece tazateli celou dobu jde. Aby zjistil, kolik bloků v cílovém souboru není a kolik toho tedy bude nutné přenést.
10.2.2016 11:39 Filip Jirsák
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Moc nerozumím tomu, k čemu je ta informace dobrá. I když zjistíte, že je potřeba zkopírovat celý soubor, stejně ho budete muset zkopírovat, a je prakticky jedno, zda ho zkopírujete rsyncem nebo jinak. Nebo-li rsync řeší oba dva případy – ať se projeví výhoda rsync protokolu nebo ne.
10.2.2016 11:47 R
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Napriklad aby som vedel, ci prenos prebehne za 2 minuty alebo 2 hodiny.
10.2.2016 12:40 Filip Jirsák
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Není lepší pro to použít parametr --info=progress2?
10.2.2016 13:22 nobody
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
pokud ti jde nahodou o to aby to nezatezovalo 2h HDD, muzes pustit pustit pres ionice s volbou aby se pracovalo s hdd jen pokud nepracuje s hdd neco jineho, takze nebude nic brzdit...
ionice -c3 rsync ... ... ...
10.2.2016 13:43 ttt
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Tahám to po síti, přenos trvá několik hodin a vytěžuje síť. Můžu nastavit --bwlimit, ale pak se dostanu někam okolo 10 hodin. Pokud zjistím, že je potřeba přenést celý soubor (nebo třeba > 80 %), nebudu to přenášet vůbec a vyřeším to jinak. Třeba "kabelovým" přenosem. Idea byla, že to půjde zjistit efektivněji než experimentem.
10.2.2016 14:32 Filip Jirsák
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
--dry-run by mělo zabránit přenosu dat, --itemize-changes vypíše změny, --stats vypíše statistiky. Z toho nedostanete výstup potřebný pro váš odhad?
10.2.2016 15:05 ttt
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
rsync remote:dump.sql dump.sql --info=progress2    --human-readable --dry-run -vv --stats --itemize-changes

dá stejný výstup (až na čísla procesu, dobu běhu), ať mu podstrčím shodný soubor nebo prázdný soubor.
10.2.2016 16:44 nobody
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
napada me uchylnost... drzet si ten dump dvojmo na lokalu, takze provedes realnej sync local->local, zjistis mnozstvi zmen a podle toho pustis/nepustis sync local->remote :)
10.2.2016 16:54 ttt
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Ech... to mě taky mohlo napadnout :) Jo, to vyřeší můj problém, ten původní dump tam někde je.

10.2.2016 16:56 Filip Jirsák
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
To by ale bylo nutné rsync přesvědčit, aby se choval jako při síťovém přenosu. Protože rsync není napsán hloupě, a když jsou zdroj a cíl místní, soubor normálně zkopíruje a nezpomaluje to zbytečným načítáním z disku. Při síťovém přenosu je úzkým hrdlem síť, proto optimalizuje rsync přenos dat po síti. Při lokálním přenosu jsou ale úzkým hrdlem pevné disky, a nemá tedy smysl optimalizovat přenos přes operační paměť.
10.2.2016 17:42 lertimir | skóre: 64 | blog: Par_slov
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
tak ten lokální rsync pustí sítovým způsobem na localhost. to ba se choval rsync sítově.
10.2.2016 15:56 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Vylezou z toho požadovaná čísla?
Notably, a dry run does not send the actual data for file transfers, so --progress has no effect, the "bytes sent", "bytes received", "literal data", and "matched data" statistics are too small, and the "speedup" value is equivalent to a run where no file transfers were needed.
10.2.2016 17:48 lertimir | skóre: 64 | blog: Par_slov
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
5GB a 10 hodin? proboha co je to za síť? to je tak 100kB/s.
10.2.2016 18:34 Aleš Kapica | skóre: 52 | blog: kenyho_stesky | Ostrava
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Tím chtěl naznačit asi, jak by to bylo, kdyby to hodně přiškrtil,
10.2.2016 22:39 ttt
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Je to server, který se používá v interní síti, spojení ven tam typicky není potřeba. Plná přenosová rychlost myslím byla asi 250 kB/s. Běs :)
Jendа avatar 10.2.2016 23:55 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Místa, kde jediné dostupné spojení je AžDSL a s trochou štěstí i zarušená mikrovlnka, nejsou zas tak vzácná.
12.2.2016 08:43 R
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
U nas je dost miest, kde nie je ani ADSL.
11.2.2016 07:10 Filip Jirsák
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Odpovědět | | Sbalit | Link | Blokovat | Admin
Nebylo by lepší použít inkrementální zálohy? Nebude nutné dodatečně zjišťovat, co se změnilo, a zároveň můžete držet těch záloh více pro případ, kdy se zjistí až po několika dnech, že se něco pokazilo.
12.2.2016 09:49 ttt
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
Nejde o zálohování, ale o vytvoření kopie produkční databáze pro vývojáře - pokud je potřeba hledat chybu v datech. Zálohování je tam řešené jinak. Dělají se tam jen plné zálohy, v současné podobě to pro přenos použít nejde.
12.2.2016 09:53 dustin | skóre: 63 | blog: dustin
Rozbalit Rozbalit vše Re: Jak zjistit, kolik toho rsync přenese
A nelze tu kopii vytvářet průběžnou replikací na nějaký server na síti vývojářů? Z replikační instance si mohou dělat klony pro svou potřebu, klidně lokálním rsyncem nebo jen cp -a. Navíc nemusí dump nalévat, mají rovnou data připravená. A pořád aktuální.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.