Průvodce

Rychlý přenos velkých souborů mezi servery pomocí rsync přes SSH

  • 14 min čtení
  • Tým Hostragons
Rychlý přenos velkých souborů mezi servery pomocí rsync přes SSH

Příkaz rsync přes SSH patří mezi nejefektivnější způsoby, jak rychle, bezpečně a spolehlivě přenášet velké soubory mezi dvěma Linuxovými servery. Především při přesunech stovek GB webových souborů, záloh, mediálních složek nebo dat aplikací využívá rsync přenos pouze změněných bloků, což výrazně zrychluje oproti klasickému kopírování. Princip je jednoduchý: soubory ze zdrojového serveru se přes šifrovaný SSH tunel synchronizují na cílový server; v případě přerušení lze přenos obnovit od posledního bodu.

Při migracích serverů, upgradu hostingu, změně datacentra nebo zálohování je kromě rychlosti klíčová i integrita dat. Stahovat velký archiv celý najednou a znovu ho nahrávat je časově náročné a při výpadcích sítě musíte začínat znovu. rsync přenáší metadata jako časové značky, oprávnění, vlastníky a strukturu adresářů, což zajišťuje konzistenci. Proto je rsync velmi oblíbený mezi Linuxovými správci, DevOps týmy a odborníky na webhosting.

V tomto návodu si krok za krokem ukážeme, jak přes rsync přes SSH přenést obrovské soubory mezi dvěma Linux servery včetně praktických příkazů. Zaměříme se také na parametry pro zvýšení výkonu, bezpečnostní kontroly, řešení chybových stavů, testování přenosu a doporučené postupy před nasazením na produkci. Pokud plánujete přechod na nový VPS nebo hosting, ověřte, že máte na obou serverech dostatek volného místa, SSH přístup a správná uživatelská práva. Pro výběr infrastruktury doporučujeme nahlédnout na Hostragons řešení VPS serveru a Balíčky Linux hostingu.

Co je rsync a proč je ideální pro přenos velkých souborů?

rsync je výkonný příkazový nástroj pro synchronizaci souborů a adresářů lokálně i mezi vzdálenými servery. Jeho největší předností je delta přenos – místo kopírování celého souboru přenáší pouze změněné části. Například u 80GB zálohy, kde se změnily jen 2 GB, přenese jen tyto změny, což výrazně šetří čas i šířku pásma.

SSH zabezpečuje přenos šifrováním, takže data nejsou přenášena v otevřeném textu. To je zásadní pro citlivé údaje jako zákaznická data, objednávky e-shopů, mediální archivy, databázové zálohy nebo privátní soubory aplikací. V hostingovém prostředí není bezpečnost jen o SSL certifikátech pro webový provoz, ale také o bezpečném kanálu mezi servery. Stejně jako na webu používáte SSL certifikát, i při přenosu souborů byste měli využívat SSH šifrování.

rsync je také flexibilnější než FTP nebo manuální stahování/nahrávání. Zachovává oprávnění, přenáší symbolické odkazy, může mazat soubory na cíli, omezovat šířku pásma a umožňuje testovat přenos předem. U velkých souborů je tato kontrola velkou výhodou.

Kdy použít rsync přes SSH?

rsync přes SSH je ideální pro přenos velkých, četných nebo často se měnících souborů. Pro jednoduché přenosy malých složek s obrázky může stačit ruční SFTP, ale u tisíců souborů, různých oprávnění a rozsáhlých archivů je rsync spolehlivější volba.

  • Pokud migrujete web z původního serveru na nový VPS.
  • Přenášíte složky s tisíci mediálními soubory, např. WordPress uploads.
  • Pravidelně kopírujete zálohy na jiný server.
  • Měníte datacentrum nebo poskytovatele hostingu.
  • Synchronizujete soubory mezi produkčním a záložním prostředím.
  • Plánujete dlouhé přenosy s rizikem přerušení spojení.

