Řešení 1:
Nyní existuje oficiální způsob, jak to udělat v rsync (verze 3.1.0 protokol verze 31, testováno s Ubuntu Trusty 14.04).
#> ./rsync -a --info=progress2 /usr .
305,002,533 80% 65.69MB/s 0:00:01 xfr#1653, ir-chk=1593/3594)
Zkusil jsem to se svým /usr
složku, protože jsem chtěl tuto funkci pro přenos celých souborových systémů a /usr
se zdálo být dobrým reprezentativním vzorkem.
--info=progress2
dává pěkné celkové procento, i když je to jen částečná hodnota. Ve skutečnosti můj /usr
složka má více než 6 koncertů:
#> du -sh /usr
6,6G /usr/
a rsync
zabralo spoustu času to všechno naskenovat. Takže téměř po celou dobu bylo procento, které jsem viděl, asi z 90 % dokončeno, ale přesto je uklidňující vidět, že se něco kopíruje :)
Reference:
- https://stackoverflow.com/a/7272339/1396334
- https://download.samba.org/pub/rsync/NEWS#3.1.0
Řešení 2:
Následující platí pro rsync verze 3.0.0 a vyšší. Možnosti popsané níže byly představeny v tomto vydání 1. března 2008.
Spolu s --info=progress2 můžete také použít --no-inc-recursive možnost (nebo její kratší --no-i-r alias) pro zakázání přírůstkové rekurze.
Tím se vytvoří celý seznam souborů na začátku, místo aby se postupně objevovaly další soubory během přenosu. Vzhledem k tomu, že bude znát všechny soubory před spuštěním, bude poskytovat lepší zprávu o celkovém pokroku. To platí pro počet souborů – nehlásí žádný pokrok na základě velikosti souborů.
To zahrnuje kompromis. Sestavení celého seznamu souborů předem je náročnější na paměť a může výrazně zpozdit začátek samotného přenosu. Jak byste očekávali, čím více souborů je, tím delší bude zpoždění a tím více paměti bude vyžadovat.
Následující text pochází z příručky rsync (zdroj - http://rsync.samba.org/ftp/rsync/rsync.html):
-r, --rekurzivní
To říká rsync, aby kopíroval adresáře rekurzivně. Viz také --dirs (-d). Počínaje rsync 3.0.0 je nyní použitý rekurzivní algoritmus přírůstkové skenování, které využívá mnohem méně paměti než dříve a začíná přenos po dokončení skenování několika prvních adresářů. Toto přírůstkové skenování ovlivňuje pouze náš rekurzivní algoritmus a nemění nerekurzivní přenos. Je to také možné pouze v případě, že oba konce přenosu jsou alespoň verze 3.0.0.
Některé možnosti vyžadují rsync, aby znal úplný seznam souborů, takže tyto možnosti zakazují režim přírůstkové rekurze. Patří mezi ně:--delete-before, --delete-after, --prune-empty-dirs a --delay-updates. Z tohoto důvodu je výchozí režim mazání, když zadáte --delete, nyní --delete-during, když jsou oba konce připojení alespoň 3.0.0 (použijte --del nebo --delete-during k vyžádání tohoto vylepšeného režimu mazání výslovně). Viz také možnost --delete-delay, která je lepší volbou než použití --delete-after.
Přírůstkovou rekurzi lze zakázat pomocí --no-inc-recursive možnost nebo její kratší --no-i-r alias.
Viz také https://rsync.samba.org pro konkrétní rozdíly ve verzích (přejděte dolů a podívejte se na odkazy Release News).
Řešení 3:
Můžete pomocí 'pv' (apt-get install pv
s Debianem a ubuntu). Doporučuji sledovat počet přenesených souborů, protože množství přenesených dat nezávisí na velikosti souborů, ale na rozdílu mezi zdrojem a cílem. A počítání souborů bude počítat stejný postup pro jednu velkou deltu a další s malou deltou. Což znamená, že v každém případě může být odhad ETA daleko. Odhadovaný čas příjezdu podle velikosti funguje pouze v případě, že je váš cíl prázdný, v tomto případě delta ==velikost zdroje.
Obecná myšlenka je vydat jeden řádek na soubor „přenesený“ z rsync a počítat tyto řádky s „pv“:
rsync -ai /source remote:/dest | pv -les [number of files] >/dev/null
Mám tendenci zálohovat celé souborové systémy (z několika důvodů), v tomto případě můžete použít mnohem levnější df
získat počet souborů (spíše než du
nebo find
který bude procházet vaší zdrojovou hierarchií jindy poté, co to provedl rsync). Objeví se volba -x, která zajistí, že rsync zůstane na stejném zdrojovém souborovém systému (a nebude následovat ostatní vnitřní připojení):
rsync -aix /source remote:/dest | pv -les $(df -i /source | perl -ane 'print $F[2] if $F[5] =~ m:^/:') >/dev/null
Pokud chcete počítat soubory v /source obecně, použijte find /source|wc -l
(Opět varování:může být pomalý a těžký na I/O).
Řešení 4:
danakim má pravdu. Neexistují žádné triviální způsoby, jak přidat ukazatel celkového pokroku.
Důvodem je to, že když se rsync podívá na seznam souborů k synchronizaci, předem neví, které soubory bude třeba změnit. Pokud provádíte převody delta, je třeba předem vypočítat samotné delty, abyste získali celkový obrázek o práci, kterou je třeba udělat.
Jinými slovy, nejsnazší způsob, jak vypočítat, kolik práce je třeba udělat, je skutečně ji udělat.
Řešení 5:
Při dlouhých přenosech jsem spokojený se spuštěním du -s
na obou stranách. Dokonce watch -n1 du -s
, pokud cítím opravdu úzkost.
watch
provede příkaz (du -s
zde) pravidelně (zde každou 1 sekundu) a zobrazuje výstup na celou obrazovku.