hashget ашиглан нөөцлөлтийг 99.5%-иар бууруул

hashget - энэ нь үнэ төлбөргүй, нээлттэй эх сурвалж юм хуулбарлагч Энэ нь архивлагчтай төстэй хэрэгсэл бөгөөд нөөцлөлтийн хэмжээг мэдэгдэхүйц багасгах, мөн нэмэлт болон дифференциал нөөцлөх схемүүдийг зохион байгуулах гэх мэт.

Энэ бол онцлог шинж чанаруудыг тайлбарлах тойм нийтлэл юм. Hashget-ийн бодит хэрэглээг (маш энгийн) тайлбарласан болно README төсөл болон вики баримт бичиг.

Харьцуулалт

Төрөл бүрийн хуулийн дагуу би үр дүнг харьцуулж, сонирхлоос шууд эхэлнэ.

Өгөгдлийн дээж
задалсан хэмжээ
.tar.gz
hashget.tar.gz

WordPress-5.1.1
43 Mb
11 Мб (26%)
155 Кб ( 0.3% )

Линуксийн цөм 5.0.4
934 Mb
161 Мб (20%)
4.7 Мб ( 0.5% )

Debian 9 (LAMP) LXC VM
724 Mb
165 Мб (23%)
4.1 Мб ( 0.5% )

Хамгийн тохиромжтой, үр дүнтэй нөөцлөлт ямар байх ёстой талаар суурь мэдээлэл

Шинээр бий болсон виртуал машиныг нөөцлөх болгондоо би ямар нэг буруу зүйл хийж байна гэсэн бодолд автдаг байсан. Миний үнэлж баршгүй, мөхөшгүй бүтээлч чадвар бол "Сайн уу ертөнц" гэсэн тексттэй нэг мөрт index.html байдаг системээс би яагаад асар их нөөц хуулбарыг авдаг вэ?

Яагаад миний нөөцөд 16 MB /usr/sbin/mysqld байгаа вэ? Энэ дэлхий дээр надад энэ чухал файлыг хадгалах нэр төрийн хэрэг байгаа бөгөөд хэрэв би бүтэлгүйтвэл энэ нь хүн төрөлхтөнд алдагдах боломжтой гэж үү? Үгүй байх магадлалтай. Энэ нь өндөр найдвартай дебиан серверүүд (найдвартай байдал, ажиллах хугацаа нь миний өгч чадах зүйлтэй харьцуулах боломжгүй), мөн бусад админуудын нөөцлөлтөд (тэдгээрийн сая сая) хадгалагддаг. Найдвартай байдлыг сайжруулахын тулд бид энэ чухал файлын 10+ 000-р хуулбарыг үүсгэх шаардлагатай юу?

Ер нь ийм байдаг hashget мөн энэ асуудлыг шийддэг. Савласан үед энэ нь маш жижиг нөөцлөлт үүсгэдэг. Савыг задлах үед - бүрэн задалсан систем, хэрэв энэ нь ямар байх байсантай төстэй tar -c / tar -x. (Өөрөөр хэлбэл энэ нь алдагдалгүй савлагаа юм)

Хэшгэт хэрхэн ажилладаг

hashget нь Package болон HashPackage гэсэн ойлголттой бөгөөд тэдгээрийн тусламжтайгаар давхардал арилгадаг.

Багц (гялгар уут). Интернэтээс найдвартай татаж авах боломжтой файл (ихэвчлэн .deb эсвэл .tar.gz архив) бөгөөд нэг буюу хэд хэдэн файл авч болно.

HashPackage — багцын URL болон түүнээс авсан файлуудын хэш нийлбэр (sha256) зэрэг багцыг төлөөлөх жижиг JSON файл. Жишээлбэл, 5 мегабайтын mariadb-server-core багцын хувьд hashpackage хэмжээ нь ердөө 6 килобайт байна. Ойролцоогоор мянга дахин бага.

Хувилбар - давхардсан файлгүй архив үүсгэх (хэрэв хуулбарлагч нь анхны багцыг хаанаас татаж авах боломжтойг мэддэг бол архиваас давхардсан файлуудыг багасгадаг).

Сав баглаа боодол

Савлах үед савлаж буй лавлахаас бүх файлыг сканнердаж, тэдгээрийн хэш нийлбэрийг тооцож, хэрэв нийлбэр нь мэдэгдэж буй HashPackages-ийн аль нэгэнд олдвол файлын тухай мета өгөгдөл (нэр, хэш, нэвтрэх эрх гэх мэт) хадгалагдана. .hashget-restore.json тусгай файлд, мөн архивт оруулах болно.

