â Ă«shtĂ« njĂ« deduplicator falas dhe me kod burimor â njĂ« utilitar i ngjashĂ«m me arkivatorin qĂ« lejon tĂ« reduktohet ndjeshĂ«m madhĂ«sia e kopjeve tĂ« rezervĂ«s, si dhe tĂ« organizohen skemat e kopjimit inkremental dhe diferencial dhe jo vetĂ«m. Ky Ă«shtĂ« njĂ« artikull pĂ«rmbledhĂ«s pĂ«r tĂ« pĂ«rshkruar mundĂ«sitĂ«. PĂ«rdorimi i vetĂ« hashget (mjaft i thjeshtĂ«) Ă«shtĂ« pĂ«rshkruar nĂ«
projekti dhe wiki-dokumenti .
Krahasimi
Data sample
madhësia e papaketuara
hashget .tar.gz
.tar.gz
WordPress-5.1.1
43 Mb
11 Mb ( 26% )
155 Kb (
Linux kernel 5.0.4 0.3% )
934 Mb
161 Mb ( 20% )
4.7 Mb (
Debian 9 (LAMP) LXC VM 0.5% )
724 Mb
165 Mb ( 23% )
4.1 Mb (
Historiku, si duhet të jetë një kopje rezervë ideale dhe efektive 0.5% )
Ădo herĂ« qĂ« bĂ«ja njĂ« kopje rezervĂ« tĂ« njĂ« virtuaku tĂ« sapokrijuar, ndihesha si tĂ« isha duke bĂ«rĂ« diçka tĂ« gabuar. Pse kam njĂ« kopje rezervĂ« tĂ« rĂ«ndĂ« nga sistemi, ku krijimi im tĂ« çmuar Ă«shtĂ« vetĂ«m njĂ« index.html me tekstin "Hello world"?
Pse nĂ« kopjen time rezervĂ« ka njĂ« 16-megabaytĂ«sh \/usr\/sbin\/mysqld? A Ă«shtĂ« vĂ«rtetĂ« qĂ« tani mĂ« Ă«shtĂ« rĂ«nĂ« e drejta tĂ« ruaj kĂ«tĂ« skedar tĂ« rĂ«ndĂ«sishĂ«m, dhe nĂ«se nuk e bĂ«j, ai do tĂ« humbasĂ« pĂ«r njerĂ«zimin? NjĂ« gjĂ« Ă«shtĂ« e sigurt: ai ruhet nĂ« serverĂ« tĂ« besueshĂ«m debian (besueshmĂ«ria dhe disponueshmĂ«ria e tĂ« cilĂ«ve nuk krahasohet me atĂ« qĂ« mund tĂ« siguroj unĂ«), si dhe nĂ« kopje rezervĂ« (miliona tĂ« tilla) tĂ« administratorĂ«ve tĂ« tjerĂ«. NĂ« tĂ« vĂ«rtetĂ«, na nevojitet tĂ« krijojmĂ« 10,000,000 + 1âĂ«n kopje tĂ« kĂ«tij skedari tĂ« rĂ«ndĂ«sishĂ«m?
Në të vërtetë
dhe zgjidh kĂ«tĂ« problem. Kur paketimi â krijon njĂ« kopje rezervĂ« shumĂ« tĂ« vogĂ«l. Kur shkarkohet â merr njĂ« sistem tĂ« plotĂ« tĂ« papaketuara, e ngjashme me atĂ« qĂ« do tĂ« ishte nĂ« tar -c tar -x / . (NĂ« fjalĂ« tĂ« tjera, kjo Ă«shtĂ« paketimi pa humbje)Si funksionon hashget
Në hashget ka konceptet Package dhe HashPackage, me ndihmën e të cilëve kryhet deduplicimi.
(paketë). Një skedar (zakonisht një arkiv .deb ose .tar.gz) që mund të shkarkohet me siguri nga rrjeti, dhe nga i cili mund të nxirren një ose më shumë skedarë.
Package HashPackage
â njĂ« skedar i vogĂ«l JSON, qĂ« paraqet PaketĂ«n, duke pĂ«rfshirĂ« URL-nĂ« e paketĂ«s dhe checksum (sha256) tĂ« skedarĂ«ve tĂ« saj. PĂ«r shembull, pĂ«r paketĂ«n mariadb-server-core me njĂ« madhĂ«si prej 5 megabaytĂ«s, madhĂ«sia e hashpackage Ă«shtĂ« vetĂ«m 6 kilobajtĂ«. Rreth njĂ« mijĂ« herĂ« mĂ« e vogĂ«l. â krijimi i njĂ« arkivi pa skedarĂ« tĂ« kopjuar (nĂ«se deduplicatori e di se ku mund tĂ« shkarkohet origjinali i paketĂ«s, ai redukton kopjet nĂ« arkiv).
Deduplication Paketimi
Kur paketoni, shikohet çdo skedar nga katalogu që po paketoni, janë llogaritur checksum-et e tyre, dhe nëse një checksum gjendet në një nga HashPackage të njohur, atëherë metadat për skedarin (emri, hash, e drejtat e aksesit etj) ruhen në një skedar të veçantë .hashget-restore.json, i cili do të përfshihet gjithashtu në arkiv.
Paketimi vetë në rastin më të thjeshtë duket ashtu si tar:
hashget -zf \/tmp\/mybackup.tar.gz --pack \/path\/to\/data
Shkarkimi bëhet në dy faza. Së pari, shkarkimi normal tar:Shkëputja
tar -xf mybackup.tar.gz -C \/path\/to\/data
pastaj rikthimi nga rrjeti:hashget -u \/path\/to\/data
Kur rikthehet, hashget lexon skedarin .hashget-restore.json, shkarkon paketat e nevojshme, i shkarkon ato, dhe nxjerr skedarët e nevojshëm, që i vendos në rrugët e nevojshme, me pronar/grup/leje të nevojshme.Gjëra më komplekse
Ajo qĂ« Ă«shtĂ« pĂ«rshkruar mĂ« sipĂ«r â Ă«shtĂ« e mjaftueshme pĂ«r ata qĂ« "duan si tar, por qĂ« tĂ« paketojĂ« Debianin tim nĂ« 4 megabayta". MĂ« pas do tĂ« shikojmĂ« gjĂ«ra mĂ« komplekse.
Indeksimi
Nëse hashget nuk kishte asnjë HashPackage, ai thjesht nuk do të ishte në gjendje të kryente ndonjë deduplicim.
Një HashPackage mund të krijohet edhe manualisht (thjesht:
hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my ), por ka një rrugë më të lehtë.Për të marrë hashpackage të nevojshme, ka një fazë
indeksimi (ai ekzekutohet automatikisht me komandĂ«n --pack heuristikave) dhe . GjatĂ« indeksimit, hashget "i ushqen" çdo skedar tĂ« gjetur tĂ« gjitha heuristikave tĂ« disponueshme pĂ«r tĂ« cilat Ă«shtĂ« e interesuar. Heuristikat mund tĂ« indeksojnĂ« ndonjĂ« PaketĂ« pĂ«r tĂ« krijuar HashPackage.PĂ«r shembull, heuristika debiane i pĂ«lqen skedari \/var\/lib\/dpkg\/status dhe zbulohet paketat e instaluara debiane, dhe nĂ«se ato nuk janĂ« indeksuar (nuk janĂ« krijuar HashPackage pĂ«r to), i shkarkon dhe i indekson ato. KĂ«shtu krijohet njĂ« efekt shumĂ« tĂ« kĂ«ndshĂ«m â hashget gjithmonĂ« do tĂ« kryejĂ« deduplicim efektiv tĂ« sistemeve debiane, edhe nĂ«se ato kanĂ« paketat mĂ« tĂ« reja.
Skedarë-të-hint (nënkëshilla)
Nëse në rrjetin tuaj përdoret ndonjë paketë pronësore ose ndonjë paketë publike që nuk është përfshirë në heuristikat hashget, mund të shtoni një skedar të thjeshtë hint hashget-hint.json sipas modelit:
{ "project": "wordpress.org", "url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip" }
{
"project": "wordpress.org",
"url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}Më pas, çdo herë që krijoni një arkiv, paketa do të indeksuar (nëse nuk është bërë më parë), dhe skedarët e paketës do të deduplikuar nga arkiva. Nuk nevojitet ndonjë programim, gjithçka mund të bëhet nga vim dhe të kurseni për çdo kopje rezervë. Vini re se falë qasjes përmes fuqisë së hash, nëse disa skedarë nga paketa janë modifikuar lokal (p.sh., skedari i konfigurimit është ndryshuar) - skedarët e modifikuar do të ruajnë në arkiv "ashtu si janë" dhe nuk do të reduktohen.
Nëse ndonjë paketë tuajaja përditësohet periodikisht, por ndryshimet nuk janë të mëdha, mund të bëni hint vetëm për versionet kryesore. Për shembull, në versionin 1.0 u bë hint me referencë në mypackage-1.0.tar.gz, dhe ajo do të deduplikohet plotësisht, pastaj u lirua versioni 1.1, i cili është pak më ndryshe, dhe hint-i nuk u përditësua. Asgjë e keqe. Deduplikohen vetëm skedarët që përputhen (të cilët mund të rikuperohen) me versionin 1.0.
Heuristika që përpunon skedarin hint - një shembull i mirë për të kuptuar mekanizmin e brendshëm të funksionimit të heuristikave. Ajo përpunon vetëm skedarët hashget-hint.json (ose .hashget-hint.json me pikë) dhe injoron të tjerët. Me këtë skedar përcakton se cili URL i paketës duhet të indeksuar, dhe hashget e indeksuar (nëse nuk është bërë më parë).
HashServer
Do tĂ« ishte mjaft e punĂ«s pĂ«r tĂ« kryer indeksimin plotĂ«sisht gjatĂ« krijimit tĂ« kopjeve rezervĂ«. PĂ«r kĂ«tĂ«, duhet tĂ« shkarkohet çdo paketĂ«, tĂ« shqiptonet, dhe tĂ« indeksuar. Prandaj hashget pĂ«rdor njĂ« skemĂ« me . NĂ« rast se zbulohet njĂ« paketĂ« debian tĂ« instaluar, nĂ«se nuk gjendet nĂ« HashPackage lokale, bĂ«het fillimisht njĂ« pĂ«rpjekje vetĂ«m pĂ«r tĂ« shkarkuar HashPackage nga serveri i hash. Dhe vetĂ«m nĂ«se kjo nuk funksionon â hashget vetĂ« shkarkon dhe hash-uar paketĂ«n (dhe e ngarkohet nĂ« hashserver, nĂ« mĂ«nyrĂ« qĂ« mĂ« vonĂ« hashserver ta ofrojĂ« atĂ«).
HashServer nuk është një element i detyrueshëm i skemës, nuk është kritik, shërben vetëm për të përshpejtuar dhe ulur ngarkesën në depo. Lehtë është të çaktivizohet (me opsionin --hashserver pa parametra). Për më tepër, lehtë mund të .
Kopjet rezervë inkrementale dhe diferenciale, skemar e skadencës së planifikuar
lejon shumë lehtë të bëni një skemë . Pse të mos indeksojmë vetë kopjen tonë rezervë (me të gjithë skedarët tanë unikë)? Një komandë --submit dhe gjithçka është gati! Kopja tjetër rezervë që do të krijojë hashget, nuk do të përfshijë skedarët nga ky arkiv.
Por ky nuk është një qasje e mirë, sepse mund të ndodhë që gjatë rikthimit të duhet të kërkoni të gjitha kopjet rezervë hashget për të gjithë historinë (nëse në secilën do të ketë të paktën një skedar unik). Për këtë ka një mekanizëm . Gjatë indeksimit mund të specifikoni datën e skadencës për HashPackage --expires 2019-06-01, dhe me ardhjen kësaj date (nga 00:00), ai nuk do të përdoret. Arkivi mund të vazhdojë të mos fshihet pas kësaj date (Megjithatë, hashget mund të tregojë lehtësisht URL-të e të gjithë kopjeve rezervë që janë prishur / do prishen deri tani ose në ndonjë datë).
PĂ«r shembull, nĂ«se bĂ«het njĂ« kopje rezervĂ« e plotĂ« mĂ« 1, dhe e indeksoni me njĂ« jetĂ«gjatĂ«si deri nĂ« fund tĂ« muajit â do tĂ« kemi njĂ« skemĂ« tĂ« kopjimeve rezervĂ« diferenciale.
NĂ«se ashtu do tĂ« indeksojmĂ« edhe kopjet e reja rezervĂ« â do tĂ« ketĂ« njĂ« skemĂ« tĂ« kopjimeve rezervĂ« inkrementale.
Në krahasim me skemat tradicionale, hashget lejon përdorimin e disa burimeve bazë. Kopja rezervë do të reduktohet si për shkak të reduktimit të skedarëve nga kopjet rezervë të mëparshme (nëse i ekzistojnë), ashtu edhe për shkak të skedarëve publik (ato që mund të shkarkohen).
NĂ«se pĂ«r ndonjĂ« arsye ne nuk kemi besim nĂ« besueshmĂ«rinĂ« e burimeve debiane () ose pĂ«rdorim njĂ« distrobucion tjetĂ«r, ne mund ta bĂ«jmĂ« njĂ« herĂ« njĂ« kopje rezervĂ« tĂ« plotĂ« me tĂ« gjithĂ« paketat, dhe mĂ« pas tĂ« mbĂ«shtetemi nĂ« tĂ« (). Tani, nĂ«se tĂ« gjithĂ« serverĂ«t e distribucioneve tona do tĂ« ishin tĂ« paqasshĂ«m (nĂ« internetin e suvenireve ose gjatĂ« njĂ« apokalipse zombish), por kopjet tona rezervĂ« do tĂ« ishin nĂ« rregull â do tĂ« mund tĂ« rikthehemi nga çdo kopje rezervĂ« tĂ« shkurtĂ«r diferenciale, qĂ« mbĂ«shtetet vetĂ«m nĂ« kopjet tona rezervĂ« mĂ« tĂ« hershme.
Hashget mbĂ«shtetet vetĂ«m nĂ« burimet e besueshme pĂ«r rikuperim sipas NĂNĂN tuaj tĂ« zgjedhjes. ĂfarĂ«do qĂ« tĂ« mendoni tĂ« besueshme - ato do tĂ« pĂ«rdoren.
FilePool dhe Glacier
Mekanizmi lejon që të mos bëni vazhdimisht aplikime te serverët e jashtëm për shkarkimin e paketave, por të përdorni paketat nga katalogu lokal ose serveri korporativ, për shembull:
$ hashget -u . --pool /tmp/poolose
$ hashget -u . --pool http://myhashdb.example.com/PĂ«r tĂ« krijuar njĂ« rezervĂ« nĂ« katalogun lokal â mjafton tĂ« krijoni njĂ« katalog dhe ta mbushni atĂ« me skedarĂ«, hashget vetĂ« do tĂ« gjejĂ« ato qĂ« i nevojiten. PĂ«r tĂ« bĂ«rĂ« rezervĂ«n tĂ« arritshme pĂ«rmes HTTP-sĂ«, duhet tĂ« krijoni simbole tĂ« veçanta, kjo bĂ«het me njĂ« komandĂ« (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). HTTP FilePool Ă«shtĂ« pĂ«r skedarĂ« statikĂ«, kĂ«shtu qĂ« çdo server i thjeshtĂ« mund ta mbajĂ« atĂ«, duke i bĂ«rĂ« ngarkesat nĂ« server pothuajse zero.
Falë FilePool, si burime bazë mund të përdoren jo vetëm burime http(s), por edhe, , Amazon Glacier.
Pasi ngarkohet backup-i në Glacier, marrim ID-në e ngarkimit dhe e përdorim atë si URL. Për shembull:
hashget --submit Glacier_Upload_ID --file /tmp/my-glacier-backup.tar.gz --project glacier --hashserver --expires 2019-09-01Tani backup-et e reja (diferenciale) do të mbështeten në këtë backup dhe do të jenë më të shkurtra. Pas shpaketimit të backup-it diferencial, mund të shohim se në cilat burime mbështetet ai:
hashget --info /tmp/unpacked/ listdhe thjesht me një skript shell të shkarkojmë këta skedarë nga Glacier në pool dhe të fillojmë rikuperimin e zakonshëm: hashget -u /tmp/unpacked --pool /tmp/pool
Vlen miku
Në rastin më të thjeshtë, do të paguani më pak për backup-et (nëse i ruani diku në cloud për para). Ndoshta shumë-më pak.
Por kjo nuk është e vetmja. Sasia kalon në cilësi. Mund ta përdorni këtë për të përmirësuar planin e backup-eve. Për shembull, tani që backup-et janë më të shkurtra - mund të bëni backup çdo ditë në vend të një herë në muaj. Të ruani ato për 5 vjet, jo për gjashtë muaj si më parë. Më parë, i ruanim në magazina të ngadalta por të lira (Glacier), tani mund të ruani në një magazinë të ngrohtë, nga e cila mund të shkarkoni shpejt backup-in dhe të rikuperoheni brenda disa minutash, jo brenda një dite.
Mund të rritet besueshmëria e magazinimit të backup-eve. Nëse tani i ruajmë në një magazinë, duke reduktuar volumet e backup-eve - mund të ruajmë në 2-3 magazina dhe të përjetojmë pa probleme, nëse njëra prej tyre dëmtohet.
Si të provoni dhe të filloni përdorimin?
Hyjmë në faqen e gitlabit , e instalojmë me një komandë (pip3 install hashget[plugins]) dhe thjesht lexojmë-eveprojmë quick-start. Mendoj se gjërat e thjeshta do të kërkojnë rreth 10-15 minuta. Më pas mund të provoni të kompresoni virtualet tuaja, të krijoni, nëse nevojitet, skedarë hint që të kompresohen më fort, të luani me pool-et, bazën lokale të hash-eve dhe serverin e hash-eve, nëse do të ketë interes, dhe ditën tjetër të shikoni se çfarë do të jetë madhësia e backup-it inkremental mbi atë të djeshmin.
Burimi: habr.com
