
Ha Linux szervereket kezelsz, vagy egyszerűen csak van egy számítógéped, amelynek adatait nem engedheted meg magadnak elveszíteni, a használat elsajátítása rsync a biztonsági mentések automatizálásához Gyakorlatilag kötelező. Nincs szükség drága csomag telepítésére vagy zárt eszközökre: néhány jól átgondolt paranccsal egy stabil, hatékony és könnyen karbantartható biztonsági mentési rendszert hozhat létre.
Ebben az útmutatóban végig látni fogja Az rsync alapjaitól a haladó szerkesztésigHelyi biztonsági mentések, távoli biztonsági mentések SSH-n keresztül, Time Machine stílusú biztonsági mentések pillanatképekkel, éles üzembe helyezésre kész szkriptek, cron, systemd időzítők, kizárások, rotációk és ellenőrzés. Tekintse meg a mi... A biztonsági mentési módszerek összehasonlítása hogy eldöntsd a stratégiát. A lényeg az, hogy a cikket egy világos tervvel és olyan utasításokkal zárd, amelyeket gyakorlatilag le tudsz másolni és adaptálni a környezetedhez.
Mi az rsync, és miért használják annyit biztonsági mentésekhez?
Az Rsync egy parancssori eszköz, amelyet a következőkre terveztek: fájlok és könyvtárak szinkronizálása két hely között, akár ugyanazon a számítógépen, akár különböző gépek között, általában SSH-n keresztül vagy a saját rsyncd démonjával.
Az rsync előnye egy egyszerű cp-vel vagy scp-vel szemben, hogy egy intelligens algoritmust valósít meg, amely a következőket tartalmazza: differenciálblokk-átvitelÖsszehasonlítja a forrást és a célt, és csak a módosításokat küldi el, nem a teljes fájlt minden alkalommal. Ha sok adatod van, és csak kis részeket módosítasz, az idő- és sávszélesség-megtakarítás óriási.
Ezenkívül az rsync képes gyakorlatilag az összes metaadat megőrzésejogosultságok, tulajdonosok, csoportok, időbélyegek, szimbolikus linkek, eszközök… Ezért olyan hasznos a „komoly” biztonsági mentéseknél, ahol nemcsak a tartalom számít, hanem a fájlrendszer beállítása is.
Egy másik fontos előny, hogy az rsync működik helyben és távolról isHasználhatod két mappa szinkronizálására ugyanazon a szerveren, adatok átvitelére egy távoli szerverről a biztonsági mentési gépre, vagy adatok átvitelére egy távoli NAS-ra vagy VPS-re SSH használatával.

