Ngurangan cadangan ku 99.5% kalawan hashget

hashget - éta bébas, opera-sourced deduplikator mangrupikeun utilitas anu sami sareng arsip anu ngamungkinkeun anjeun ngirangan ukuran cadangan sacara signifikan, ogé ngatur skéma cadangan incremental sareng diferensial sareng seueur deui.

Ieu mangrupikeun artikel tinjauan pikeun ngajelaskeun fitur. Pamakéan sabenerna hashget (cukup basajan) digambarkeun dina README proyék jeung dokuméntasi wiki.

pabandingan

Numutkeun hukum genre, kuring bakal langsung mimitian ku intrik - ngabandingkeun hasilna:

Sampel data
ukuran unpacked
.tar.gz
hashget.tar.gz

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

Linux Ubuntu kernel 5.0.4
934 Mb
161 Mb (20%)
4.7 Mb ( 0.5% )

Debian 9 (LAMPU) LXC VM
724 Mb
165 Mb (23%)
4.1 Mb ( 0.5% )

Latar ngeunaan naon anu kedah janten cadangan anu idéal sareng efektif

Unggal waktos kuring nyieun cadangan mesin virtual anyar dijieun, Kuring ieu haunted ku rarasaan yen kuring ngalakukeun lepat. Naha kuring meunang cadangan hefty tina sistem, dimana di hargaan, kreativitas imperishable kuring mangrupa index.html hiji-garis kalawan téks "Halo dunya"?

Naha aya 16 MB /usr/sbin/mysqld dina cadangan kuring? Naha leres-leres mungkin di dunya ieu kuring ngagaduhan kahormatan pikeun ngajaga file penting ieu, sareng upami kuring gagal, éta bakal leungit ku umat manusa? Paling dipikaresep euweuh. Éta disimpen dina server debian anu tiasa dipercaya (reliabilitas sareng uptime anu teu tiasa dibandingkeun sareng naon anu kuring tiasa nyayogikeun), ogé dina cadangan (jutaan di antarana) tina admin anu sanés. Naha urang leres-leres kedah nyiptakeun 10+ 000 salinan file penting ieu pikeun ningkatkeun reliabilitas?

Umumna hashget jeung solves masalah ieu. Nalika dipak, éta nyiptakeun cadangan anu alit pisan. Nalika unpacking - sistem sagemblengna unpacked, sarupa jeung naon eta bakal lamun tar -c / tar -x. (Dina basa sanés, ieu mangrupikeun bungkusan anu teu rugi)

Kumaha hashget jalan

hashget gaduh konsép Paket sareng HashPackage, kalayan bantosanana ngalaksanakeun deduplikasi.

paket (kantong plastik). A file (biasana mangrupa .deb atanapi .tar.gz arsip) nu bisa aman diundeur ti Internét, sarta ti mana hiji atawa leuwih file bisa diala.

HashPackage - file JSON leutik anu ngagambarkeun Paket, kalebet URL pakét sareng jumlah hash (sha256) file ti dinya. Contona, pikeun 5 megabyte mariadb-server-core pakét, ukuran hashpackage ngan 6 kilobyte. Kurang sarébu kali.

Deduplikasi - nyiptakeun arsip tanpa duplikat file (upami deduplikator terang dimana pakét asli tiasa diunduh, éta ngirangan duplikat tina arsip).

Bungkusan

Nalika packing, sadaya file tina diréktori anu dipak diseken, jumlah hashna diitung, sareng upami jumlahna dipendakan dina salah sahiji HashPackages anu dipikanyaho, maka metadata ngeunaan file (ngaran, hash, hak aksés, jsb) disimpen. dina file husus .hashget-restore.json, nu ogé bakal kaasup kana arsip.

Dina kasus pangbasajanna, bungkusan sorangan katingalina henteu langkung rumit tibatan tar:

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

Ngabongkar

Unpacking dipigawé dina dua tahap. Mimiti ngabongkar tar biasa:

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

teras balikkeun tina jaringan:

hashget -u /path/to/data

Nalika malikkeun, hashget maca file .hashget-restore.json, ngundeur bungkusan diperlukeun, unpacks aranjeunna, sarta extracts file perlu, masang aranjeunna dina jalur diperlukeun, kalawan diperlukeun boga / grup / idin.

Hal-hal anu langkung hese

Anu dijelaskeun di luhur parantos cekap pikeun anu "hoyong sapertos tar, tapi pikeun ngabungkus Debian kuring kana 4 megabyte." Hayu urang nempo hal nu leuwih kompleks engké.

Indexing

Upami hashget henteu gaduh HashPackage tunggal, maka éta henteu tiasa nga-deduplikat nanaon.

Anjeun oge tiasa ngadamel HashPackage sacara manual (saukur: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), tapi aya cara anu langkung merenah.

