Ngurangi serep kanthi 99.5% kanthi hashget

hashget - iku free, open source deduplikator minangka sarana sing padha karo arsip sing ngidini sampeyan nyuda ukuran serep kanthi signifikan, uga ngatur skema serep tambahan lan diferensial lan liya-liyane.

Iki minangka artikel ringkesan kanggo njlèntrèhaké fitur. Panggunaan hashget (cukup prasaja) diterangake ing README proyek lan dokumentasi wiki.

Perbandingan

Miturut hukum genre, aku bakal langsung miwiti karo intrik - mbandhingake asil:

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

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

Kernel Linux 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 mburi babagan serep sing becik lan efektif

Saben-saben aku nggawe serep saka mesin virtual anyar digawe, Aku iki Angker dening koyo sing aku nindakake soko salah. Apa aku njaluk serep dibalèkaké saka sistem, ngendi priceless, imperishable kreatifitas sandi siji-baris index.html karo teks "Hello donya"?

Napa ana 16 MB /usr/sbin/mysqld ing serepku? Apa pancene bisa yen ing donya iki aku duwe pakurmatan kanggo nyimpen file penting iki, lan yen aku gagal, iku bakal ilang kanggo manungsa? Paling kamungkinan ora. Iki disimpen ing server debian sing bisa dipercaya (reliabilitas lan wektu aktif sing ora bisa dibandhingake karo sing bisa dakwenehake), uga ing serep (mayuta-yuta wong) saka admin liyane. Apa kita kudu nggawe 10+ salinan 000 file penting iki kanggo nambah linuwih?

Umume hashget lan ngatasi masalah iki. Nalika dikempalken, nggawe serep cilik banget. Nalika unpacking - sistem rampung unpacked, padha karo apa bakal dadi yen tar -c / tar -x. (Ing tembung liyane, iki kemasan lossless)

Cara kerja hashget

hashget duwe konsep Paket lan HashPackage, kanthi bantuan kasebut nindakake deduplikasi.

paket (kantong plastik). File (biasane arsip .deb utawa .tar.gz) sing bisa diundhuh kanthi aman saka Internet, lan saka siji utawa luwih file bisa dipikolehi.

HashPaket - file JSON cilik sing makili Paket, kalebu URL paket lan jumlah hash (sha256) saka file kasebut. Contone, kanggo paket mariadb-server-inti 5 megabyte, ukuran paket hash mung 6 kilobyte. Kurang luwih sewu.

Deduplikasi - nggawe arsip tanpa duplikat file (yen deduplikator ngerti ngendi paket asli bisa diundhuh, nyuda duplikat saka arsip).

Kemasan

Nalika ngemas, kabeh file saka direktori sing dikempalken dipindai, jumlah hash diwilang, lan yen jumlah kasebut ditemokake ing salah sawijining HashPackages sing dikenal, banjur metadata babagan file kasebut (jeneng, hash, hak akses, lsp.) disimpen. ing file khusus .hashget-restore.json, kang uga bakal klebu ing arsip.

Ing kasus sing paling gampang, kemasan dhewe katon ora luwih rumit tinimbang tar:

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

Mbongkar

Unpacking rampung ing rong tahap. Pisanan tar unpacking biasanipun:

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

banjur mulihake saka jaringan:

hashget -u /path/to/data

Nalika mulihake, hashget maca file .hashget-restore.json, ngundhuh paket sing dibutuhake, mbongkar, lan ngekstrak file sing dibutuhake, nginstal ing dalan sing dibutuhake, kanthi pemilik / grup / ijin sing dibutuhake.

Bab sing luwih angel

Apa sing diterangake ing ndhuwur wis cukup kanggo wong sing "pengin kaya tar, nanging ngemas Debianku dadi 4 megabyte." Ayo ndeleng bab sing luwih rumit mengko.

Pengindeksan

Yen hashget ora duwe HashPackage siji, mula ora bakal bisa ngilangi duplikat apa wae.

Sampeyan uga bisa nggawe HashPackage kanthi manual (mung: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), nanging ana cara sing luwih trep.

Kanggo entuk paket hash sing dibutuhake, ana tahapan ngindeks (dieksekusi kanthi otomatis nganggo printah --pack) lan heuristik. Nalika ngindeks, hashget "feed" saben file sing ditemokake kanggo kabeh heuristik kasedhiya sing kasengsem ing. Heuristik banjur bisa ngindeks Paket apa wae kanggo nggawe HashPackage.