Az rsync telepítése és tesztelése különböző disztribúciókon
Bár sok disztribúcióban már telepítve van az rsync, jó ötlet Ellenőrizd a telepítést, és frissíts egy újabb verzióra. mind a forrás-, mind a célgépen, mielőtt csatolná az automatikus biztonsági mentéseket.
Debian vagy Ubuntu alapú rendszereken valami olyan egyszerű dolgot tehetsz, mint:
rsync --version
sudo apt update
sudo apt install rsync
Az olyan disztribúciókban, mint az RHEL, CentOS, Rocky Linux vagy más származékok, az eljárás nagyon hasonló lenne, a csomagkezelő megváltoztatásával, de ugyanazzal az elvvel: Győződjön meg arról, hogy az rsync elérhető és naprakész mindkét végletben.
rsync --version
sudo dnf install rsync # En sistemas modernos
sudo yum install rsync # En sistemas más antiguos
Alapvető rsync beállítások, amelyeket mindig használni fogsz
Bár az rsync paraméterek széles arzenáljával rendelkezik, a gyakorlatban a biztonsági mentéseknél az időd 90%-át ezzel fogod tölteni... egy kis választék amit meg kellene jegyezni.
A parancs általános szerkezete meglehetősen egyszerű, de van egy részlet, ami rengeteg lehetőséget kínál: az elérési utak végén lévő perjel megváltoztatja a viselkedést.
Általános szintaxis:
rsync ORIGEN DESTINO
A fő különbség a forráskönyvtár kezelésében rejlik:
# Copia el directorio como tal dentro del destino
rsync -av /source/dir /backup/
# CSAK a könyvtár tartalmát másolja a célhelyre
rsync -av /source/dir/ /backup/
A leggyakrabban használt biztonsági mentési lehetőségek némelyike különösen praktikus, mert Sok mindent egyesítenek egy rövid szövegben.:
- -a: fájl mód. Egyenértékű a -rlptgoD kapcsolóval (rekurzív, megőrzi a szimbolikus hivatkozásokat, jogosultságokat, időbélyegeket, csoportokat, tulajdonosokat és speciális fájlokat).
- -v„Részletes” mód. Megmutatja, hogy mit csinál, és mely fájlokhoz fér hozzá.
- -z: tömöríti az adatokat átvitel közben, ideális az interneten keresztüli távoli másolatokhoz.
- -h: a méretek "szépnek" tűnnek (MB, GB…), tökéletesek az emberek számára.
- -P: egyesíti az előrehaladást és a részleges fájlokat, hogy lássa, hogyan állnak a dolgok, és folytathassa a munkát.
- -Töröl: törli a célhelyen azokat a fájlokat, amelyek már nem léteznek a forrásnál, pontos másolatot hagyva hátra.
- -n / –szárazon futás: bármihez is hozzáérve szimulálja a végrehajtást, fantasztikus, hogy ne rontson el dolgokat.
- –kizárás / –kizárás-from: lehetővé teszi minták kizárását, vagy a másolni nem kívánt útvonalak teljes listájának megjelenítését.
- –link-cél: kemény kapcsolatokat hoz létre egy korábbi másolattal, ami a Time Machine típusú inkrementális biztonsági mentések alapja.
Kézi helyi másolatok és első példák
Az első lépés bármi automatizálása előtt az, hogy egyértelmű és bevált kézi másolási parancsokTekintsük át a tipikus eseteket, amelyeket később szkriptekben fogunk használni.
Ha klónozni szeretnéd a saját könyvtáradat egy helyi biztonsági mentési lemezA minimális parancs így nézne ki:
rsync -av /home/usuario/ /mnt/disco_backup/usuario/
Ez az rsync átvizsgálja a A kezdőlap teljes, megőrizve az engedélyeket, dátumokat és struktúrátés csak azt másolja, ami hiányzik vagy megváltozott az utolsó alkalom óta, ami már egy nagyon ügyes inkrementális másolat a dolgok bonyolítása nélkül.
Egy másik klasszikus példa a szinkronizáció. projektadatok, fényképek vagy dokumentumok két mappa között ugyanazon a szerveren, vagy akár különböző lemezeken, hogy egy második helyi játék mindig friss legyen.
rsync -av /media/fotos/ /backup/fotos/
Ami az érzékeny rendszeradatokat illeti, mint például /etc vagy /var/wwwTeljesen normális, ha egy olyan másolatot szeretnénk, amely pontosan tükrözi az eredetit, és eltávolítja a biztonsági mentésből azt, ami az eredetiből eltűnik. Itt jön képbe a híres törlési lehetőség.
rsync -av --delete /var/www/ /backup/www/
Biztonságos távoli biztonsági mentések SSH-val
Az rsync akkor igazán ragyog, amikor kombinálod a következőkkel: SSH a másolatok szerverről történő küldéséhezÍgy az adatait a hálózat egy másik csomópontján, egy NAS-on vagy egy VPS-en tárolhatja az interneten. Így nem függ egyetlen eszköztől, és betartja a híres 3-2-1 szabály egy részét (legalább egy külső telephelyen lévő másolat).
Ideális esetben nyilvános kulcsú hitelesítést kell konfigurálni a jelszavak folyamatos manuális beírása helyett. Miután a kulcsot átmásolta a biztonsági mentési szerverre, a parancsok nagyon intuitívvá válnak.
# Empujar datos locales a un servidor remoto de backup
rsync -avz /etc/ backup@servidor-remoto:/backups/etc/
# Adatok átvitele távoli szerverről a biztonsági mentési gépre
rsync -avz backup@távoli-szerver:/var/www/ /backups/www/
Kicsit finomabb forgatókönyvekben beállíthatja SSH titkosítás, port vagy tömörítés magából az rsync-ből a -e kapcsolóval, például, ha a szervered egy másik porton figyel, vagy egy lassú kapcsolatot szeretnél optimalizálni.
rsync -avz \
-e "ssh -p 2222 -c -o Compression=no" \
/origen/ backup@servidor-remoto:/destino/
Hasznos trükk gyenge kapcsolatok vagy megosztott hálózatok esetén a következő használata: –bwlimit a link túlterhelésének elkerülése érdekében és ne hagyj senkit internet nélkül, miközben elindítasz egy hatalmas biztonsági mentést.
rsync -avz --bwlimit=5000 /datos/ backup@servidor-remoto:/backups/datos/
Teljes, differenciális és növekményes biztonsági mentések rsync segítségével
Bár az rsync már blokkszinten is végrehajt differenciális átviteleket, a biztonsági mentési stratégia szempontjából érdemes megfontolni. háromféle másolat létezik: teljes, differenciális és növekményes másolatamit közvetlenül az rsync opciókkal valósíthatsz meg.
A teljes másolás egyszerű: a forrás összes tartalmát újraalkotja a célhelyen, ideális esetben kezdeti biztonsági mentés vagy tiszta referencia.
# Copia completa de un árbol de directorios
rsync -a /ruta/origen/ /ruta/destino/
A differenciális másolás erre az alapra épít, és arra összpontosít, hogy a céloldal összhangban legyen a forrásoldallal, a változtatásokat másolja, és eltávolítsa azt, ami már nem létezik. Erre gondolunk általában, amikor... legyen a rendszer tükre.
# Copia diferencial, manteniendo el destino idéntico al origen
rsync -a --delete /ruta/origen/ /ruta/destino/
A legizgalmasabb rész az „igazi” inkrementális biztonsági mentés, ahol a szinkronizálás mellett Az előzményeket dátum szerint mentheti el az adatok duplikálása nélkül.Itt jön képbe a –link-dest opció, amely kemény hivatkozásokat hoz létre egy korábbi másolathoz a nem módosított fájlokhoz.
# Copia incremental apoyada en una copia previa
rsync -a --link-dest=/ruta/a/copiaprevia \
/ruta/origen/ /ruta/destino-incremental/
Ezzel a megközelítéssel minden biztonsági mentési mappa teljes másolatnak tűnik, de belsőleg Azonos fájlok megosztják a blokkokat a lemezenEz jelentősen csökkenti a felhasznált helyet, és lehetővé teszi a történelmi pillanatképek közötti egyszerű navigációt.
Time Machine stílusú biztonsági mentések pillanatképekkel és hard linkekkel
Sokan szeretnék Linuxon lemásolni a kényelmet macOS Time Machine pillanatképekkel dátum szerintAz rsync segítségével ez tökéletesen lehetséges a --link-dest kapcsoló, egy kis shell és némi szervezés kombinálásával.
Az ötlet az, hogy fenntartsunk egy aktuális könyvtárat, amely az utolsó jó biztonsági mentésre mutat, és ezzel egyidejűleg létrehozzunk egy időbélyeggel (dátum-idő) ellátott mappák amelyek az egyes pillanatképeket képviselik. A változatlan fájlok kemény hivatkozásokkal vannak összekapcsolva az előző pillanatképekkel, és új blokkok csak akkor íródnak, ha tényleges eltérések vannak.
Egy tipikus parancs ebben a sémában valami ilyesmi lehet:
rsync -avPh --delete \
--link-dest="$TARGETDIR/current" \
"$SOURCEDIR/$USER/" \
"$TARGETDIR/$USER-$TIMESTAMP"
Ezután egy szkript gondoskodik a szimbolikus link frissítéséről aktuális, hogy mindig a legújabb pillanatképre mutassonés egy rövid, dátum szerint rendezett előzményt vezet. Ezzel a régebbi példányok között böngészhet egyszerűen a kívánt mappába való belépéssel.
Az automatizálás magától jön: a szkriptet valami ilyesmibe mented el /usr/local/bin/rsync-time-machine és ütemezd be úgy, hogy naponta fusson a cronnal, a számodra legmegfelelőbb időpontban.
0 5 * * * bash /usr/local/bin/rsync-time-machine
Automatizálja a biztonsági mentéseket naponta a cron segítségével
Eljön az a pont, amikor a kézi másolásnak már nincs értelme; a szokásos dolog az, hogy Biztonsági mentések ütemezése cronnal így csúcsidőn kívüli órákban (például kora reggel) automatikusan futnak, és elfelejtheted őket, kivéve, ha időnként ellenőrized a naplókat.
A folyamat mindig ugyanaz: előkészítesz egy szkriptet, ami elkészíti a teljes másolatot az összes opcióval (kizárások, naplók stb.), végrehajtási jogosultságokat adsz neki, és beilleszted a megfelelő felhasználó crontabjába, vagy root-ként kezeled, ha a teljes rendszerhez kell nyúlnod.
Egy egyszerű helyi másoláshoz használt szkriptre példa lehet a következő:
#!/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 «$BACKUP_DIR» «$(könyvtárnév «$LOG_FILE»)»
echo "Helyi mentés elindítva" >> "$LOG_FILE"
rsync -av –törlés
–kizárás='*.tmp' \
–kizárás='.gyorsítótár' \
–exclude='Letöltések/*' \
«$FORRÁS_KÖNYVTÁR/» «$BIZTONSÁGI_KÖNYVTÁR/» >> «$NAPLÓFÁJL» 2>&1
ha ; akkor
echo » A biztonsági mentés sikeresen befejeződött» >> «$LOG_FILE»
más
echo » Hibás mentés» >> «$LOG_FILE»
fi
Miután beírtad a szkriptet, például /usr/local/bin/rsync-local-backup.sh fájl És végrehajthatóként megjelölve hozzáadod a cronhoz, hogy egy adott időpontban fusson.
sudo chmod +x /usr/local/bin/rsync-local-backup.sh
sudo crontab -e
A crontab belsejében valami ilyesmit írhatsz be:
0 2 * * * /usr/local/bin/rsync-local-backup.sh
systemd időzítők: a cron modern alternatívája
A modern rendszerekben gyakran megéri Használj systemd időzítőket cron helyettkülönösen akkor, ha jobban integrálni szeretnéd a szolgáltatásokat, kezelni a hálózati függőségeket, vagy központosított naplókat szeretnél a journalctl-ben.
Az ötlet az, hogy definiálj egy szolgáltatást, amely futtatja a biztonsági mentési szkriptet, és egy időzítőt, amely jelzi, hogy mikor kell futtatni. A szolgáltatás valami ilyesmi lehet:
Description=Rsync Backup Service
After=network-online.target
Wants=network-online.target
Típus=egylövés
ExecStart=/usr/local/bin/rsync-remote-backup.sh
Felhasználó=root
StandardOutput=napló
StandardError=napló
IdőtúllépésMásodperc=7200
WantedBy = multi-user.target
A hozzá tartozó időzítőt pedig a következőképpen definiálnánk egy napi biztonsági mentés hajnali 2-kor némi véletlenszerűséggel, hogy ne terheljen le mindent egyszerre:
Description=Daily Rsync Backup Timer
Requires=rsync-backup.service
Naptáron=*-*-* 02:00:00
Állandó=igaz
RandomizedDelaySec=10min
WantedBy=időzítők.célpont
Ezzel már csak a systemd újraindítása, az időzítő aktiválása és a programozás helyességének ellenőrzése van hátra. A szerviznapló azt mutatja, hogy a másolatok akkor indulnak el, amikor eljön az ideje..
sudo systemctl daemon-reload
sudo systemctl enable --now rsync-backup.timer
systemctl list-timers
journalctl -u rsync-backup.service
Rotációs biztonsági mentések szervezése: napi, heti és havi
Ha valamivel bonyolultabbra vágysz, mint egyetlen statikus másolat, beállíthatsz egy struktúrát a következőkből: rotációs biztonsági mentések: napi, heti és havikemény linkek használata helytakarékossághoz és a régi fájlok tisztításához.
Egy klasszikus minta szerint van egy aktuális könyvtár, amelyet minden alkalommal frissítenek az rsync segítségével, majd ezt a fát klónozzák, és a naptól függően napi, heti és havi mappákhoz kapcsolják a mappákat.
#!/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 «$JELENLEGI» «$NAPI» «$HETI» «$HAVI»
rsync -av –delete –link-dest=»$CURRENT» \
«$FORRÁS_KÖNYVTÁR/» «$AKTUÁLIS/»
&& cp -al «$AKTUÁLIS» «$NAPI/$DÁTUM»
&& cp -al «$AKTUÁLIS» «$HETI/$DÁTUM»
&& cp -al «$AKTUÁLIS» «$HAVI/$DÁTUM»
keresés «$DAILY» -maxdepth 1 -type d -mtime +7 -exec rm -rf {} \;
keresés «$HETI» -maxdepth 1 -type d -mtime +28 -exec rm -rf {} \;
keresés «$HAVI» -maxdepth 1 -type d -mtime +365 -exec rm -rf {} \;
Ezzel a rendszerrel van egy meglehetősen ésszerű történelmi ablak anélkül, hogy a lemezt megtöltené másolatokkal, és minden pillanatkép navigálható marad, mint egy normál mappa.
Ha az adataid gyorsan változnak vagy nagyon nagyok, módosíthatod a megőrzési időszakokat, a gyakoriságokat, vagy akár kombinálhatod ezt LVM vagy ZFS pillanatképekkel az adatbázisok vagy virtuális gépek konzisztenciájának biztosítása érdekében.
Figyelje, ellenőrizze és derítse ki, hogy a biztonsági mentései hasznosak-e.
A napi szintű biztonsági mentési feladatok futtatása nagyszerű, de ha senki sem ellenőrzi az eredményt Nem fog sokat segíteni. Fontos beállítani néhány alapvető megfigyelést, hogy tudd, mikor készült az utolsó biztonsági mentés.
Egy egyszerű taktika, hogy minden alkalommal, amikor a biztonsági mentés sikeresen befejeződik, egy kis jelölőt hagyunk a célmappában, például egy .last-backup-success fájlt a dátummal. Ezután egy külső szkript, vagy akár egy Nagios/Icinga ellenőrzés is figyelmeztethet, ha a fájl túl régi.
MARKER="/backup/www/.last-backup-success"
if ; then
echo "Marcador de backup no encontrado"
exit 1
fi
Egy másik egészséges szokás az, hogy ellenőrizzük a Ellenőrizze az rsync naplókat hibák vagy szokatlan átviteli sebességek szempontjábólEgy olyan szkript, ami statisztikákat nyer ki, mint például a "Fájlok száma", "Teljes méret", "Gyorsulás" és hasonlók, gyors áttekintést ad arról, hogy hogyan állnak a dolgok.
És persze az igazi különbség az, hogy időről időre hozzászokunk. igazi restaurálást végezniVegyél egy adott fájlt, állítsd vissza a tegnapi vagy a múlt heti verzióját, és ellenőrizd, hogy megfelelően nyílik-e meg. Csak így lehetsz biztos benne, hogy ha egy nap minden rosszul sül el, a biztonsági mentéseid megfelelőek lesznek.
Ha ezeket az elemeket – egy jól konfigurált rsync-et, automatizálást cronnal vagy systemd-vel, értelmes rotációt, monitorozást és visszaállítási tesztelést – egyesíted, akkor a következő eredményt kapod: egy robusztus, rugalmas és olcsó Linux biztonsági mentési rendszer, amely teljes mértékben kihasználja a szabad szoftverek előnyeit anélkül, hogy le kellene mondani a kényelemről vagy a megbízhatóságról.
