GNU/Linux >> Znalost Linux >  >> Linux

Zobrazení celkového pokroku v rsync:je to možné?

Ř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.


Linux
  1. Změnit prostředí běžícího procesu?

  2. Je možné emulovat starší verze Bash?

  3. Jak zkontrolovat průběh běhu Cp?

  1. Jak selektivně umlčet Rsync?

  2. Použití rsync k synchronizaci souborů

  3. Je možné přerušit vypnutí na Linuxu?

  1. Chytřejší přenos souborů než Rsync?

  2. cp -r bez skrytých souborů

  3. Je možné pingnout adresu:port?