Diminye sovgad pa 99.5% ak hashget

hashget - li gratis, sous louvri deduplicator se yon sèvis piblik ki sanble ak yon achiv ki pèmèt ou redwi siyifikativman gwosè sovgad, osi byen ke òganize plan backup incrémentielle ak diferansye ak plis ankò.

Sa a se yon atik BECA pou dekri karakteristik yo. Itilizasyon aktyèl la nan hashget (byen senp) dekri nan README pwojè ak dokiman wiki.

Konparezon

Dapre lwa a nan genre a, mwen pral kòmanse imedyatman ak konplote a - konpare rezilta yo:

Done echantiyon
gwosè depake
.tar.gz
hashget.tar.gz

WordPress-5.1.1
43 Mb
11 Mb (26%)
155 Kb ( 0.3% )

Linux KNELX
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% )

Jan nou koumanse sou sa yon idéal Et efficace sauvegarde ta dwe

Chak fwa mwen te fè yon backup nan yon machin vityèl ki fèk kreye, mwen te ante pa santi ke mwen te fè yon bagay ki mal. Poukisa mwen jwenn yon sovgad fò nan sistèm nan, kote kreyativite mwen pa koute chè, enperisab se yon yon sèl liy index.html ak tèks la "Bonjou lemonn"?

Poukisa gen yon 16 MB /usr/sbin/mysqld nan backup mwen an? Èske li vrèman posib ke nan monn sa a mwen gen onè kenbe dosye enpòtan sa a, epi si mwen echwe, li pral pèdi nan limanite? Gen plis chans non. Li estoke sou sèvè Debian trè serye (fiabilite ak kontinwite yo pa ka konpare ak sa mwen ka bay), osi byen ke nan sovgad (milyon nan yo) nan lòt admin. Èske nou reyèlman bezwen kreye 10+ 000 kopi dosye enpòtan sa a pou amelyore fyab?

Anjeneral hashget epi rezoud pwoblèm sa a. Lè chaje, li kreye yon ti backup. Lè debalaj - yon sistèm konplètman depake, menm jan ak sa li ta si tar -c / tar -x. (Nan lòt mo, sa a se anbalaj san pèt)

Ki jan hashget travay

hashget gen konsèp nan Package ak HashPackage, ak èd yo li fè deduplication.

Pake (sak plastik). Yon fichye (anjeneral se yon achiv .deb oswa .tar.gz) ki ka telechaje sou Entènèt la an sekirite, epi kote yo ka jwenn youn oswa plizyè fichye.

HashPackage — yon ti fichye JSON ki reprezante yon Pake, ki gen ladan URL pake a ak sòm hash (sha256) nan dosye ki soti nan li. Pou egzanp, pou yon pake mariadb-server-core 5 megabyte, gwosè hashpackage a se sèlman 6 kilobyte. Apeprè mil fwa mwens.

Deduplication — kreye yon achiv san dosye kopi (si deduplicator a konnen ki kote pakè orijinal la ka telechaje, li diminye kopi nan achiv la).

Anbalaj

Lè w ap pake, yo analize tout fichye ki soti nan anyè a ke yo te chaje, yo kalkile sòm yo, epi si yo jwenn sòm nan nan youn nan HashPackages yo konnen, Lè sa a, metadata sou dosye a (non, hash, dwa aksè, elatriye) yo sove. nan yon fichye espesyal .hashget-restore.json, ki pral enkli tou nan achiv la.

Nan ka ki pi senp, anbalaj la li menm pa sanble pi konplike pase yon goudwon:

hashget -zf /tmp/mybackup.tar.gz --pack /path/to/data

Déballage

Debake fèt an de etap. Premye debalaj goudwon ​​abityèl la:

tar -xf mybackup.tar.gz -C /path/to/data

Lè sa a, retabli soti nan rezo a:

hashget -u /path/to/data

Lè retabli, hashget li .hashget-restore.json fichye a, telechaje pakè ki nesesè yo, depake yo, epi ekstrè fichye ki nesesè yo, enstale yo nan chemen ki nesesè yo, ak pwopriyetè/gwoup/pèmisyon ki nesesè yo.

Bagay ki pi difisil yo

Sa ki dekri pi wo a se deja ase pou moun ki "vle li tankou goudwon, men yo pake Debian mwen an nan 4 megabyte." Ann gade bagay ki pi konplèks pita.

Indexing

Si hashget pa t 'gen yon sèl HashPackage nan tout, Lè sa a, li tou senpleman pa ta kapab deduplicate anyen.

Ou kapab tou kreye yon HashPackage manyèlman (tou senpleman: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), men gen yon fason ki pi pratik.