Contone, heuristik Debian seneng karo file /var/lib/dpkg/status lan ndeteksi paket debian sing diinstal, lan yen ora diindeks (ora ana HashPackage sing digawe kanggo wong-wong mau), download lan ngindeks. Asil kasebut minangka efek sing apik banget - hashget mesthi bakal nyuda duplikat OS Debian kanthi efektif, sanajan duwe paket paling anyar.

File pitunjuk

Yen jaringan sampeyan nggunakake sawetara paket kepemilikan utawa paket umum sing ora kalebu ing heuristik hashget, sampeyan bisa nambah file petunjuk hashget-hint.json sing prasaja kaya iki:

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

Sabanjure, saben arsip digawe, paket kasebut bakal diindeks (yen durung ana sadurunge), lan file paket bakal dibusak saka arsip. Ora ana program sing dibutuhake, kabeh bisa ditindakake saka vim lan simpen ing saben serep. Elinga yen thanks kanggo pendekatan jumlah hash, yen sawetara file saka paket diganti sacara lokal (contone, file konfigurasi diganti), banjur file sing diganti bakal disimpen ing arsip "kaya" lan ora bakal dipotong.

Yen sawetara paket sampeyan dianyari sacara periodik, nanging owah-owahan ora gedhe banget, sampeyan bisa menehi tandha mung kanggo versi utama. Contone, ing versi 1.0 padha digawe Petunjuk pointing kanggo mypackage-1.0.tar.gz, lan bakal rampung deduplicated, banjur padha dirilis versi 1.1, kang rada beda, nanging Petunjuk ora dianyari. Ora apa-apa. Mung file sing cocog (bisa dibalèkaké) versi 1.0 sing deduplicated.

Heuristik sing ngolah file petunjuk minangka conto sing apik kanggo mangerteni mekanisme internal babagan cara kerja heuristik. Iku mung proses file hashget-hint.json (utawa .hashget-hint.json karo titik) lan nglirwakake kabeh liyane. Saka file iki, nemtokake URL paket sing kudu diindeks, lan hashget ngindeks (yen durung rampung)

HashServer

Iku bakal cukup pegawe-intensif kanggo nindakake indeksasi lengkap nalika nggawe serep. Kanggo nindakake iki, sampeyan kudu ndownload saben paket, unpack, lan indeks. Mulane hashget nggunakake skema karo HashServer. Nalika paket Debian sing diinstal dideteksi, yen ora ditemokake ing HashPackage lokal, nyoba pisanan mung ngundhuh HashPackage saka server hash. Lan mung yen iki ora bisa, hashget dhewe ngundhuh lan hashes paket (lan upload kanggo hashserver, supaya hashserver nyedhiyakake ing mangsa).

HashServer minangka unsur opsional saka skema kasebut, ora kritis, mung kanggo nyepetake lan nyuda beban ing repositori. Gampang dipateni (opsional --hashserver tanpa parameter). Kajaba iku, sampeyan bisa kanthi gampang nggawe hashserver dhewe.

Incremental lan diferensial serep, ngrancang obsolescence

hashget ndadekake gampang banget kanggo nggawe diagram serep tambahan lan diferensial. Napa kita ora ngindeks serep dhewe (karo kabeh file unik)? siji tim --submit lan sampeyan wis rampung! Serep sabanjure sing digawe hashget ora bakal kalebu file saka arsip iki.

Nanging iki dudu pendekatan sing apik banget, amarga bisa uga nalika mulihake, kita kudu narik kabeh serep hashget ing kabeh sejarah (yen saben ngemot paling ora siji file unik). Ana mekanisme kanggo iki ngrancang obsolescence saka serep. Nalika ngindeks, sampeyan bisa nemtokake tanggal kadaluwarsa HashPackage --expires 2019-06-01, lan sawise tanggal iki (saka 00:00), ora bakal digunakake. Arsip kasebut dhewe ora bisa dibusak sawise tanggal kasebut (Sanajan hashget bisa kanthi gampang nuduhake URL kabeh serep sing / bakal bosok saiki utawa ing tanggal apa wae).

Contone, yen kita nggawe serep lengkap ing tanggal 1 lan indeks kanthi umur nganti pungkasan sasi, kita bakal entuk skema serep diferensial.

Yen kita ngindeks serep anyar kanthi cara sing padha, bakal ana skema serep tambahan.

