rsync a scp
Oba nástroje kopírují soubory přes SSH. scp je jednoduché a rychlé na jeden
soubor, rsync je chytřejší a nezbytný při migraci celého serveru.
scp
scp funguje jako cp, jen zdroj nebo cíl může být na vzdáleném serveru.
# Soubor na server
scp zaloha.sql [email protected]:/home/vojta/
# Soubor ze serveru k sobe
scp [email protected]:/var/log/app.log ./
# Cela slozka (rekurzivne)
scp -r ./web [email protected]:/var/www/Když běží SSH na jiném portu než 22, u scp se port zadává velkým -P
(scp -P 2222 ...). U rsync a ssh je to malé -p — snadno se to plete.
rsync
rsync přenáší jen změněné části souborů. Přerušený přenos umí navázat a při
opakování nekopíruje, co už na cíli je.
# Zakladni synchronizace pres ssh
rsync -avz ./web/ [email protected]:/var/www/web/
# Ze serveru k sobe
rsync -avz [email protected]:/var/www/web/ ./web/| Přepínač | Význam |
|---|---|
-a | archivní režim (práva, časy, symlinky) |
-v | podrobný výpis |
-z | komprese při přenosu |
--progress | průběh u velkých souborů |
--exclude | vynechání souborů podle vzoru |
--delete | smazání v cíli, co není ve zdroji |
Lomítko na konci zdroje rozhoduje. web/ zkopíruje obsah složky,
web zkopíruje celou složku včetně jejího jména. Snadný zdroj překvapení.
Vynechání souborů
rsync -avz --exclude 'node_modules' --exclude '*.log' \
./app/ [email protected]:/var/www/app/Přerušený přenos
rsync navazuje sám. Když spojení spadne, jen příkaz spustíš znovu a dokopíruje
zbytek. Pro obnovení jednoho velkého souboru přidej --partial:
rsync -avz --partial --progress velky-soubor.img [email protected]:/backup/scp vs rsync
| scp | rsync | |
|---|---|---|
| Rychlost opakovaného přenosu | kopíruje vše znovu | jen změny |
| Přerušený přenos | začíná od začátku | naváže |
| Vynechání souborů | ne | --exclude |
| Synchronizace (mazání) | ne | --delete |
| Jednoduchost | vyšší | o něco složitější |
Na jeden soubor sáhni po scp. Na složky, opakované přenosy a migrace vždycky
rsync — ušetří ti čas i data.
Migrace serveru
Při stěhování na nový VPS přeneseš data i konfiguraci jedním rsyncem. Nejdřív nanečisto, ať víš, co se stane:
# Zkouska nanecisto - nic se nezkopiruje
rsync -avz --dry-run --delete ./data/ vojta@novy-server:/srv/data/
# Ostry beh
rsync -avz --delete ./data/ vojta@novy-server:/srv/data/rsync --delete smaže v cíli všechny soubory, které nejsou ve zdroji. Když si
spleteš směr přenosu nebo zapomeneš lomítko, přijdeš o data. Vždy nejdřív
spusť s --dry-run a výpis si přečti.
Tipy
- Používej SSH klíče. Nebudeš u každého přenosu psát heslo a rsync ve smyčce projde bez zádrhelu.
- Přidej
--progressu velkých přenosů. Uvidíš, že se něco děje. - Migruj přes
screennebotmux. Přenos přežije i výpadek tvého spojení.
Poznámka
Pro pravidelné zálohy zabal rsync do skriptu a spusť přes cron. Postup najdeš v článku Zálohování dat.