GNU/Linux >> Znalost Linux >  >> Linux

Praktické příklady příkazu rsync v Linuxu

Rsync (Remote Sync) je synchronizační nástroj pro kopírování souborů a adresářů v systému nebo mezi systémy. Jedinou největší výhodou rsync je, že kopíruje pouze změněné soubory, a tím snižuje spotřebu CPU a šetří šířku pásma a čas při kopírování souborů.

Výhody rsync oproti scp

Již jsem vám ukázal několik praktických příkladů příkazu scp. scp, zkratka pro bezpečné kopírování, se také používá pro kopírování souborů mezi dvěma vzdálenými systémy přes ssh.

Ale rsync má oproti scp určité výhody, díky kterým je lepší volbou.

  • rsync zkopíruje pouze změněné soubory, zatímco scp zkopíruje každý soubor a v případě potřeby je přepíše. V rsync je tedy zaručena lepší rychlost.
  • rsync může fungovat i bez šifrování. To může snížit režii. To je však třeba vzít v úvahu, pokud neexistuje žádné bezpečnostní riziko přenosu bez šifrování.
  • Je možné obnovit nedokončený přenos v rsync, zatímco scp to neumožňuje.

Pokud nemáte rsync nainstalován, můžete jej nainstalovat pomocí správce balíčků.

V Ubuntu a Debianu můžete nainstalovat rsync pomocí následujícího příkazu.

sudo apt install rsync

Praktické příklady příkazu rsync v Linuxu

rsync příkaz má následující strukturu

rsync [OPTIONS] Source Destination

Kde zdroj a cíl mohou být místní cesty nebo vzdálené cesty ve formátu [email protected]:cesta/k/souboru

Podívejme se, jak používat příkaz rsync s několika užitečnými příklady.

🗒️Pokud máte adresář A, použijte „A“, abyste jej uvedli, nikoli „A/“. Použití A/ bude odkazovat na všechny soubory v adresáři A a ne na samotný adresář A. Takže kopírování A vytvoří nový adresář v cíli a pak zkopíruje soubory v A. Ale zkopírování A/ zkopíruje do cíle pouze soubory v A.

1. Synchronizace místních souborů [Jednosměrná synchronizace]

Chcete-li zkopírovat místní soubory z adresáře A do Backup-A-dir ,

rsync A/ Backup-A-dir/

Tento příkaz zkopíruje soubory (pokud byly nalezeny změny) adresáře A do Backup-A-dir. To nezkopíruje žádné další soubory v Backup-A-dir do A, které původně nejsou v A. Proto se nazývá jednosměrná synchronizace.

2. Synchronizace vzdálených souborů [Jednosměrná synchronizace]

Chcete-li synchronizovat soubory mezi vzdáleným systémem a místním systémem, příkaz je podobný. Všimněte si, že zdrojové a cílové umístění mohou být buď cesty k místnímu systému souborů, nebo cesty ke vzdálenému systému (ssh).

rsync dev/build [email protected]:~/Backup

3. Obousměrná synchronizace

Výše uvedený příkaz zkopíruje soubory ze zdroje do cíle. Pokud však měl systém nějaké další soubory, které nebyly ve zdroji, nebudou jednosměrnou synchronizací odstraněny. Pokud to chcete, budete muset použít obousměrnou synchronizaci.

Chcete-li zachovat oba koncové body (adresáře nebo soubory) ve stejném stavu se stejnými soubory a bez doplňků na žádné straně, stačí připojit –delete možnost k původnímu příkazu.

rsync A/ Backup-A-dir/ --delete

4. Po zkopírování odstranit zdrojové soubory

Pokud po dokončení přenosu potřebujete smazat soubory ve zdroji, –remove-source-files možnost by se měla hodit.

rsync A/ Backup-A-dir/ --remove-source-files

S výše uvedeným příkazem byste měli být opatrní. Zdroj byste měli smazat pouze v případě, že je vytvořen dostatečný počet kopií a data již ve zdroji nejsou potřeba.

5. Zahrnout a vyloučit soubory

Pokud potřebujete (nebo nepotřebujete) přenést soubory, jejichž název odpovídá vzoru,
–zahrnout a –vyloučit lze použít možnost. Každá možnost by měla mít za znakem „=“ vzor.

rsync A/ Backup-A-dir/ --include=*.py --exclude=*.tmp.py

Výše uvedený příkaz zkopíruje všechny soubory s příponou .py kromě těch s příponou .tmp.py.

Jako vzor můžete použít regulární výraz. Více se o tom dozvíte zde.

Tip:Pokud je seznam vzorů pro některou z možností velký, můžete jej uložit do souboru a jejich názvy můžete předat do –include-from a –vyloučit-z možnost.

6. rsync přes SSH