Pikeun kéngingkeun pakét hash anu diperyogikeun, aya tahapan indexing (eta otomatis dieksekusi ku paréntah --pack) jeung heuristik. Nalika indexing, hashget "eupan" unggal file kapanggih ka sadaya heuristik sadia nu museurkeun eta. Heuristik teras tiasa ngindeks Paket naon waé pikeun nyiptakeun HashPackage.

Salaku conto, heuristik Debian resep kana file /var/lib/dpkg/status sareng ngadeteksi bungkusan debian anu dipasang, sareng upami aranjeunna henteu diindeks (teu aya HashPackage anu diciptakeun pikeun aranjeunna), unduh sareng indéksana. Hasilna nyaéta éfék anu saé pisan - hashget bakal sacara efektif ngahapus Debian OSes, sanaos aranjeunna gaduh pakét panganyarna.

File petunjuk

Upami jaringan anjeun nganggo sababaraha pakét proprietary anjeun atanapi pakét umum anu henteu kalebet dina heuristik hashget, anjeun tiasa nambihan file hint hashget-hint.json saderhana sapertos kieu:

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

Salajengna, unggal waktos arsip dijieun, pakét bakal indéks (upami teu acan saméméhna), sarta file pakét bakal deduplicated tina arsip. Teu aya program anu diperyogikeun, sadayana tiasa dilakukeun tina vim sareng simpen dina unggal cadangan. Punten dicatet yén berkat pendekatan jumlah hash, upami sababaraha file tina pakét dirobih sacara lokal (contona, file konfigurasi dirobih), maka file anu dirobih bakal disimpen dina arsip "sakumaha" sareng moal dipotong.

Lamun sababaraha pakét sorangan diropéa périodik, tapi parobahanana teu pisan badag, anjeun tiasa Hint ukur keur versi utama. Contona, dina versi 1.0 aranjeunna dijieun hint a nunjuk ka mypackage-1.0.tar.gz, sarta eta bakal lengkep deduplicated, lajeng aranjeunna ngarilis versi 1.1, nu rada béda, tapi hint teu diropéa. Henteu kunanaon. Ngan file anu cocog (tiasa dibalikeun ka) versi 1.0 anu di-deduplicated.

Heuristik anu ngolah file hint mangrupikeun conto anu saé pikeun ngartos mékanisme internal kumaha heuristik jalan. Éta ngan ukur ngolah file hashget-hint.json (atanapi .hashget-hint.json kalayan titik) sareng teu malire sadayana anu sanés. Tina file ieu, éta nangtukeun URL pakét mana anu kedah diindéks, sareng hashget ngindeks éta (upami éta henteu acan dilakukeun)

HashServer

Ieu bakal cukup kuli-intensif pikeun ngalakukeun indexing pinuh nalika nyieun cadangan. Jang ngalampahkeun ieu, anjeun kudu ngundeur unggal pakét, ngabongkar eta, sarta indéks eta. Kituna hashget ngagunakeun skéma kalawan HashServer. Nalika pakét Debian anu dipasang dideteksi, upami henteu kapendak dina HashPackage lokal, usaha munggaran dilakukeun pikeun ngaunduh HashPackage tina server Hash. Sarta ngan lamun ieu teu dianggo, hashget sorangan ngundeur tur hashes pakét (jeung unggah ka hashserver, ku kituna hashserver nyadiakeun eta dina mangsa nu bakal datang).

HashServer mangrupikeun unsur pilihan tina skéma, henteu kritis, éta ngan ukur pikeun nyepetkeun sareng ngirangan beban dina repositori. Gampang ditumpurkeun (opsional --hashserver tanpa parameter). Sajaba ti éta, anjeun bisa kalayan gampang nyieun hashserver sorangan.

Incremental jeung diferensial cadangan, rencanana obsolescence

hashget ngajadikeun eta pisan gampang nyieun diagram a cadangan Incremental jeung diferensial. Naha urang henteu indéks cadangan urang sorangan (sareng sadaya file unik urang)? Hiji tim --submit tur anjeun geus rengse! Cadangan salajengna anu didamel hashget moal kalebet file tina arsip ieu.

Tapi ieu sanés pendekatan anu saé, sabab sigana nalika ngabalikeun deui urang kedah narik sadaya cadangan hashget dina sadaya sajarah (upami masing-masing ngandung sahenteuna hiji file unik). Aya mékanisme pikeun ieu rencanana obsolescence of cadangan. Nalika ngindeks, anjeun tiasa netepkeun tanggal béakna HashPackage --expires 2019-06-01, sareng saatos tanggal ieu (ti 00:00), éta moal dianggo. Arsip sorangan henteu tiasa dipupus saatos tanggal ieu (Sanaos hashget tiasa nunjukkeun URL sadaya cadangan anu aya/bakal ruksak dina waktos ayeuna atanapi dina tanggal naon waé).

Salaku conto, upami urang ngadamel cadangan lengkep dina tanggal 1 sareng ngindeks éta kalayan umur hirup dugi ka akhir bulan, urang bakal nampi skéma cadangan diferensial.

Lamun urang indéks cadangan anyar dina cara nu sarua, bakal aya skéma cadangan Incremental.