Například stahovat 250GB mediální složku nejprve na pracovní stanici a poté ji nahrávat na nový server znamená dva přenosy, což zpomaluje celý proces a zatěžuje vaši domácí nebo kancelářskou síť. Přímý přenos rsyncem mezi zdrojovým a cílovým serverem tuto mezikrok eliminuje.

Co je potřeba před začátkem

Znát příkaz rsync nestačí. Je důležité zkontrolovat podmínky na zdrojovém i cílovém serveru, aby se minimalizovalo riziko ztráty dat nebo neúplného přenosu. Níže uvedené kontroly jsou nezbytné zejména v produkčním prostředí.

1. Ověřte SSH přístup

Musíte být schopni se ze zdrojového serveru připojit na cílový přes SSH. Standardní test je: ssh uzivatel@cilovy-server-ip. Pokud SSH běží na nestandardním portu, použijte: ssh -p 2222 uzivatel@cilovy-server-ip. Pokud tento test selže, rsync nebude fungovat. Zkontrolujte firewall, Fail2ban, SSH port, oprávnění uživatele a ověření heslem nebo klíčem.

2. Ověřte instalaci rsync

Většina Linux distribucí má rsync předinstalovaný, ale ověřit to můžete příkazem rsync --version. Pokud není, nainstalujete jej příkazem apt install rsync (Debian/Ubuntu) nebo dnf install rsync, yum install rsync (AlmaLinux, Rocky Linux, CentOS). Na Hostragons Linux VPS je instalace otázkou sekund.

3. Připravte dostatek místa na disku

Na cílovém serveru musí být dostatek volného místa, jinak přenos skončí chybou. Velikost zdrojové složky zjistíte příkazem du -sh /cesta/k/zdroji, aktuální stav disku na cíli pomocí df -h. Doporučujeme mít rezervu na dočasné soubory a protokoly, tedy pokud přenášíte 500 GB, ideálně mít volných 550-600 GB.

4. Naplánujte přenos kritických služeb a měnících se souborů

Na živých webech se během přenosu mohou měnit soubory, zejména uživatelské uploady, cache nebo logy. Proto při rozsáhlých přesunech nejdříve přenesete hlavní data, poté dočasně web přepnete do údržbového režimu a spustíte druhý přenos se změnami. Tak minimalizujete dobu výpadku. Pro WordPress doporučujeme využít i Průvodce přesunem WordPress hostingu pro správné plánování.

Základní příkaz rsync pro přenos mezi servery

Nejčastější základní příkaz vypadá takto: rsync -avz /cesta/ke/zdroji/ uzivatel@cilovy-ip:/cesta/k/cili. Přepínač -a znamená archivní mód – zachovává oprávnění, časové značky, symbolické odkazy, -v zobrazuje podrobnosti a -z povoluje kompresi během přenosu. Důležitý je lomítko na konci zdrojové složky: /cesta/ke/zdroji/ znamená kopírovat obsah složky, bez lomítka se zkopíruje složka i s obsahem.

Příklad: chcete přenést 180GB web z /var/www/site/public_html/ ze starého serveru na nový na stejnou cestu. Příkaz bude: rsync -avz /var/www/site/public_html/ root@203.0.113.20:/var/www/site/public_html/. Přenos proběhne přes SSH z jednoho serveru na druhý.

Pokud nechcete používat root, vytvořte na cílovém serveru uživatele s oprávněním zápisu do cílové složky, např. deploy, a nastavte odpovídající vlastnictví. V produkčním prostředí je bezpečnější pracovat s omezenými právy než jako root.

Doporučené bezpečné a odolné parametry rsync

U velkých přenosů nestačí základní příkaz. Je vhodné použít parametry, které zvládnou přerušení, částečné soubory nebo pomalé sítě. Následující příkaz je dobrý výchozí bod:

rsync -aHAXv --numeric-ids --partial --progress --append-verify -e ssh /cesta/ke/zdroji/ uzivatel@cilovy-ip:/cesta/k/cili/

-a = archivní mód
-H = zachovat hardlinky
-A = zachovat ACL
-X = zachovat rozšířené atributy
--numeric-ids = použít ID uživatelů a skupin místo jmen (užitečné při rozdílných uživatelích)
--partial = neodstraňovat částečně přenesené soubory
--progress = zobrazit průběh
--append-verify = při obnově přenosu kontrolovat přenesená data

Ne všechny parametry jsou nutné pro každý případ. Například u jednoduchého webu stačí -aHAX, ale u aplikací s ACL a rozšířenými atributy je lepší mít je zachované. Proto je dobré nejdříve testovat.

Jak na rsync, když SSH běží na jiném portu?

Pro zvýšení bezpečnosti běží SSH často na jiném než defaultním portu 22. V takovém případě je potřeba do rsync vložit volbu SSH s portem. Správný zápis je:

rsync -avz -e 'ssh -p 2222' /cesta/ke/zdroji/ uzivatel@cilovy-ip:/cesta/k/cili/

V některých rozhraních může být problém s uvozovkami; v terminálu je potřeba je správně zadat. Pokud používáte SSH klíč, přidáte jej takto:

rsync -avz -e 'ssh -p 2222 -i /root/.ssh/id_rsa' /cesta/ke/zdroji/ uzivatel@cilovy-ip:/cesta/k/cili/

Tento způsob se často používá v automatizovaných skriptech nebo cron úlohách.

Test přenosu předem: použití --dry-run

Než začnete přenášet velká data, je velmi dobré použít parametr --dry-run. Tento režim nic nepřenáší, ale ukáže, které soubory by byly zkopírovány. Pomůže tak odhalit chyby ve zdrojové nebo cílové cestě a neočekávané mazání.

Příklad testovací příkaz:

rsync -avz --dry-run /var/www/site/ uzivatel@cilovy-ip:/var/www/site/

Výstup obsahuje seznam souborů, které budou přeneseny, a souhrn. Pokud používáte parametr --delete, je testování s --dry-run obzvlášť důležité, protože --delete smaže na cíli soubory, které na zdroji nejsou.

Obvyklý postup je: ověřit SSH, zkontrolovat disk, spustit --dry-run, otestovat na malé složce a až poté zahájit skutečný přenos. Přidáte tím pár minut navíc, ale ušetříte hodiny při případných chybách.

Optimalizace výkonu: komprese, šířka pásma a šifrování

Výkon rsyncu závisí nejen na velikosti souborů, ale také na výkonu CPU, typu disku, latenci sítě, šířce pásma a počtu souborů. Přenos tisíců malých souborů trvá déle než jednoho velkého, protože rsync musí zpracovat metadata pro každý soubor zvlášť. VPS s NVMe disky mají často rychlejší čtení i zápis, proto při velkých přesunech zvažte NVMe VPS server.

Parametr -z zapíná kompresi, což pomáhá u textových souborů, logů nebo některých záloh. Naopak u již komprimovaných souborů jako ZIP, TAR.GZ, JPG, MP4 nebo GZIP může komprese CPU zatěžovat bez většího přínosu. Přenos velkých mediálních souborů přes rychlou 1Gbps linku je často rychlejší bez komprese. Na pomalých nebo omezených sítích je komprese zase výhodná.

Pro omezení šířky pásma lze použít --bwlimit, například --bwlimit=50000 omezí přenos na cca 50 MB/s. To pomáhá nezahlcovat síť, například na produkčním serveru během špičky, kdy by plná rychlost mohla ovlivnit uživatele. Doporučuje se plánovat přenosy v nočních hodinách, nastavovat limit šířky pásma a sledovat zatížení serveru (load average).

Porovnání rsync, scp, SFTP a FTP

Porovnání rsync, scp, SFTP a FTP