Pokud chcete přenášet soubory přes SSH, musíte zadat ssh pomocí -e možnost.

rsync -e ssh A/ [email protected]:~/Backup-A-dir/

Toto je nejpreferovanější způsob přenosu souborů do vzdáleného systému, protože je šifrován. Je třeba poznamenat, že kvůli šifrování bude existovat režie. Může to tedy trvat déle než normální přenos.

Aby to fungovalo, měli byste povolit přihlášení ssh nakonfigurované na straně serveru. Veřejný klíč a soukromý klíč také musí být ve svých příslušných cestách.

Chcete-li se dozvědět více o ssh a jeho nastavení, přečtěte si tyto články LinuxHandBook o konfiguraci SSH na straně klienta a konfiguraci SSH na straně serveru.

7. Podrobný režim

Většina příkazů v Linuxu má podrobnou možnost zaznamenat akci příkazu do terminálu. rsync není výjimkou.

Předejte buď -v možnost nebo —podrobné možnost podrobného popisu příkazu. Uvede seznam akcí, které se provádějí, a jejich průběh. To bude velmi užitečné při ladění.

rsync A/ Backup-A-dir/ -v -r

Výstup bude podobný níže uvedenému

$ rsync A/ Backup-A-dir/ -v -r
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 388 bytes received 168 bytes 1,112.00 bytes/sec
total size is 0 speedup is 0.00

8. Spustit nasucho – spustit, ale nekopírovat

V případě, že byste chtěli znát soubory, které se budou kopírovat, aniž byste skutečně provedli přenos, můžete použít –dry-run (nebo -n ).

Provádí všechny operace jako normální rsync příkaz dělá kromě kopírovací části. Zobrazí seznam souborů, které budou zkopírovány nebo odstraněny (v případě potřeby), a poté se zastaví těsně před kopírováním.

rsync -v A/ Backup-A-dir/ --dry-run

Což bude mít za následek

$ rsync -v A/ Backup-A-dir/ –dry-run
sending incremental file list
created directory Backup-A-dir
./
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
sent 172 bytes received 72 bytes 488.00 bytes/sec
total size is 0 speedup is 0.00 (DRY RUN)

Všimněte si, že musíte použít -v možnost zobrazit výše uvedený výstup příkazu chodu nasucho. Pokud ne, proběhne suchý běh, ale výsledky se nezobrazí.

9. Zobrazit průběh přenosu

Pokud chcete zobrazit průběh přenosu, použijte –průběh možnost.

rsync A/ Backup-A-dir/ --progress

Výše uvedený příkaz zobrazí ukazatel průběhu podobný tomu níže:

$ rsync -r A/ Backup-A-dir/ –progress
sending incremental file list
created directory Backup-A-dir
./
file1.txt 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=5/7)
file2.txt 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=4/7)
file3.txt 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=3/7)
file4.txt 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=2/7)
file5.txt 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=1/7)
file6.txt 0 100% 0.00kB/s 0:00:00 (xfr#6, to-chk=0/7)

10. Komprimovat a přenášet data

Pokud chcete ušetřit šířku pásma sítě a čas, můžete komprimovat přenášená data pomocí -z volba. V cíli bude automaticky dekomprimován.

Tento trik může ušetřit spoustu síťového času a nákladů, když jsou data k přenosu obrovská. Je třeba se tomu vyhnout u malých souborů, protože režijní zpracování převáží celkový čas.

rsync -z A/ Backup-A-dir/
Upozorňujeme, že byste se měli vyhnout použití -z možnost při provádění místních přenosů a malých souborů. Zbytečně to zpomalí.

11. Rekurzivně zkopírujte soubory a adresáře

Všechny výše uvedené příkazy kopírují pouze soubory, nikoli podadresáře (stejný případ u každého příkazu Linuxu). V důsledku toho se soubory v těchto podadresářích nezkopírují. To lze eliminovat rekurzivním kopírováním.

Chcete-li rekurzivně kopírovat soubory a adresáře, -r lze použít.

rsync -r A/ Backup-A-dir/

12. Archivovat a uchovat metadata

Pokud chcete zachovat symbolické odkazy, časová razítka, oprávnění k souborům, vlastnictví uživatelů a skupin souborů, -a lze použít.

rsync -a A/ Backup-A-dir/

Tato možnost také zahrnuje funkci -r volba. Takže rekurzivně kopíruje soubory a zachovává metadata zkopírovaných souborů.

13. Nastavte limit velikosti souboru

Abyste se vyhnuli přenosu velkých souborů, můžete nastavit limit velikosti souboru pomocí –max-size volba. To vám pomůže udržet kontrolu velikosti souboru, který bude zkopírován.

rsync --max-size='100K' A/ Backup-A-dir/ 

14. Nastavte limit šířky pásma

Pokud máte nějaká omezení rychlosti sítě, můžete je určit pomocí –bwlimit volba. bwlimit by měl být vyjádřen v kbps .

rsync --bwlimit=100 A/ Backup-A-dir/

15. Obnovte stahování pomocí rsync

Pokud je stahování/přenos neúplné, můžete použít příkaz rsync k udržení nedokončených stahování, aby mohl přenos pokračovat při příštím vydání stejného příkazu.

Chcete-li obnovit přenos, –připojit lze použít.

rsync --append A /Backup-A-dir/

Toto vlákno StackExchange je velmi dobrým zdrojem, kde se můžete dozvědět více o tomto tématu.

Všechny výše uvedené příkazy jsou základní a zkopírují soubor v jediném toku nebo procesu. Pokud je dat 5 TB a přenos 1 TB trvá 2 hodiny, celý přenos potrvá 10 hodin. Existuje ale ještě jeden způsob, jak přenos urychlit

Bonusový tip:Zrychlete Rsync / paralelní přenos

paralelní je utilita GNU slouží k paralelnímu provádění úloh. Rsync lze snadno propojit s rsync .

Nainstalujte paralelní GNU v systému Ubuntu/Debian pomocí

sudo apt install parallel

Než se pohneme dále, pochopme, jak paralelně funguje. Uvažujme o analogii.

Předpokládejme, že existuje 1000 vajec a 100 košíků, každý s dronem. Úkolem je doručit to zákazníkům. Manažer přidělí každému košíku 10 vajec a nařídí dronu, aby doručil. Každý dron provádí operaci (v našem případě rsync proces 10 souborů). Manažer dohlíží na všechny drony. Všimněte si, že drony nikdy nebudou vědět, že paralelně existují další úlohy. Pouze manažer.

Podobně rsync provádí přenos souborů jako dron. paralelní vystupuje jako manažer.

paralelní rozdělí soubory k odeslání a vytvoří zadaný počet procesů rsync, každý s jiným seznamem souborů. Paralel pouze řídí celý proces. rsync nezná další paralelní procesy ani nemá funkci paralelního přenosu. Parallel poskytuje paralelní přenos pomocí sdružování úloh.

Paralelní příkaz se tedy skládá ze dvou částí, které jsou propojeny potrubím. Jedním jsou argumenty (vajíčka/soubory) a druhým paralelní příkaz (správce).

ls A/* | parallel -j 20 rsync A/{} /Backup-A-dir/

Ve výše uvedeném příkazu působí každý soubor/adresář ve výstupu jako výsledek prvního příkazu před symbolem „|“ jako argument. {} představuje argument zleva v paralelním příkazu.

-j n – Používá se k nastavení n počtu úloh nebo pracovníků. V našem případě je n 20.
další částí je obvyklý příkaz rsync pro každý argument.
Po vygenerování příkazů budou spojeny do 20 procesů a budou prováděny paralelně.

Všimněte si, že do výše uvedeného příkazu rsync můžete přidat libovolné možnosti, jako byste to udělali bez paralely. Stačí přidat možnosti rsync (jako -z,-a,-e ssh) za slovo rsync ve výše uvedeném příkazu.

Chcete-li o paralele porozumět více, přejděte na tuto stránku.

Běžné chyby s rsync

Při používání rsync se můžete setkat s chybami. Níže jsou uvedeny některé běžné spolu s jejich tipy pro odstraňování problémů.

1. povolení rsync odepřeno

Toto je chyba, která se může stát, když používáte cesty, pro které nemáte příslušná práva. Například:

rsync B/ /home/

Výše uvedený příkaz způsobí chybu odmítnutí oprávnění, pokud nemáte oprávnění k zápisu na /home/ (normální uživatelé to obvykle nedělají)

2. rsync se nepodařilo nastavit časy na

K tomu dochází, když souborový systém nezvládá časy úprav souborů a adresářů. Více se o tom můžete dozvědět na této stránce.

Doufám, že jste se v tomto článku naučili několik dobrých příkladů příkazu synchronizace. Pokud máte nějaké návrhy nebo připomínky, neváhejte je uvést níže.


Linux
  1. 25 Užitečné hledání Příkaz Praktické příklady v Linuxu

  2. 10 Praktické příklady příkazů Linux nm

  3. Linuxový příkaz rsync s praktickými příklady

  1. cp Command v Linuxu:7 praktických příkladů

  2. Linux Shutdown Command:5 praktických příkladů

  3. 5 Praktické příklady příkazu dd v Linuxu

  1. Linux Find Command s praktickými příklady

  2. lsof Command v Linuxu (10 příkladů)

  3. Praktické příklady příkazu Unzip v Linuxu