Beda sareng skéma tradisional, hashget ngamungkinkeun anjeun ngagunakeun sababaraha sumber dasar. Cadangan bakal dikirangan ku cara ngirangan file tina cadangan sateuacana (upami aya) sareng file umum (naon anu tiasa diunduh).

Upami kusabab sababaraha alesan kami henteu percanten kana réliabilitas sumberdaya Debian (https://snapshot.debian.org/) atanapi nganggo distribusi anu sanés, urang ngan saukur tiasa ngadamel cadangan lengkep sakali sareng sadaya bungkusan, teras ngandelkeunana (ku nganonaktipkeun heuristik). Ayeuna, upami sadaya pangladén distribusi kami tétéla henteu sayogi pikeun kami (dina internét souvenir atanapi salami kiamat zombie), tapi cadangan kami leres-leres, urang tiasa pulih tina cadangan béda pondok anu ngan ukur ngandelkeun cadangan kami anu baheula. .

Hashget ngan ukur ngandelkeun sumber pamulihan anu dipercaya ku kawijaksanaan ANDA. Anu anjeun anggap dipercaya bakal dianggo.

FilePool jeung glacier

lantaran make mesin FilePool ngidinan Anjeun pikeun teu terus-terusan ngahubungan server éksternal pikeun ngundeur bungkusan, tapi ngagunakeun pakét ti diréktori lokal atawa server perusahaan, contona:

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

atawa

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

Pikeun ngadamel kolam renang dina diréktori lokal, anjeun ngan ukur kedah nyiptakeun diréktori sareng ngalungkeun file kana éta, hashget nyalira bakal mendakan naon anu diperyogikeun nganggo hashes. Pikeun ngajantenkeun kolam renang tiasa diaksés via HTTP, anjeun kedah nyiptakeun symlink ku cara anu khusus; ieu dilakukeun ku hiji paréntah (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). HTTP FilePool sorangan nyaéta file statik, ku kituna sagala web server basajan bisa ngawula ka, beban dina server ampir enol.

Hatur nuhun kana FilePool, anjeun tiasa nganggo sanés ngan ukur sumber http (s) salaku sumber dasar, tapi ogé Salaku conto,Amazon glacier.

Saatos unggah cadangan ka glacier, kami nampi ID Unggah na sareng dianggo salaku URL. Salaku conto:

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

Ayeuna cadangan anyar (diferensial) bakal dumasar kana cadangan ieu sareng bakal langkung pondok. Saatos tar ngabongkar diffbackup, urang tiasa ningali sumber daya anu diandelkeun:

hashget --info /tmp/unpacked/ list

sareng nganggo skrip cangkang pikeun ngaunduh sadaya file ieu ti Glacier ka kolam renang sareng ngajalankeun pamulihan biasa: hashget -u /tmp/unpacked —pool /tmp/pool

Naha kaulinan patut lilin?

Dina kasus pangbasajanna, anjeun ngan saukur bakal mayar kirang kanggo cadangan (upami anjeun nyimpen aranjeunna dina awan pikeun artos). Meureun loba, leuwih saeutik.

Tapi éta sanés hiji-hijina hal. Kuantitas robah jadi kualitas. Anjeun tiasa nganggo ieu pikeun kéngingkeun pamutahiran kualitas luhur kana skéma cadangan anjeun. Contona, saprak cadangan urang ayeuna leuwih pondok, urang teu bisa nyieun cadangan bulanan, tapi leuwih poean. Simpen aranjeunna henteu genep bulan, sapertos sateuacana, tapi salami 5 taun. Saméméhna, anjeun disimpen dina slow tapi mirah "tiis" gudang (Glacier), ayeuna anjeun bisa nyimpen eta dina gudang panas, ti mana anjeun salawasna bisa gancang ngundeur cadangan tur malikkeun eta dina menit, teu dina sapoé.

Anjeun tiasa ningkatkeun reliabilitas panyimpenan cadangan. Upami urang ayeuna nyimpen éta dina hiji fasilitas panyimpen, teras ku ngirangan volume cadangan, urang bakal tiasa nyimpen éta dina 2-3 fasilitas panyimpen sareng salamet tanpa nyeri upami salah sahijina ruksak.

Kumaha coba sareng mimitian nganggo?

Pindah ka halaman gitlab https://gitlab.com/yaroslaff/hashget, pasang nganggo hiji paréntah (pip3 install hashget[plugins]) sareng ngan maca sareng laksanakeun gancang-gancang. Jigana bakal butuh 10-15 menit pikeun ngalakukeun sagala hal basajan. Teras anjeun tiasa nyobian ngompres mesin virtual anjeun, ngadamel file petunjuk upami diperyogikeun pikeun ngajantenkeun komprési langkung kuat, ulin sareng pools, database hash lokal sareng server hash upami anjeun resep, sareng énjing ningali naon ukuran cadangan incremental. bakal di luhur kamari.

sumber: www.habr.com

Tambahkeun komentar