Ora kaya skema tradisional, hashget ngidini sampeyan nggunakake macem-macem sumber dhasar. Serep bakal dikurangi kanthi nyuda file saka serep sadurunge (yen ana) lan file umum (apa sing bisa didownload).

Yen ana alesan, kita ora ngandelake linuwih sumber daya Debian (https://snapshot.debian.org/) utawa nggunakake distribusi liyane, kita mung bisa nggawe serep lengkap sapisan karo kabeh paket, banjur gumantung ing (kanthi mateni heuristik). Saiki, yen kabeh server distribusi kita ora kasedhiya kanggo kita (ing Internet souvenir utawa sajrone kiamat zombie), nanging serep kita wis rampung, kita bisa mbalekake saka serep singkat sing mung gumantung ing serep sadurunge. .

Hashget mung ngandelake sumber pemulihan sing dipercaya miturut kawicaksanan sampeyan. Sing dianggep dipercaya bakal digunakake.

FilePool lan Gletser

Mekanisme FilePool ngidini sampeyan ora terus-terusan ngubungi server eksternal kanggo ndownload paket, nanging nggunakake paket saka direktori lokal utawa server perusahaan, contone:

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

utawa

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

Kanggo nggawe blumbang ing direktori lokal, sampeyan mung kudu nggawe direktori lan uncalan file menyang, hashget dhewe bakal nemokake apa perlu nggunakake hash. Kanggo nggawe blumbang bisa diakses liwat HTTP, sampeyan kudu nggawe symlinks kanthi cara khusus; iki rampung karo siji printah (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). HTTP FilePool dhewe minangka file statis, mula server web sing gampang bisa dilayani, beban ing server meh nol.

Thanks kanggo FilePool, sampeyan ora mung bisa nggunakake sumber http (s) minangka sumber daya dhasar, nanging uga Tuladhane, Gletser Amazon.

Sawise ngunggah serep menyang gletser, kita entuk ID Upload lan digunakake minangka URL. Tuladhane:

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

Saiki serep anyar (diferensial) bakal adhedhasar serep iki lan bakal luwih cendhek. Sawise tar mbongkar diffbackup, kita bisa ndeleng sumber daya apa sing diandelake:

hashget --info /tmp/unpacked/ list

lan mung nggunakake skrip cangkang kanggo ndownload kabeh file kasebut saka Glacier menyang blumbang lan mbukak pemulihan biasanipun: hashget -u /tmp/unpacked —pool /tmp/pool

Apa game worth lilin?

Ing kasus paling gampang, sampeyan mung bakal mbayar kurang kanggo serep (yen sampeyan nyimpen ing endi wae ing méga kanggo dhuwit). Mungkin akeh, kurang.

Nanging ora mung kuwi. Kuantitas dadi kualitas. Sampeyan bisa nggunakake iki kanggo njaluk upgrade kualitas dhuwur kanggo rencana serep. Contone, amarga serep saiki luwih cendhek, kita ora bisa nggawe serep saben wulan, nanging saben dina. Simpen ora nem sasi, kaya sadurunge, nanging 5 taun. Sadurunge, sampeyan disimpen ing panyimpenan "kadhemen" alon nanging murah (Glacier), saiki sampeyan bisa nyimpen ing panyimpenan panas, saka ngendi sampeyan bisa kanthi cepet ngundhuh serep lan mulihake ing menit, ora ing dina.

Sampeyan bisa nambah linuwih saka panyimpenan serep. Yen saiki kita nyimpen ing siji fasilitas panyimpenan, banjur kanthi ngurangi volume serep, kita bakal bisa nyimpen ing 2-3 fasilitas panyimpenan lan urip painlessly yen salah siji bakal rusak.

Kepiye cara nyoba lan miwiti nggunakake?

Pindhah menyang kaca gitlab https://gitlab.com/yaroslaff/hashget, instal nganggo siji printah (pip3 install hashget[plugins]) lan mung maca lan nglakokake wiwitan cepet. Aku bakal njupuk 10-15 menit kanggo nindakake kabeh prasaja. Banjur sampeyan bisa nyoba kanggo compress mesin virtual, nggawe file pitunjuk yen perlu kanggo nggawe kompresi kuwat, muter karo pools, database hash lokal lan server hash yen kasengsem, lan dina sabanjuré ndeleng apa ukuran serep incremental bakal ing ndhuwur wingi.

Source: www.habr.com

Add a comment