Automatizace zálohování pomocí rsync v Linuxu

  • Rsync umožňuje efektivní zálohování přenosem pouze změn a zachováním oprávnění a metadat lokálně i přes SSH.
  • Kombinace skriptů, cronu nebo časovačů systemd promění rsync v automatický, rotující a téměř bezúdržbový zálohovací systém.
  • Osvědčené postupy, jako jsou vyloučení, rozumné používání --delete, monitorování a testování obnovy, ovlivňují skutečnou spolehlivost zálohy.

Automatizace zálohování pomocí rsync v Linuxu

Pokud spravujete linuxové servery nebo máte počítač s daty, o která si nemůžete dovolit přijít, naučte se je používat rsync pro automatizaci záloh Je to prakticky povinné. Není třeba nastavovat drahý balíček ani se spoléhat na proprietární nástroje: s několika promyšlenými příkazy můžete mít spolehlivý, efektivní a snadno udržovatelný zálohovací systém.

V celém tomto průvodci uvidíte Od základů rsyncu po pokročilé úpravyLokální zálohy, vzdálené zálohy přes SSH, zálohy ve stylu Time Machine se snapshoty, skripty připravené pro produkční prostředí, cron, časovače systemd, vyloučení, rotace a ověřování. Viz naše Porovnání metod zálohování rozhodnout se o strategii. Myšlenka je, že článek zakončíte jasným plánem a příkazy, které můžete prakticky kopírovat a přizpůsobit svému prostředí.

Co je rsync a proč se tolik používá pro zálohování?

Rsync je nástroj příkazového řádku určený pro synchronizovat soubory a adresáře mezi dvěma umístěními, buď na stejném počítači, nebo mezi různými počítači, obvykle přes SSH nebo s vlastním démonem rsyncd.

Výhodou rsync oproti jednoduchému cp nebo scp je, že implementuje inteligentní algoritmus diferenciální blokový přenosPorovnává zdrojový a cílový soubor a pokaždé odesílá pouze změny, nikoli celý soubor. Pokud máte velké množství dat a upravujete pouze malé části, úspora času a šířky pásma je enormní.

Kromě toho může rsync zachovat prakticky všechna metadataoprávnění, vlastníky, skupiny, časová razítka, symbolické odkazy, zařízení… Proto je to tak užitečné pro „seriózní“ zálohy, kde záleží nejen na obsahu, ale také na tom, jak je nastaven souborový systém.

Další důležitou výhodou je, že rsync funguje lokálně i vzdáleněMůžete jej použít k synchronizaci dvou složek na stejném serveru, k načtení dat ze vzdáleného serveru do zálohovacího počítače nebo k odeslání dat na vzdálený NAS nebo VPS pomocí SSH.

Linux rsync

Instalace a otestování rsync na různých distribucích

Ačkoli mnoho distribucí již obsahuje nainstalovaný rsync, je to dobrý nápad Ověřte instalaci a aktualizujte na nejnovější verzi. na zdrojovém i cílovém počítači před připojením automatických záloh.

Na systémech založených na Debianu nebo Ubuntu můžete udělat něco tak jednoduchého jako:

rsync --version
sudo apt update
sudo apt install rsync

V distribucích jako RHEL, CentOS, Rocky Linux nebo jiných derivátech by byl postup velmi podobný, změna správce balíčků, ale se stejnou myšlenkou... Ujistěte se, že je rsync dostupný a aktuální v obou extrémech.

rsync --version
sudo dnf install rsync # En sistemas modernos
sudo yum install rsync # En sistemas más antiguos

Základní možnosti rsync, které budete používat neustále

Přestože rsync má dobrý arzenál parametrů, v praxi při zálohování strávíte 90 % času jejich používáním... malá sada možností to by se mělo naučit nazpaměť.

Celková struktura příkazu je poměrně přímočará, ale existuje jeden detail, který přidává spoustu možností: koncové lomítko v cestách mění chování.

Obecná syntaxe:

rsync ORIGEN DESTINO

Klíčový rozdíl spočívá v tom, jak zacházíte se zdrojovým adresářem:

# Copia el directorio como tal dentro del destino
rsync -av /source/dir /backup/

# Zkopírovat POUZE obsah adresáře do cíle
rsync -av /zdroj/adresář/ /záloha/