Хамгийн энгийн тохиолдолд сав баглаа боодол нь давирхайгаас илүү төвөгтэй харагддаггүй.

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

Багцыг задалж байна

Савыг задлах ажлыг хоёр үе шаттайгаар гүйцэтгэдэг. Эхлээд ердийн давирхайг задлах:

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

Дараа нь сүлжээнээс сэргээх:

hashget -u /path/to/data

Сэргээх үед hashget нь .hashget-restore.json файлыг уншиж, шаардлагатай багцуудыг татаж аваад, задалж, шаардлагатай файлуудыг задалж, шаардлагатай замд суулгаж, шаардлагатай эзэмшигч/бүлэг/зөвшөөрөл авдаг.

Илүү хэцүү зүйлүүд

Дээр тайлбарласан зүйл бол "үүнийг давирхай шиг хүсч байгаа, гэхдээ миний Debian-ыг 4 мегабайт болгох" хүмүүст хангалттай юм. Дараа нь илүү төвөгтэй зүйлсийг харцгаая.

Индексжүүлж байна

Хэрэв hashget-д нэг ч HashPackage байхгүй байсан бол энэ нь юуг ч хуулбарлах боломжгүй болно.

Та мөн HashPackage-ийг гараар үүсгэж болно (зүгээр л: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my), гэхдээ илүү тохиромжтой арга бий.

Шаардлагатай hashpackage авахын тулд шат байдаг индексжүүлэх (энэ нь тушаалаар автоматаар гүйцэтгэгддэг --pack) болон эвристик. Индексжүүлэх үед hashget нь олсон файл бүрийг сонирхож буй бүх эвристик дээр "тэжээдэг". Хэвристик нь HashPackage үүсгэхийн тулд дурын багцыг индексжүүлж болно.

Жишээлбэл, Debian эвристик нь /var/lib/dpkg/status файлд дуртай бөгөөд суулгасан debian багцуудыг илрүүлдэг бөгөөд хэрэв тэдгээр нь индексжүүлээгүй бол (тэдгээрт зориулж HashPackage үүсгээгүй) тэдгээрийг татаж аваад индексжүүлдэг. Үр дүн нь маш сайхан үр нөлөө юм - hashget нь хамгийн сүүлийн үеийн багцтай байсан ч Debian үйлдлийн системүүдийг үр дүнтэйгээр хуулбарлах болно.

Санамж файлууд

Хэрэв таны сүлжээ таны өмчлөлийн багц эсвэл hashget heuristics-д ороогүй нийтийн багцыг ашигладаг бол та түүнд дараах байдлаар энгийн hashget-hint.json зөвлөмж файлыг нэмж болно:

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

Дараа нь архив үүсгэх бүрт багцыг индексжүүлж (хэрэв өмнө нь хийгээгүй бол), багц файлуудыг архиваас хуулбарлах болно. Ямар ч програмчлал шаардлагагүй, бүх зүйлийг vim-ээс хийж, нөөц бүрд хадгалах боломжтой. Хэш нийлбэр аргын ачаар багцын зарим файлыг дотооддоо өөрчилсөн бол (жишээлбэл, тохиргооны файл өөрчлөгдсөн) өөрчлөгдсөн файлууд архивт "байгаагаар нь" хадгалагдах бөгөөд таслагдахгүй гэдгийг анхаарна уу.

Хэрэв таны зарим багцууд үе үе шинэчлэгдэж байгаа боловч өөрчлөлт нь тийм ч том биш бол та зөвхөн үндсэн хувилбаруудын талаар хэлж болно. Жишээлбэл, 1.0 хувилбар дээр тэд mypackage-1.0.tar.gz руу чиглэсэн зөвлөмж хийсэн бөгөөд үүнийг бүрэн хуулбарлах болно, дараа нь тэд 1.1 хувилбарыг гаргасан бөгөөд энэ нь арай өөр боловч зөвлөмж шинэчлэгдээгүй байна. Зүгээр дээ. Зөвхөн 1.0 хувилбарт таарах (сэргээх боломжтой) файлууд давхардсан байна.

Санамж файлыг боловсруулдаг эвристик нь эвристик хэрхэн ажилладаг дотоод механизмыг ойлгох сайн жишээ юм. Энэ нь зөвхөн hashget-hint.json файлуудыг (эсвэл .hashget-hint.json-г цэгтэй) боловсруулдаг бөгөөд бусад бүх файлыг үл тоомсорлодог. Энэ файлаас аль багцын URL-г индексжүүлэх ёстойг тодорхойлж, hashget үүнийг индексжүүлнэ (хэрэв үүнийг хийгээгүй бол)