Existuje mnoho způsobů, jak přenášet soubory, každý má své výhody i nevýhody. Tabulka níže shrnuje, kdy je který nástroj nejlepší volbou pro velké soubory a migrace serverů.

Porovnání rsync, scp, SFTP a FTP
NástrojBezpečnostObnovení přenosuVýkon u velkých souborůIdeální použití
rsync + SSHVysokáSilnéVelmi dobrýMigrace serverů, zálohy, synchronizace
scpVysokáOmezenéStředníRychlé kopírování malého počtu souborů
SFTPVysokáZávislé na klientoviStředníManuální správa souborů
FTPNízkáZávislé na klientoviProměnlivýStarší systémy bez nároků na bezpečnost

Jak vidíte, rsync se díky schopnosti opakované synchronizace a přenosu pouze změn výrazně hodí pro velké datové přesuny. scp je jednoduchý a rychlý, ale neumí detekovat změny ani obnovit přerušení. FTP bez šifrování není vhodné pro citlivá data, ačkoli může být pohodlné v některých hostingových panelech. Pro kritické přesuny dat je vždy lepší volit SSH-based metody.

Příklad pracovního postupu pro migraci živého webu

Při přesunu webu nejde jen o kopírování souborů, ale i o správné nastavení DNS, databáze, SSL certifikátů, verzí PHP, oprávnění a e-mailu. Níže uvádíme příklad workflow s minimálními výpadky pro web s velkým objemem dat:

  • Připravte na novém serveru webový server, PHP, databázi a potřebné moduly.
  • Snížte TTL DNS záznamu na hodnotu kolem 300 sekund před migrací. Pro správu domény využijte Dotaz na doménu a správa domény.
  • Spusťte první rsync přenos za běžného provozu – přenese většinu dat.
  • Zálohujte databázi a přeneste ji na nový server.
  • Web přepněte do údržbového režimu.
  • Spusťte druhý rsync pro synchronizaci změněných souborů.
  • Obnovte databázi, případně použijte inkrementální zálohy.
  • Zkontrolujte oprávnění souborů, funkčnost webu a logy.
  • Nainstalujte nebo obnovte SSL certifikát – viz instalace SSL certifikátu.
  • Upravte DNS záznamy na novou IP adresu.

Tímto způsobem probíhá většina dat při běžném provozu, výpadek nastane jen během druhé synchronizace a DNS přepisu. U rozsáhlých WordPress webů s mediálními archivy může tento postup zkrátit výpadek z hodin na minuty.

Kontrola integrity dat po přenosu

Po dokončení přenosu nestačí jen ukončení příkazu. Je třeba porovnat počet souborů, jejich velikosti a hlavní soubory. Pro základní kontrolu porovnejte velikosti adresářů příkazem du -sh na zdroji a cíli. Kvůli rozdílům v souborových systémech nemusí být čísla úplně stejná. Pro podrobnější ověření spusťte rsync znovu se stejnými parametry – pokud není co přenášet, výstup bude minimální.

Pro kontrolu kontrolních součtů lze použít příkaz:

rsync -avc --dry-run /cesta/ke/zdroji/ uzivatel@cilovy-ip:/cesta/k/cili/

Parametr -c porovnává soubory podle checksumu, což je přesnější než jen čas a velikost, ale je náročnější na CPU a disk. Tento způsob je vhodný pro důležité archivy, databázové dumpy nebo citlivá data.

Pokud přenášíte web, ověřte i funkčnost na úrovni aplikace – načítání úvodní stránky, admin rozhraní, upload obrázků, platební bránu, kontaktní formulář a chybové logy. U e-shopů nestačí jen přenést soubory – otestujte i platební integrace a plánované úlohy (cron).

Časté chyby a jejich řešení

Chyba „Permission denied“