Yo nan lòd yo jwenn hashpackage ki nesesè yo, gen yon etap endèks (li se otomatikman egzekite ak lòd la --pack) ak eristik. Lè Indexing, hashget "feeds" chak fichye jwenn nan tout euristik ki disponib ki enterese nan li. Euristik ka Lè sa a, endèks nenpòt pake yo kreye yon HashPackage.

Pa egzanp, eristik Debian renmen fichye /var/lib/dpkg/status la epi detekte pakè Debian ki enstale yo, epi si yo pa endis (pa gen okenn HashPackage ki te kreye pou yo), telechaje yo epi endis yo. Rezilta a se yon efè trè bèl - hashget ap toujou efektivman deduplike OS Debian, menm si yo gen dènye pakè yo.

Fichye sijesyon

Si rezo ou a sèvi ak kèk nan pakè propriétaires ou oswa yon pake piblik ki pa enkli nan eristik hashget yo, ou ka ajoute yon senp fichye sijesyon hashget-hint.json nan li tankou sa a:

{
    "project": "wordpress.org",
    "url": "https://ru.wordpress.org/wordpress-5.1.1-ru_RU.zip"
}

Apre sa, chak fwa yo kreye yon achiv, yo pral endis pake a (si li pa te deja), epi fichye pake yo pral deduplike nan achiv la. Pa gen pwogramasyon ki nesesè, tout bagay ka fè soti nan vim epi sove nan chak backup. Tanpri sonje ke gras a apwòch sòm hash la, si kèk dosye ki soti nan pake a chanje lokalman (pa egzanp, yon dosye konfigirasyon chanje), Lè sa a, dosye yo chanje yo pral sove nan achiv la "jan yo ye" epi yo pa pral tronke.

Si kèk nan pakè pwòp ou yo mete ajou detanzantan, men chanjman yo pa trè gwo, ou ka allusion sèlman pou vèsyon pi gwo. Pou egzanp, nan vèsyon 1.0 yo te fè yon allusion lonje dwèt sou mypackage-1.0.tar.gz, epi li pral konplètman deduplicated, Lè sa a, yo lage vèsyon 1.1, ki se yon ti kras diferan, men allusion a pa te mete ajou. Se OK. Se sèlman fichye ki matche ak (ka restore nan) vèsyon 1.0 yo deduplike.

Euristik la ki trete dosye sijesyon an se yon bon egzanp pou konprann mekanis entèn ki jan euristik travay. Li sèlman trete dosye hashget-hint.json (oswa .hashget-hint.json ak yon pwen) epi li inyore tout lòt moun. Soti nan fichye sa a, li detèmine ki URL pake yo ta dwe endèks, ak hashget endèks li (si li pa te deja fè sa)

HashServer

Li ta byen travay-entansif fè endèks konplè lè w ap kreye sovgad. Pou fè sa, ou bezwen telechaje chak pake, depake li, epi endèks li. Se poutèt sa hashget itilize yon konplo ak HashServer. Lè yo detekte yon pake Debian enstale, si yo pa jwenn li nan HashPackage lokal la, yo fè yon tantativ pou tou senpleman telechaje HashPackage a soti nan sèvè hash la. Epi sèlman si sa a pa travay, hashget tèt li telechaje ak hashes pake a (ak Uploads li nan hashserver, se konsa ke hashserver bay li nan lavni).

HashServer se yon eleman opsyonèl nan konplo a, pa kritik, li sèvi sèlman nan pi vit ak diminye chaj la sou depo yo. Fasil enfim (si ou vle --hashserver san paramèt). Anplis de sa, ou ka fasilman fè pwòp hashserver ou.

Sovgad inkreman ak diferansye, obsolesans planifye

hashget fè li trè fasil pou fè yon dyagram sovgad incrémentielle ak diferansye. Poukisa nou pa endèks backup nou an tèt li (ak tout dosye inik nou yo)? Yon ekip --submit epi ou fini! Pwochen backup ke hashget kreye pa pral gen ladan dosye ki soti nan achiv sa a.

Men, sa a se pa yon apwòch trè bon, paske li ka vire soti ke lè restore nou pral oblije rale tout sovgad hashget nan istwa a tout antye (si chak gen omwen yon dosye inik). Gen yon mekanis pou sa planifye obsolesans nan sovgad. Lè Indexing, ou ka presize dat ekspirasyon HashPackage --expires 2019-06-01, epi apre dat sa a (de 00:00), li p ap itilize. Achiv nan tèt li pa ka efase apre dat sa a (Malgre ke hashget ka fasilman montre URL yo nan tout sovgad ki / yo pral pouri nan moman sa a oswa nan nenpòt ki dat).

Pou egzanp, si nou fè yon backup konplè sou 1ye a epi endèks li ak yon lavi jouk nan fen mwa a, nou pral jwenn yon konplo backup diferans.

Si nou endèks nouvo sovgad nan menm fason an, pral gen yon konplo nan sovgad incrémentielle.