HashServer

Нөөцлөлт үүсгэх үед бүрэн индексжүүлэлтийг хийх нь маш их хөдөлмөр шаарддаг. Үүнийг хийхийн тулд багц бүрийг татаж аваад задлах, индексжүүлэх шаардлагатай. Тиймээс hashget нь схемийг ашигладаг HashServer. Суулгасан Debian багц илэрсэн үед хэрэв энэ нь орон нутгийн HashPackage-д олдохгүй бол эхлээд HashPackage-ийг хэш серверээс татаж авах оролдлого хийдэг. Хэрэв энэ нь ажиллахгүй бол hashget өөрөө багцыг татаж аваад хэш болгодог (мөн үүнийг hashserver рүү байршуулснаар hashserver үүнийг ирээдүйд өгөх болно).

HashServer нь схемийн нэмэлт элемент бөгөөд чухал биш бөгөөд зөвхөн репозиторын ачааллыг хурдасгах, багасгахад үйлчилдэг. Амархан идэвхгүй болно (заавал биш --hashserver параметргүй). Үүнээс гадна, та амархан чадна өөрийн hashserver хийх.

Өсөн нэмэгдэж буй болон дифференциал нөөцлөлт, төлөвлөсөн хуучирсан

hashget диаграмм гаргахад маш хялбар болгодог нэмэгдэл ба дифференциал нөөцлөлт. Бид яагаад нөөц хуулбараа (бүх өвөрмөц файлуудтай) индексжүүлдэггүй юм бэ? Нэг баг --submit тэгээд та дууслаа! Hashget-ийн дараагийн нөөцлөлтөд энэ архивын файлууд орохгүй.

Гэхдээ энэ нь тийм ч сайн арга биш, учир нь сэргээх үед бид бүх түүхэн дэх бүх hashget нөөцлөлтийг татах шаардлагатай болж магадгүй юм (хэрэв тус бүр нь дор хаяж нэг өвөрмөц файл агуулсан бол). Үүний механизм бий нөөцлөлтийн төлөвлөсөн хуучирсан. Индексжүүлэхдээ та HashPackage-ийн дуусах хугацааг зааж өгч болно --expires 2019-06-01, мөн энэ өдрөөс хойш (00:00 цагаас) үүнийг ашиглахгүй. Энэ огнооноос хойш архивыг өөрөө устгах боломжгүй (Хэдийгээр hashget нь яг одоо эсвэл ямар ч өдөр муудсан бүх нөөцлөлтүүдийн URL-г хялбархан харуулах боломжтой).

Жишээлбэл, хэрэв бид 1-нд бүрэн нөөцлөлт хийж, сарыг дуустал насан туршдаа индексжүүлбэл дифференциал нөөцийн схемийг авах болно.

Хэрэв бид шинэ нөөцлөлтийг ижил аргаар индексжүүлбэл өсөн нэмэгдэж буй нөөцлөлтүүдийн схем байх болно.

Уламжлалт схемүүдээс ялгаатай нь hashget нь олон үндсэн эх сурвалжийг ашиглах боломжийг олгодог. Өмнөх нөөцлөлтөөс (хэрэв байгаа бол) болон нийтийн файлууд (татаж авах боломжтой) файлуудыг багасгах замаар нөөцлөлтийг багасгах болно.

