— egy ingyenes, nyílt forráskódú deduplikátor — egy archiválóhoz hasonló segédprogram, amely jelentősen csökkenti a biztonsági mentések méretét, emellett lehetővé teszi az inkrementális és differenciális biztonsági mentési sémák megszervezését, és még sok más funkciót is.
Ez egy áttekintő cikk a lehetőségek leírására. A hashget használatának részletei (meglehetősen egyszerű) a projekt és a .
Összehasonlítás
A műfaj törvénye szerint az intrikával kezdem — az eredmények összehasonlításával:
Adatminták
kicsomagolt méret
.tar.gz
hashget .tar.gz
WordPress-5.1.1
43 Mb
11 Mb ( 26% )
155 Kb ( 0.3% )
Linux kernel 5.0.4
934 Mb
161 Mb ( 20% )
4.7 Mb ( 0.5% )
Debian 9 (LAMP) LXC VM
724 Mb
165 Mb ( 23% )
4.1 Mb ( 0.5% )
Háttér, milyen legyen az ideális és hatékony biztonsági mentés
Minden alkalommal, amikor biztonsági mentést készítettem az újonnan létrehozott virtuális gépről, mindig az járt a fejemben, hogy valami nem stimmel. Miért kapok egy nehéz biztonsági másolatot olyan rendszerről, ahol az én felbecsülhetetlen, halhatatlan alkotásom — egy soros index.html, a "Hello world" szöveges tartalommal?
Miért van a biztonsági másolatomban egy 16 megabájtos /usr/sbin/mysqld? Nem lehet, hogy nekem, a világban egyedül, kell tárolni ezt a fontos fájlt, és ha nem sikerül — az örökre elveszik az emberiség számára? Valószínűleg nem. Ez egy megbízható Debian szerveren tárolódik (amelynek megbízhatósága és folyamatos működése semmivel sem összehasonlítható azzal, amit én biztosítani tudok), és tartalékmásolatokon (milliókban) más rendszergazdák részéről. Tényleg szükség van arra, hogy a megbízhatóság növelése érdekében elkészítsük a 10 000 000 + 1. másolatát ennek a fontos fájlnak?
Röviden és éppen ezt a problémát oldja meg. Csomagoláskor — nagyon kis biztonsági másolatot készít. Kicsomagoláskor — egy teljesen kicsomagolt rendszert, amely hasonlít arra, amely hozzá lenne tartozva tar -c / tar -x. (Más szavakkal, ez veszteségmentes csomagolás)
Hogyan működik a hashget
A hashget-ben van egy Package és HashPackage fogalom, amely segítségével deduplikációt végez.
Package (csomag). Egy fájl (általában .deb vagy .tar.gz archívum), amelyet biztonságosan letölthetünk az internetről, és amelyből egy vagy több fájl nyerhető ki.
HashPackage — egy kis JSON fájl, amely a Package-t reprezentálja, beleértve a csomag URL-jét és az abban található fájlok hash-összegét (sha256). Például a mariadb-server-core 5 megabájtos csomag esetén a hashpackage mérete mindössze 6 kilobájt. Körülbelül ezerszer kisebb.
Deduplikálás — archívum létrehozása duplikált fájlok nélkül (ha a deduplikáló tudja, honnan tölthető le az eredeti csomag, a duplikátumokat csökkenti az archívumban).
Csomagolás
A csomagolás során az összes fájl átnézésre kerül a csomagolandó könyvtárból, kiszámítják a hash-összegeiket, és ha a hash megtalálható az egyik ismert HashPackage-ban, akkor a fájl metainformációi (név, hash, engedélyek stb.) egy speciális .hashget-restore.json nevű fájlba kerülnek tárolásra, amely szintén bele lesz foglalva a archívumba.
A csomagolás a legegyszerűbb esetben nem bonyolultabb, mint a tar:
hashget -zf /tmp/mybackup.tar.gz --pack /path/to/dataKicsomagolás
A kicsomagolás két lépésben történik. Először a szokásos tar kicsomagolás:
tar -xf mybackup.tar.gz -C /path/to/datamajd helyreállítás a hálózatról:
hashget -u /path/to/dataA helyreállítás során a hashget elolvassa a .hashget-restore.json fájlt, letölti a szükséges csomagokat, kicsomagolja azokat, és kiemeli a szükséges fájlokat, beállítva őket a megfelelő helyekre, a megfelelő owner/group/permissions beállításokkal.
Bonyolultabb dolgok
A fent leírtak már elegendőek azok számára, akiknek „olyan jó, mint a tar, de hogy a Debianomat 4 megabájtban csomagolja”. Most nézzünk meg bonyolultabb dolgokat.
Indexelés
Ha a hashget-nek egyetlen HashPackage-ja sem volt, akkor egyszerűen nem tudta volna semmit deduplikálni.
HashPackage-t kézi úton is lehet létrehozni (egyszerűen: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), de van kényelmesebb módszer is.
Annak érdekében, hogy megkapja a szükséges hashpackage-t, van egy lépés indexelés (ez automatikusan végrehajtódik a --pack parancs során --pack, ennek eredményeként a lekérdezések olyan formát öltenek, mint a fent említett. heurisztikák. Az indexelés során a hashget "megeteti" minden megtalált fájlt a rendelkezésre álló heurisztikákkal, amelyek érdekli. A heurisztikák ezután indexelhetnek egy Package-t, hogy HashPackage-t hozzanak létre.
Például a debian heurisztika kedveli a /var/lib/dpkg/status fájlt, és felfedezi az installált debian csomagokat, és ha azok nincsenek indexelve (ha HashPackage nem készült róluk), akkor letölti és indexeli őket. Ez nagyon kellemes hatást eredményez — a hashget mindig hatékonyan deduplikálja a debian alapú OS-eket, még akkor is, ha a legújabb csomagok vannak rajtuk.
Fájlok-hint (utalások)
Ha a hálózatában használ valamilyen saját, vagy olyan nyilvános csomagot, amely nincs benne a hashget heurisztikáiban, egyszerű hint-fájlt adhat hozzá a hashget-hint.json mintájára:
{
"project": "wordpress.org",
"url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}Ezen kívül minden alkalommal, amikor archívumot hoznak létre, a csomag indexálva lesz (ha korábban nem volt), és a csomag fájljai eltávolításra kerülnek az archívumból. Nincs szükség programozásra, minden elérhető a vim-ből, így takaríthat meg minden biztonsági mentésnél. Vegye figyelembe, hogy a hash értékekkel való megközelítésnek köszönhetően, ha a csomag egyes fájljai helyben módosulnak (például a konfigurációs fájl megváltozik), akkor a módosított fájlok „úgy ahogy vannak” megmaradnak az archívumban és nem lesznek csökkentve.
Ha a saját csomagja időszakonként frissül, de a változások nem túl jelentősek, akkor csak a fő verziókhoz lehet irányelvet állítani. Például az 1.0 verzióban egy hivatkozást tettek mypackage-1.0.tar.gz-ra, és az teljesen eltávolításra kerül, majd kiadták az 1.1 verziót, amely kicsit eltér, de a hivatkozást nem frissítették. Nincs semmi baj. Csak azok a fájlok fognak eltávolításra kerülni, amelyek megegyeznek az 1.0 verzióval (amelyek visszaállíthatók).
A hint fájlt feldolgozó heurisztika - jó példa a heurisztikák belső működésének megértésére. Csak a hashget-hint.json (vagy a .hashget-hint.json ponttal) fájlokat dolgozza fel, és figyelmen kívül hagyja a többit. Ebből a fájlból határozza meg, hogy melyik csomag URL-t kell indexálni, és a hashget indexálja (ha ezt korábban nem tették meg).
HashServer
Eléggé időigényes lenne a biztonsági mentések létrehozásakor a teljes indexelés végrehajtása. Ehhez minden csomagot le kellene tölteni, kibővíteni, majd indexelni kellene. Ezért a hashget azt a sémát használja, . Amikor felfedeznek egy telepített debian csomagot, ha nem található a helyi HashPackage benne, először csak a HashPackage letöltésére tesznek kísérletet a hash szerverről. És csak ha ez nem sikerül, akkor a hashget magának tölti le és hasheli a csomagot (és feltölti a hashserverre, hogy a hashserver a jövőben elérhetővé tegye azt).
A HashServer nem kötelező eleme a sémának, nem kritikus, kizárólag a tárolókra nehezedő terhelés csökkentésére és felgyorsítására szolgál. Könnyen le lehet kapcsolni (opcióval --hashserver paraméterek nélkül). Emellett könnyen lehet .
Különbözeti és inkrementális biztonsági mentések, ütemezett elavulás
nagyon egyszerűen teszi lehetővé a sémát Miért ne indexálnánk a saját biztonsági mentésünket (minden egyedi fájlunkkal)? Egyetlen parancs --submit és kész is vagy! A következő biztonsági mentés, amelyet a hashget létrehoz, nem fogja tartalmazni ennek az archívumnak a fájljait.
De ez nem nagyon jó megoldás, mert lehet, hogy a helyreállításkor minden hashget-biztonsági mentést aktiválni kell a teljes történet során (ha mindegyikben van legalább egy egyedi fájl). Erre van egy mechanizmus Indexelés során megadhatjuk a HashPackage elavulási dátumát --expires 2019-06-01, és ennek a dátumnak a bekövetkeztekor (00:00-tól) többé nem lesz felhasználva. Magát az archívumot ezen a napon után nem szükséges törölni (Bár a hashget kényelmesen megmutathatja a URL-eket minden olyan mentésről, amely már lejárt/lejár a jelen pillanatban vagy bármely dátumon).
Például, ha az 1-jén teljes biztonsági mentést készítünk és annak időtartamát a hónap végéig indexeljük, akkor egy differenciális biztonsági mentési sémát kapunk.
Ha az új biztonsági mentéseket is így indexeljük – akkor incrementális biztonsági mentési sémát kapunk.
A hagyományos sémákkal ellentétben a hashget lehetővé teszi, hogy több alapforrást használjunk. A mentés csökkenthető a korábbi biztonsági mentések fájljainak csökkentése révén (ha vannak), és a nyilvános fájlok révén (amiket le lehet tölteni).
Ha valamilyen okból nem bízunk a debian források megbízhatóságában () vagy más disztribúciót használunk, akkor egyszerűen készíthetünk egy teljes biztonsági mentést minden csomagról, és ezután már rá támaszkodhatunk (). Most, ha a disztribúcióink összes szervere elérhetetlenné válik (a szuvenír interneten vagy zombi-apokalipszis esetén), de a biztonsági mentéseink rendben vannak – bármilyen rövid diff-biztonsági mentésből helyre tudunk állni, amely csak a korábbi biztonsági mentéseinkre támaszkodik.
A hashget kizárólag az Ön által MEGBÍZHATÓNAK tartott helyreállítási forrásokra támaszkodik. Amit megbízhatónak tart, azokat fogják felhasználni.
FilePool és Glacier
Mechanizmus lehetővé teszi, hogy ne kelljen folyamatosan külső szerverekhez folyamodni csomagok letöltéséhez, hanem használhatjuk a csomagokat a helyi könyvtárból vagy vállalati szerverről, például:
$ hashget -u . --pool /tmp/poolvagy
$ hashget -u . --pool http://myhashdb.example.com/A helyi könyvtárban történő pool létrehozásához egyszerűen csak létre kell hozni egy könyvtárat és beletenni a fájlokat, a hashget a hash-ek alapján automatikusan megtalálja, amire szüksége van. A pool HTTP-n való elérhetőségéhez különleges szimlinkeket kell létrehozni, ez egy parancs segítségével történik (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). A HTTP FilePool statikus fájlokat tartalmaz, így azt bármilyen egyszerű webserver képes kiszolgálni, a szerver terhelése szinte nulla.
A FilePool segítségével alapvető forrásként nemcsak http(s) forrásokat használhatunk, hanem, , Amazon Glacier-t is.
A backup feltöltése után a glacierről megkapjuk az Upload ID-t, és ezt használhatjuk URL-ként. Például:
hashget --submit Glacier_Upload_ID --file /tmp/my-glacier-backup.tar.gz --project glacier --hashserver --expires 2019-09-01Mostantól az új (differenciális) back-upok erre a backupra fognak támaszkodni, és rövidebbek lesznek. A tar kicsomagolása után megnézhetjük, hogy mely forrásokra támaszkodik:
hashget --info /tmp/unpacked/ listés egyszerű shell-skripttel letölthetjük a glacier-ből az összes fájlt a pool-ba, és elindíthatjuk a szokásos helyreállítást: hashget -u /tmp/unpacked --pool /tmp/pool
Megéri a befektetést?
A legegyszerűbb esetben – kevesebbet fog költeni a backupokra (ha azokat pénzért tárolja valahol a felhőben). Talán – sokkal-sokkal kevesebbet.
De ez nem az egyetlen előny. A mennyiség minőségbe megy át. Ezt felhasználhatja a backup séma minőségi fejlesztésére. Például, mivel a backupjaink mostantól rövidebbek – nem havi, hanem napi backupokat lehet készíteni. Nem hat hónapig, mint korábban, hanem öt évig tárolhatjuk őket. Korábban lassú, de olcsó "hideg" tárolóban (Glacier) tárolták, most pedig lehetőség van a gyors "meleg" tárolásra, ahonnan mindig gyorsan letöltheti a backupot, és percek alatt helyreállhat, nem pedig egy nap alatt.
Növelheti a backupok tárolásának megbízhatóságát. Ha jelenleg egy tárolóban tároljuk őket, a méret csökkentésével – 2-3 tárolóban tárolhatjuk anélkül, hogy fájdalmasan érintené, ha az egyik megsérül.
Hogyan próbálhatom ki és kezdhetek el használni?
Lépjünk be a gitlab oldalára , telepítsük egy parancs segítségével (pip3 install hashget[plugins]) és csak olvassuk el és hajtsuk végre a quick-startot. Azt gondolom, hogy az egyszerű dolgokat elvégezni — körülbelül 10-15 percet fog igénybe venni. Aztán megpróbálhatod tömöríteni a virtuális gépeidet, készíthetsz, ha szükséges, hinta fájlokat, hogy még inkább tömörödjenek, játszadozhatsz a pool-okkal, a helyi hash adatbázissal és a hash szerverrel, ha érdekel, aztán másnap megnézheted, hogy mekkora lesz az inkrementális biztonsági mentés a tegnapi fölött.
Forrás: habr.com
