Hogyan optimalizálható az adatok szinkronizálása az rsync segítségével?
Az rsync egy sokoldalú eszköz, amely egyszerűsíti a fájlok hálózati kapcsolatokon történő átvitelét és felgyorsítja a helyi könyvtárak szinkronizálását. A nagyfokú rugalmasságnak köszönhetően ez a szinkronizáló eszköz kiváló választás számos fájlszintű művelethez.
Mi az az rsync?
Az rsync, a „remote synchronisation” (távoli szinkronizálás) rövidítése, egy rugalmas és hálózati kompatibilis szinkronizáló eszköz Linux alatt. Az open source programmal fájlok és könyvtárak szinkronizálhatók helyi rendszerek között vagy hálózatokon keresztül. Az eszköz differenciális adatátviteli technikát használ, amelynek során csak azok az adatok kerülnek átvitelre, amelyek ténylegesen megváltoztak. Ez minimálisra csökkenti az adatcsere mennyiségét és jelentősen felgyorsítja a szinkronizálási folyamatot. A rsync számos beállítási lehetőségnek köszönhetően lehetővé teszi a szinkronizálás pontos vezérlését. A rugalmas szintaxis egyszerű helyi másolatok és komplex hálózati szinkronizálások készítését is lehetővé teszi.
Mi az rsync szintaxisa?
Az rsync parancs szintaxisa egyszerű felépítésű és hasonló az SSH, SCP és CP parancsokéhoz. Az alapvető felépítés a következő:
rsync [OPTION] source destinationbashAz adatok szinkronizálásának forrásútvonalát sourceben kell megadni, míg a célútvonalat destinationben. Az rsync számos opciót kínál, amelyekkel a felhasználók a szinkronizálási folyamatot igényeikhez igazíthatják. A leggyakrabban használt opciók a következők:
-a(archívumok): Megőrzi a rekurzív fájlengedélyeket, időbélyegeket, csoportokat, tulajdonosokat és speciális fájl tulajdonságokat-v(verbose): Részletes információkat jelenít meg a szinkronizálási folyamatról-r(recursive): Rekurzív módon szinkronizálja a könyvtárakat és azok tartalmát-u(update): Csak azokat a fájlokat továbbítja, amelyek újabbak, mint a célkönyvtárban már meglévők-z(compress): Csökkenti a hálózati adatforgalmat-n–itemize-changes: Megjeleníti a végrehajtandó változtatások listáját--delete: Törli a célkönyvtárban azokat a fájlokat, amelyek már nem léteznek a forrásban--exclude: Bizonyos fájlokat vagy könyvtárakat kizár a szinkronizálásból--dry-run: Szimulálja a szinkronizálási folyamatot anélkül, hogy ténylegesen átmásolná a fájlokat--progress: Megjeleníti a fájlátvitel előrehaladását--partial: A részben átvitt fájlok a célkönyvtárban maradnak, ha az átvitel megszakad. Az átvitel folytatásakor a fájl az utolsó állapotából folytatódik
Példák az rsync szintaxisra
Az alábbi rsync szintaxis példák segítenek megérteni a parancs használatát. Az alábbi kódpélda létrehozza a dir1 könyvtárat, amely 100 üres tesztfájlt és egy második üres dir2 könyvtárat tartalmaz:
$ cd ~
$ mkdir dir1
$ mkdir dir2
$ touch dir1/file{1..100}bashA dir1 tartalma a -r opcióval szinkronizálható ugyanazon a rendszeren a dir2 -tel:
$ rsync -r dir1/ dir2bashAlternatív megoldásként használható a -a opció, amely rekurzívan szinkronizál, és tartalmazza a szimbolikus linkeket, speciális eszközfájlokat, módosítási időket, csoportokat, tulajdonosokat és jogosultságokat:
$ rsync -a dir1/ dir2bashMegjegyzés: Az rsync parancsban a forráskönyvtár végén található perjel (/) fontos, mert jelzi , hogy a könyvtár tartalmát kell szinkronizálni, nem magát a könyvtárat.
$ rsync -a dir1/ dir2bashÍme egy példa a kimenetre:
sending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .bashHa a forráskönyvtár nem tartalmaz záró perjelet, akkor a forráskönyvtár a célkönyvtárba lesz másolva:
$ rsync -a dir1 dir2bashItt van az eredmény:
sending incremental file list
dir1/
dir1/file1
dir1/file10
dir1/file100
dir1/file11
dir1/file12
dir1/file13
dir1/file14
dir1/file15
dir1/file16
dir1/file17
dir1/file18
. . .bashA forráskönyvtár végén lévő perjel használata biztosítja, hogy a szinkronizálási folyamat a várt módon futjon, és hogy a forráskönyvtár tartalma a megfelelő célkönyvtárba kerüljön.
Hogyan szinkronizáljuk az rsync-et egy távoli rendszerrel?
A távoli rendszer szinkronizálása az rsync segítségével általában nem nehéz, feltéve, hogy rendelkezik SSH-hozzáféréssel a távoli számítógéphez és a szükséges hitelesítési adatokkal. Az rsync gyakran használja az SSH-t (Secure Shell) a távoli rendszerekkel való biztonságos kommunikációhoz. Az eszköz használatához mindkét oldalon telepíteni kell.
Ha az SSH-hozzáférés a két számítógép között ellenőrzésre került, a dir1 mappa szinkronizálható egy távoli számítógépen. Ebben az esetben a tényleges könyvtárat kell átvinni, ezért a következő parancsban elhagytuk a záró perjelet:
$ rsync -a ~/dir1 username@remote_host:destination_directorybashHa egy könyvtárat egy helyi rendszerről egy távoli rendszerre helyeznek át, ezt push műveletnek nevezik. Ezzel szemben, amikor egy távoli könyvtárat szinkronizálnak egy helyi rendszerrel, ezt pull műveletnek nevezik. A szintaxisa a következő:
$ rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machinebashMilyen egyéb lehetőségek vannak az rsync-ben?
Az rsync alapértelmezett viselkedése az alábbi opciók segítségével tovább testreszabható.
Nem tömörített fájlok átvitele rsync segítségével
A nem tömörített fájlok átvitelekor a hálózati terhelés a -z opcióval csökkenthető:
$ rsync -az source destinationbashA folyamat megjelenítése és a megszakított átvitelek folytatás
-P opcióval kombinálhatja a --progress és --partial opciókat. Ezzel áttekintést kap az átvitelek előrehaladásáról, és egyúttal folytathatja a megszakított átviteleket is:
$ rsync -azP source destinationbashItt van az eredmény:
sending incremental file list
./
file1
0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101)
file10
0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101)
file100
0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101)
file11
0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101)
. . .bashFuttassa újra a parancsot, hogy rövidebb kimenetet kapjon. Ez lehetővé teszi az rsync számára, hogy a változások időpontja alapján megállapítsa, történt-e változás.
$ rsync -azP source destinationbashItt van az eredmény:
sending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00bashA könyvtárak szinkronizálása az rsync segítségével
Ahhoz, hogy két könyvtár valóban szinkronban maradjon, szükséges törölni a célkönyvtárból azokat a fájlokat, amelyek már nincsenek a forráskönyvtárban. Az rsync azonban nem törli automatikusan a fájlokat a célkönyvtárból. Ez a --delete opcióval módosítható. Fontos azonban, hogy ezt az opciót óvatosan használjuk, mivel törli a célkönyvtárból azokat a fájlokat, amelyek már nem léteznek a forrásban.
Mielőtt ezt az opciót használná, használja a --dry-run opciót. Ez lehetővé teszi a szinkronizálási folyamat szimulálását anélkül, hogy tényleges fájlokat törölne. Így biztosíthatja, hogy csak a kívánt változtatások történjenek meg, anélkül, hogy véletlenül fontos adatokat veszítene el:
$ rsync -a --delete source destinationbashFájlok és könyvtárak kizárása a szinkronizálásból
Az rsync programban a --exclude opcióval kizárhat bizonyos fájlokat és könyvtárakat a szinkronizálásból. Ez akkor hasznos, ha például nem szeretné szinkronizálni az ideiglenes fájlokat, a naplófájlokat vagy más tartalmakat.
$ rsync -a --exclude=pattern_to_exclude source destinationbashHa megadott egy mintát a fájlok kizárásához, akkor a --include= opcióval felülírhatja ezt a kizárást bizonyos fájlok esetében, amelyek egy másik mintához illeszkednek.
$ rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destinationbashBiztonsági másolatok mentése rsync segítségével
A --backup opció lehetővé teszi fontos fájlok biztonsági másolatainak mentését. A --backup-dir opcióval együtt használva megadható a biztonsági másolatok mentési helye:
$ rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destinationbashA különböző biztonsági mentési forgatókönyvekről részletes áttekintést találhat az rsync segítségével végzett szerverbiztonsági mentésekről szóló cikkünkben.