Хэрэв бид ямар нэг шалтгааны улмаас Debian нөөцийн найдвартай байдалд итгэхгүй байгаа бол (https://snapshot.debian.org/) эсвэл өөр түгээлт ашигладаг бол бид зүгээр л нэг удаа бүх багцыг бүрэн нөөцлөж, дараа нь түүн дээр найдаж болно (эвристикийг идэвхгүй болгох замаар). Одоо, хэрэв манай түгээлтийн бүх серверүүд бидэнд боломжгүй бол (бэлэг дурсгалын интернет дээр эсвэл зомбигийн апокалипсисийн үед) бидний нөөцлөлтүүд хэвийн байгаа бол бид зөвхөн өмнөх нөөцлөлтөд тулгуурласан аливаа богино дифференциал нөөцөөс сэргээх боломжтой. .

Hashget нь зөвхөн ТАНЫ үзэмжээр найдвартай сэргээх эх сурвалжид тулгуурладаг. Таны найдвартай гэж үзсэнийг ашиглах болно.

FilePool болон Glacier

Механизм FilePool Багцуудыг татаж авахын тулд гадны серверүүдтэй байнга холбогдож болохгүй, харин локал лавлах эсвэл корпорацийн серверээс багцуудыг ашиглах боломжийг танд олгоно, жишээлбэл:

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

буюу

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

Орон нутгийн лавлахад сан үүсгэхийн тулд та лавлах үүсгээд түүнд файл оруулахад л хангалттай, hashget өөрөө хэш ашиглан хэрэгтэй зүйлээ олох болно. Усан санг HTTP-ээр дамжуулан ашиглах боломжтой болгохын тулд та тусгай аргаар тэмдэгт холбоос үүсгэх хэрэгтэй бөгөөд үүнийг нэг тушаалаар гүйцэтгэдэг (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool). HTTP FilePool нь өөрөө статик файлууд тул ямар ч энгийн вэб сервер үүнд үйлчлэх боломжтой, сервер дээрх ачаалал бараг тэг байна.

FilePool-ийн ачаар та зөвхөн http(s) нөөцийг үндсэн нөөц болгон ашиглахаас гадна бас ашиглах боломжтой Жишээ нь, Амазоны мөсөн гол.

Мөсөн гол руу нөөцлөлтийг байршуулсны дараа бид түүний Байршуулах ID-г авч URL болгон ашигладаг. Жишээлбэл:

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

Одоо шинэ (дифференциал) нөөцлөлтүүд нь энэ нөөцлөлт дээр суурилж, богино байх болно. Diffbackup-г tar задалсны дараа бид ямар нөөцөд тулгуурлаж байгааг харж болно.

hashget --info /tmp/unpacked/ list

зүгээр л бүрхүүлийн скрипт ашиглан эдгээр бүх файлыг Glacier-аас усан сан руу татаж аваад ердийн сэргээх ажиллагааг ажиллуулаарай: hashget -u /tmp/unpacked —pool /tmp/pool

Тоглоом нь лааны үнэ цэнэтэй юу?

Хамгийн энгийн тохиолдолд та нөөцлөлтөнд бага мөнгө төлөх болно (хэрэв та тэдгээрийг үүлэн дотор хаа нэгтээ мөнгөөр ​​хадгалвал). Магадгүй их, хамаагүй бага.

Гэхдээ энэ нь цорын ганц зүйл биш юм. Тоо хэмжээ чанар болж хувирдаг. Та үүнийг ашиглан нөөцлөх схемээ өндөр чанартай шинэчлэх боломжтой. Жишээлбэл, бидний нөөцлөлтүүд богиноссон тул бид сар бүр биш, харин өдөр бүр нөөцлөлт хийх боломжтой. Тэднийг өмнөх шигээ зургаан сар биш, харин 5 жил хадгална. Өмнө нь та үүнийг удаан боловч хямд "хүйтэн" агуулахад (Мөсөн гол) хадгалдаг байсан бол одоо та үүнийг халуун хадгалах санд хадгалах боломжтой бөгөөд тэндээс нөөцлөлтийг хурдан татаж аваад өдөрт биш хэдэн минутын дотор сэргээх боломжтой.

Та нөөц хадгалах сангийн найдвартай байдлыг нэмэгдүүлэх боломжтой. Одоогоор нэг агуулахад хадгалж байгаа бол нөөцийн хэмжээг бууруулснаар 2-3 агуулахад хадгалж, аль нэг нь эвдэрсэн тохиолдолд өвдөлтгүй амьд үлдэх боломжтой.

Хэрхэн оролдож, ашиглаж эхлэх вэ?

gitlab хуудас руу очно уу https://gitlab.com/yaroslaff/hashget, нэг тушаалаар суулгах (pip3 install hashget[plugins]) болон зүгээр л хурдан эхлүүлэхийг уншиж, хэрэгжүүлээрэй. Бүх энгийн зүйлсийг хийхэд 10-15 минут шаардлагатай гэж бодож байна. Дараа нь та виртуал машинуудаа шахаж, шахалтыг илүү хүчтэй болгохын тулд шаардлагатай бол зөвлөмж файлуудыг хийж, бассейн, локал хэш мэдээллийн сан, хэш сервертэй тоглож, дараагийн өдөр нь өсөн нэмэгдэж буй нөөцлөлтийн хэмжээг харах боломжтой. өчигдрийн орой дээр байх болно.

Эх сурвалж: www.habr.com

сэтгэгдэл нэмэх