Některé z nejčastěji používaných možností zálohování jsou obzvláště praktické, protože V krátkém textu spojují mnoho věcí.:

  • -a: režim souboru. Ekvivalent k -rlptgoD (rekurzivní, zachovává symbolické odkazy, oprávnění, časová razítka, skupiny, vlastníka a speciální soubory).
  • -v: „Podrobný“ režim. Zobrazuje, co dělá a ke kterým souborům přistupuje.
  • -z: komprimuje data během přenosu, ideální pro vzdálené kopie přes internet.
  • -h: díky němu velikosti vypadají „hezky“ (MB, GB…), ideální pro lidi.
  • -P: kombinuje soubory s průběhem a částečnými soubory, aby bylo možné sledovat, jak se věci mají, a pokračovat.
  • -Vymazat: smaže v cílovém umístění soubory, které již ve zdroji neexistují, a zanechá tak jejich přesnou repliku.
  • -n / –zkušební provoz: simuluje provedení, aniž by se čehokoli dotýkal, fantastické pro to, aby se nic nepokazilo.
  • –vyloučit / –vyloučit-z: umožňuje vyloučit vzory nebo kompletní seznam tras, které nechcete kopírovat.
  • –link-destination: vytváří pevné odkazy s předchozí kopií, základ inkrementálních záloh typu Time Machine.

Ruční lokální kopie a první příklady

Prvním krokem před automatizací čehokoli je mít jasné a osvědčené příkazy pro ruční kopírováníPojďme si projít typické případy, které později použijeme ve skriptech.

Pokud chcete naklonovat svůj domovský adresář do lokální záložní diskMinimální příkaz by vypadal takto:

rsync -av /home/usuario/ /mnt/disco_backup/usuario/

Tento rsync prohledá váš domovská stránka kompletní zachování oprávnění, dat a strukturya kopíruje pouze to, co chybí nebo se od minula změnilo, což je již velmi úhledná inkrementální kopie bez komplikací.

Dalším klasickým příkladem je synchronizace projektová data, fotografie nebo dokumenty mezi dvěma složkami na stejném serveru nebo dokonce na různých discích, abyste měli vždy čerstvou druhou lokální hru.

rsync -av /media/fotos/ /backup/fotos/

Pokud jde o citlivá systémová data, jako např. /etc nebo /var/wwwJe normální chtít kopii, která je přesným zrcadlem a odstraňuje ze zálohy to, co zmizelo z originálu. A právě zde přichází na řadu slavná možnost smazání.

rsync -av --delete /var/www/ /backup/www/

rsync v Linuxu

Bezpečné vzdálené zálohy pomocí SSH

Skutečně vynikne rsync v kombinaci s... SSH pro odesílání kopií ze serveruTímto způsobem můžete ukládat svá data na jiný uzl ve vaší síti, NAS nebo VPS na internetu. Tímto způsobem nejste závislí na jednom zařízení a splňujete část slavného pravidla 3-2-1 (alespoň jedna kopie mimo pracoviště).

V ideálním případě byste měli nakonfigurovat ověřování pomocí veřejného klíče namísto neustálého ručního zadávání hesel. Jakmile zkopírujete klíč na záložní server, příkazy se stanou velmi intuitivními.

# Empujar datos locales a un servidor remoto de backup
rsync -avz /etc/ backup@servidor-remoto:/backups/etc/

# Přenesení dat ze vzdáleného serveru na zálohovací počítač
rsync -avz záloha@vzdálený-server:/var/www/ /zálohy/www/

V trochu propracovanějších scénářích můžete upravit Šifrování, port nebo komprese SSH ze samotného rsync s parametrem -e, například pokud váš server naslouchá na jiném portu nebo chcete optimalizovat pomalé připojení.

rsync -avz \
-e "ssh -p 2222 -c -o Compression=no" \
/origen/ backup@servidor-remoto:/destino/

Užitečným trikem v případě slabého připojení nebo sdílených sítí je použití –bwlimit, aby se zabránilo přetížení linky a nenechávejte nikoho bez internetu, zatímco spouštíte rozsáhlou zálohu.

rsync -avz --bwlimit=5000 /datos/ backup@servidor-remoto:/backups/datos/

Úplné, rozdílové a inkrementální zálohy s rsync

Přestože rsync již provádí rozdílové přenosy na úrovni bloků, z pohledu strategie zálohování stojí za zvážení. tři typy kopií: plné, diferenciální a inkrementálníkteré můžete implementovat přímo pomocí voleb rsync.

Kompletní kopie je přímočará: znovu vytváří veškerý obsah zdroje v cílovém umístění, ideální jako počáteční záloha nebo pro vytvoření čisté reference.

# Copia completa de un árbol de directorios
rsync -a /ruta/origen/ /ruta/destino/

Diferenciální kopírování staví na tomto základě a zaměřuje se na udržení souladu cíle se zdrojem, kopírování změn a odstraňování toho, co již neexistuje. To je to, co obvykle máte na mysli, když mluvíte o... mít zrcadlo systému.

# Copia diferencial, manteniendo el destino idéntico al origen
rsync -a --delete /ruta/origen/ /ruta/destino/

Nejšťavnatější částí je „skutečná“ inkrementální záloha, kde se kromě synchronizace… Ukládáte historii podle data bez duplikování datZde přichází na řadu volba –link-dest, která vytváří pevné odkazy na předchozí kopii souborů, které se nezměnily.