Kontrèman ak plan tradisyonèl yo, hashget pèmèt ou sèvi ak plizyè sous kache. Sovgad la ap redwi tou de pa diminye dosye ki soti nan sovgad anvan yo (si genyen) ak pa dosye piblik (sa ki ka telechaje).

Si pou kèk rezon nou pa fè konfyans resous Debian yo (https://snapshot.debian.org/) oswa itilize yon lòt distribisyon, nou ka tou senpleman fè yon backup konplè yon fwa ak tout pakè yo, ak Lè sa a, konte sou li (pa enfim euristik). Kounye a, si tout sèvè distribisyon nou yo pa disponib pou nou (sou Entènèt souvni oswa pandan yon Apocalypse zonbi), men sovgad nou yo nan lòd, nou ka refè soti nan nenpòt backup kout diferans ki depann sèlman sou sovgad pi bonè nou yo. .

Hashget sèlman depann sou sous rekiperasyon ou fè konfyans nan diskresyon OU. Yo pral itilize sa yo ou konsidere kòm serye.

FilePool ak Glacier

Mekanis FilePool pèmèt ou pa toujou kontakte sèvè ekstèn pou telechaje pakè, men sèvi ak pakè ki soti nan yon anyè lokal oswa sèvè antrepriz, pou egzanp:

$ hashget -u . --pool /tmp/pool

oswa

$ hashget -u . --pool http://myhashdb.example.com/

Pou fè yon pisin nan yon anyè lokal, ou jis bezwen kreye yon anyè epi jete dosye nan li, hashget tèt li pral jwenn sa li bezwen lè l sèvi avèk hashes yo. Pou fè pisin lan aksesib atravè HTTP, ou bezwen kreye lyen senbolik nan yon fason espesyal; sa fèt ak yon sèl kòmand (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). HTTP FilePool tèt li se fichye estatik, kidonk nenpòt ki senp sèvè entènèt ka sèvi li, chaj la sou sèvè a se prèske zewo.

Gras a FilePool, ou ka itilize non sèlman http(s) resous kòm resous baz, men tou pa egzanp,Amazon Glasye.

Apre w fin telechaje backup la nan glasye a, nou jwenn ID Upload li yo epi sèvi ak li kòm yon URL. Pa egzanp:

hashget --submit Glacier_Upload_ID --file /tmp/my-glacier-backup.tar.gz --project glacier --hashserver --expires 2019-09-01

Koulye a, nouvo sovgad (diferansyèl) yo pral baze sou backup sa a epi yo pral pi kout. Apre goudwon ​​debake diffbackup la, nou ka wè sou ki resous li depann de:

hashget --info /tmp/unpacked/ list

epi jis itilize yon script shell pou telechaje tout fichye sa yo soti nan Glacier nan pisin lan epi kouri rekiperasyon nòmal la: hashget -u /tmp/unpacked —pool /tmp/pool

Èske jwèt la vo chandèl la?

Nan ka ki pi senp la, ou pral tou senpleman peye mwens pou sovgad (si ou estoke yo yon kote nan nwaj la pou lajan). Petèt anpil, anpil mwens.

Men, se pa bagay la sèlman. Kantite vire nan bon jan kalite. Ou ka itilize sa a pou jwenn yon amelyorasyon kalite siperyè nan konplo backup ou a. Pou egzanp, depi sovgad nou yo kounye a pi kout, nou ka fè pa chak mwa sovgad, men yo chak jou. Sere yo pa pou sis mwa, tankou anvan, men pou 5 ane. Précédemment, ou estoke li nan depo ralanti men bon mache "frèt" (Glacier), kounye a ou ka estoke li nan depo cho, kote ou ka toujou byen vit telechaje yon backup epi restore li nan minit, pa nan yon jou.

Ou ka ogmante fyab nan depo backup. Si nou sere yo kounye a nan yon sèl etablisman depo, Lè sa a, lè nou diminye volim nan sovgad, nou pral kapab estoke yo nan 2-3 enstalasyon depo epi siviv san doulè si youn nan yo vin domaje.

Ki jan yo eseye epi kòmanse itilize?

Ale nan paj gitlab la https://gitlab.com/yaroslaff/hashget, enstale ak yon sèl kòmand (pip3 install hashget[plugins]) epi jis li epi egzekite demaraj rapid. Mwen panse ke li pral pran 10-15 minit pou fè tout bagay ki senp. Lè sa a, ou ka eseye konprese machin vityèl ou yo, fè dosye sijesyon si sa nesesè pou fè konpresyon an pi fò, jwe ak pisin, yon baz done hachaj lokal yo ak yon sèvè hachaj si w enterese, ak jou kap vini an wè ki gwosè a nan backup la incrémentielle. pral sou tèt yè a.

Sous: www.habr.com

Add nouvo kòmantè