Tato chyba vzniká nejčastěji kvůli nedostatečným oprávněním uživatele SSH, zápisu do cílové složky nebo nesprávnému ověření klíče. Nejprve zkuste přihlášení přes SSH pod stejným uživatelem. Pokud funguje, otestujte vytvoření souboru v cílovém adresáři. V případě potřeby upravte vlastnictví pomocí chown nebo využijte sudo strategie.

Chyba „No space left on device“

Nedostatek volného místa na disku ukončí přenos. Zkontrolujte disky příkazem df -h. Občas není problém na hlavním disku, ale například v /tmp nebo na cílovém mount pointu. U velkých přesunů můžete uvolnit místo odstraněním starých logů, záloh a cache. Pokud je potřeba, zvažte rozšíření diskové kapacity nebo přechod na VPS s větším úložištěm.

Chyba „Connection reset“ nebo „Broken pipe“

Při dlouhých přenosech může dojít k přerušení sítě. Pokud používáte parametry --partial --append-verify, můžete příkaz spustit znovu a přenos bude pokračovat od posledního bodu. Pomoci mohou i nastavení SSH keepalive, například v klientském souboru ~/.ssh/config přidejte ServerAliveInterval 60, aby se předešlo odpojování kvůli nečinnosti.

Velmi pomalý přenos

Pomalejší přenos může být způsoben počtem souborů, limity I/O disku, zatížením CPU kvůli kompresi nebo omezenou šířkou pásma. Při mnoha malých souborech může být rychlejší nejprve vytvořit tar archiv a ten přenést najednou, ale ztratíte výhodu rsyncu přenášet jen změny. U velkých již komprimovaných souborů zkuste vypnout -z. Pomocí nástrojů jako iotop, htop a iftop identifikujte, kde je úzké místo – CPU, disk nebo síť.

Bezpečnostní doporučení

Přenos dat mezi servery by neměl být na úkor bezpečnosti. Obzvlášť přístup root, SSH klíče a záložní soubory jsou citlivé. Doporučuje se používat SSH klíče místo hesel, nastavovat jejich oprávnění přísně a ideálně chránit klíče heslem (passphrase). Klíče nikdy nesdílejte.

Vytvořte pro přenos dočasného uživatele s minimálními právy a přístupem jen do potřebných adresářů. Po dokončení přenosu jeho práva odeberte nebo účet deaktivujte. Omezte SSH přístup na konkrétní IP adresy. Základní zabezpečení zajistí firewall, Fail2ban a aktuální verze OpenSSH.

Pokud přenášíte databázové dumpy, zákaznické dokumenty nebo osobní data, po přenosu odstraňte dočasné soubory jak na zdrojovém, tak na cílovém serveru. Také nezanechávejte zálohy ve webrootu (například .sql, .zip, .tar), protože by mohly být zpřístupněny přes web. Ukládejte je mimo veřejně dostupné adresáře nebo je po dokončení smažte.

Automatické zálohování pomocí rsync

rsync se nehodí jen pro jednorázové přesuny, ale i pro pravidelné zálohy. Například můžete nastavit cron úlohu, která každý večer zálohuje určitou složku na záložní server. Přenos probíhá přes SSH klíč bez hesla, přenáší se jen změny a lze nastavit omezení šířky pásma.

Příklad příkaz pro pravidelnou synchronizaci:

rsync -a --delete --bwlimit=30000 /var/www/site/ backup@zalozni-ip:/backup/site/

Parametr --delete synchronizuje cílovou složku tak, že smaže soubory, které už nejsou na zdroji. Proto je potřeba jej používat obezřetně. Pro kritické zálohy se doporučují snapshoty, denní složky nebo verzování.

V hostingových operacích platí pravidlo 3-2-1 zálohování: mít alespoň 3 kopie dat na 2 různých médiích a 1 kopii na jiné lokalitě. rsync usnadňuje kopírování mezi servery, další možnosti naleznete v Řešení zálohování a služby korporátního hostingu.