# Copia incremental apoyada en una copia previa
rsync -a --link-dest=/ruta/a/copiaprevia \
/ruta/origen/ /ruta/destino-incremental/

S tímto přístupem se každá záložní složka jeví jako úplná kopie, ale interně Identické soubory sdílejí bloky na diskuTo výrazně snižuje použitý prostor a umožňuje snadnou navigaci v historických snímcích.

Zálohy ve stylu Time Machine se snapshoty a pevnými odkazy

Mnoho lidí chce v Linuxu replikovat pohodlí Stroj času v macOS se snímky podle dataS rsync je to perfektně možné kombinací --link-dest, trochy shellu a určité organizace.

Cílem je udržovat aktuální adresář, který odkazuje na poslední dobrou zálohu, a zároveň vytvářet složky s časovým razítkem (datum-čas) které představují každý snímek. Nezměněné soubory jsou propojeny pevnými odkazy s předchozím snímkem a nové bloky se zapisují pouze v případě skutečných rozdílů.

Typický příkaz v tomto schématu by mohl vypadat například takto:

rsync -avPh --delete \
--link-dest="$TARGETDIR/current" \
"$SOURCEDIR/$USER/" \
"$TARGETDIR/$USER-$TIMESTAMP"

Pak se skript postará o aktualizaci symbolického odkazu aktuální, aby vždy odkazoval na nejnovější snímeka udržovat malou historii uspořádanou podle data. Díky tomu můžete procházet starší kopie jednoduše vstupem do složky, která vás zajímá.

Automatizace je přirozená: skript uložíte do něčeho jako /usr/local/bin/rsync-časový-stroj a naplánujte si jeho denní spouštění pomocí cronu v čase, který vám nejlépe vyhovuje.

0 5 * * * bash /usr/local/bin/rsync-time-machine

Automatizujte zálohy pomocí cronu na denní bázi

Nastává bod, kdy ruční kopírování už nedává smysl; normální je… Plánování záloh pomocí cronu aby se automaticky spouštěly mimo špičku (například brzy ráno) a vy na ně mohli zapomenout, s výjimkou občasné kontroly protokolů.

Postup je vždy stejný: připravíte skript, který vytvoří kompletní kopii se všemi možnostmi (výjimky, protokoly atd.), udělíte mu oprávnění ke spuštění a zapojíte ho do crontabu příslušného uživatele nebo do roota, pokud se jedná o manipulaci s celým systémem.

Příklad jednoduchého skriptu pro lokální kopírování by mohl být:

#!/bin/bash
SOURCE_DIR="/home"
BACKUP_DIR="/backup/home"
LOG_FILE="/var/log/backup/rsync-local.log"
DATE=$(date +"%Y-%m-%d %H:%M:%S")

mkdir -p «$ZÁLOŽNÍ_ADRESÁŘ» «$(adresář «$LOG_FILE»)»
echo "Lokální záloha spuštěna" >> "$LOG_FILE"

rsync -av –smazat
–exclude='*.tmp'
–exclude='.cache'
–exclude='Stažené soubory/*' \
«$ZDROJOVÝ_ADRESÁŘ/» «$ZÁLOŽNÍ_ADRESÁŘ/» >> «$SOUBORU_ZÁZNAMU» 2>&1

pokud ; pak
echo » Zálohování úspěšně dokončeno» >> «$LOG_FILE»
jiný
echo » Záloha s chybami» >> «$LOG_FILE»
fi

Jakmile máte skript vložen např. /usr/local/bin/rsync-local-backup.sh A označený jako spustitelný soubor přidáte do cronu, aby se spustil v určitý čas.

sudo chmod +x /usr/local/bin/rsync-local-backup.sh
sudo crontab -e

Dovnitř crontabu můžete vložit něco jako:

0 2 * * * /usr/local/bin/rsync-local-backup.sh

Časovače systemd: moderní alternativa k cronu

V moderních systémech se často vyplatí Používejte časovače systemd místo cronuzvláště pokud chcete lépe integrovat služby, spravovat síťové závislosti nebo mít centralizované protokoly v journalctl.

Jde o to definovat službu, která spouští váš zálohovací skript, a časovač, který indikuje, kdy jej spustit. Služba by mohla vypadat například takto:


Description=Rsync Backup Service
After=network-online.target
Wants=network-online.target

Typ=jednorázový
ExecStart=/usr/local/bin/rsync-remote-backup.sh
Uživatel=root
StandardOutput=deník
StandardError=deník
Časový limit v sekundách = 7200

WantedBy = víceúčelová.target

A příslušný časovač by byl definován následovně pro denní záloha ve 2 hodiny ráno s určitou náhodností, aby se vše najednou nezahltilo:


Description=Daily Rsync Backup Timer
Requires=rsync-backup.service

V Kalendáři=*-*-* 02:00:00
Trvalé=true
RandomizedDelaySec=10min

WantedBy=časovače.cíl

S tím už jen zbývá znovu načíst systemd, aktivovat časovač a ověřit, zda se programuje správně a že Servisní protokol ukazuje, že kopie se spouštějí, když je na to čas..

sudo systemctl daemon-reload
sudo systemctl enable --now rsync-backup.timer
systemctl list-timers
journalctl -u rsync-backup.service

Organizujte rotující zálohy: denní, týdenní a měsíční

Pokud chcete něco trochu propracovanějšího než jednu statickou kopii, můžete si nastavit strukturu rotující zálohy: denní, týdenní a měsíčnípoužívání pevných odkazů pro úsporu místa a vyhledávání pro vyčištění starých souborů.

Klasický vzorec zahrnuje vytvoření aktuálního adresáře, který se pokaždé aktualizuje pomocí rsync, a následné klonování tohoto stromu s pevnými odkazy na denní, týdenní a měsíční složky v závislosti na dni.

#!/bin/bash
SOURCE_DIR="/var/www"
BACKUP_ROOT="/backup/www"
CURRENT="$BACKUP_ROOT/current"
DAILY="$BACKUP_ROOT/daily"
WEEKLY="$BACKUP_ROOT/weekly"
MONTHLY="$BACKUP_ROOT/monthly"
DATE=$(date +%Y%m%d)
DOW=$(date +%u)
DOM=$(date +%d)

mkdir -p «$AKTUÁLNÍ» «$DENNĚ» «$TÝDENĚ» «$MĚSÍČNĚ»

rsync -av –delete –link-dest=»$CURRENT» \
«$SOURCE_DIR/» «$CURRENT/»

&& cp -al «$CURRENT» «$DAILY/$DATE»
&& cp -al «$CURRENT» «$WEEKLY/$DATE»
&& cp -al «$AKTUÁLNÍ» «$MĚSÍČNÍ/$DATUM»

najít «$DAILY» -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;
najít «$WEEKLY» -maxdepth 1 -type d -mtime +28 -exec rm -rf {} \;
najít «$MĚSÍČNĚ» -maxdepth 1 -type d -mtime +365 -exec rm -rf {} \;

S tímto systémem máte poměrně rozumné historické okno bez zaplnění disku plnými kopiemi a každý snímek zůstává navigovatelný jako normální složka.

Pokud se vaše data rychle mění nebo jsou velmi rozsáhlá, můžete upravit doby uchovávání, frekvenci nebo to dokonce zkombinovat se snímky LVM nebo ZFS, abyste zajistili konzistenci databází nebo virtuálních počítačů.

Monitorujte, ověřujte a zjistěte, zda jsou vaše zálohy užitečné.

Denní spouštění úloh zálohování je skvělé, ale pokud nikdo nezkontroluje výsledek Moc ti to nepomůže. Je důležité nastavit si základní monitorování, abys věděl, jestli a kdy byla provedena poslední záloha.

Jednoduchá taktika spočívá v zanechání malé značky v cílové složce pokaždé, když je záloha úspěšně dokončena, například soubor .last-backup-success s datem. Externí skript nebo dokonce kontrola Nagios/Icinga vás pak může upozornit, pokud je soubor příliš starý.

MARKER="/backup/www/.last-backup-success"
if ; then
echo "Marcador de backup no encontrado"
exit 1
fi

Dalším zdravým zvykem je kontrolovat Zkontrolujte protokoly rsync, zda se nevyskytly chyby nebo neobvyklé přenosové rychlosti.Skript, který extrahuje statistiky jako „Počet souborů“, „Celková velikost“, „Zrychlení“ a podobně, vám poskytne rychlý přehled o tom, jak se věci mají.

A samozřejmě, co skutečně dělá rozdíl, je si na to občas zvyknout. provést skutečnou rekonstrukciVezměte si konkrétní soubor, obnovte verzi ze včerejška nebo minulého týdne a zkontrolujte, zda se správně otevírá. Jen tak si můžete být jisti, že pokud se jednoho dne všechno pokazí, vaše zálohy budou schopné úkolu zvládnout.

Pokud sloučíte všechny tyto části – dobře nakonfigurovaný rsync, automatizaci pomocí cronu nebo systemd, rozumnou rotaci, monitorování a testování obnovy – skončíte s robustní, flexibilní a levný zálohovací systém pro Linux, který plně využívá výhod svobodného softwaru, aniž by vás nutil vzdát se pohodlí nebo spolehlivosti.

Související článek:
Kompletní průvodce vytvářením inkrementálních záloh ve Windows

Přidat jako preferovaný zdroj v Googlu