Kontrolní seznam před zahájením přenosu velkých souborů

Abyste minimalizovali riziko chyb, projděte před zahájením migrace následující body. Tento seznam by měl být standardní součástí procesů v produkčním prostředí.

  • Je rsync nainstalovaný na zdrojovém i cílovém serveru?
  • Otestovali jste SSH připojení s daným uživatelem a portem?
  • Má cílový server dostatek volného místa?
  • Provedli jste test s --dry-run?
  • Naplánovali jste údržbový režim a poslední synchronizaci u živého webu?
  • Potvrdili jste správnost cílové cesty, pokud používáte --delete?
  • Máte připravený plán kontroly velikostí, oprávnění a funkčnosti po přenosu?
  • Budou bezpečně odstraněny dočasné zálohy a dump soubory?

I když se zdají jednoduché, právě tyto body často způsobují největší problémy – nesprávné cíle, chybějící práva, nedostatek místa a náhlé změny DNS. Dobře naplánovaný rsync proces zkracuje dobu migrace i riziko nutnosti vracet se zpět.

Často kladené otázky

Při přerušení přenosu rsyncem přes SSH začíná přenos znovu od začátku?

Ne, pokud použijete správné parametry jako --partial a --append-verify, rsync zachová částečně přenesené soubory a při opětovném spuštění pokračuje tam, kde skončil. Nicméně u kritických migrací je dobré před opětovným spuštěním ověřit volné místo a stav částečných souborů.

Lze rsyncem přenést přímo databázi?

rsync přenáší pouze soubory, není vhodný pro hotové databázové soubory v aktivním provozu. Pro MySQL či MariaDB používejte nástroje jako mysqldump či fyzické zálohy, které následně přenesete rsyncem. Pro konzistenci dat v živém systému je vhodné přepnout web do údržbového režimu nebo využít replikace.

Je nutný root přístup na obou serverech pro použití rsync?

Root přístup není povinný. Stačí uživatel s oprávněním zápisu do cílové složky. Pokud chcete zachovat vlastnictví, oprávnění nebo synchronizovat systémové adresáře, může být potřeba vyšší oprávnění. Pro bezpečnost je lepší používat co nejméně privilegované uživatele.

Je parametr --delete bezpečný?

Pokud ho použijete správně, je velmi užitečný pro zrcadlení zdroje na cílový server, protože maže soubory, které už nejsou na zdroji. Ale při chybné konfiguraci může dojít ke ztrátě dat. Vždy proto před použitím proveďte test s --dry-run a pečlivě ověřte cesty.

Co je lepší pro velké soubory – rsync nebo scp?

Pro jednorázové přenosy malých souborů může být scp dostatečné. U velkých souborů, množství dat a opakovaných synchronizací ale rsync nabízí lepší efektivitu díky detekci změn, obnovení přenosu a možnosti řídit šířku pásma. Proto je pro většinu scénářů lepší volbou.

Shrnutí a další kroky

Přenos rozsáhlých souborů mezi servery pomocí rsync přes SSH je rychlý, bezpečný a dobře ovladatelný způsob. Díky správným parametrům je odolný vůči výpadkům, přenáší pouze změny a minimalizuje výpadky při migracích živých webů. Před zahájením ověřte SSH přístup a diskové místo, proveďte test s --dry-run a naplánujte přenos krok za krokem.

Pokud plánujete přechod na nový server, vyšší kapacitu nebo výkonnější hosting, podívejte se na řešení Hostragons, které nabízí VPS, hosting, domény a SSL možnosti pro bezpečný a bezproblémový přenos. Začněte s malými testy, měřte výsledky a proveďte poslední synchronizaci s minimálními výpadky.

Sdílejte tento článek:

Tým Hostragons

Aktuální průvodci od našeho týmu odborníků na hosting, servery a doménová jména. Pojďme společně najít to správné řešení pro váš projekt.

Kontaktujte nás