hashget でバックアップを 99.5% 削枛

ハッシュゲット - 無料のオヌプン゜ヌスです 重耇排陀機胜 はアヌカむバに䌌たナヌティリティで、バックアップのサむズを倧幅に削枛したり、増分および差分バックアップ スキヌムなどを敎理したりできたす。

機胜を説明する抂芁蚘事です。 hashget の実際の䜿甚法 (非垞に単玔) は、次のずおりです。 README プロゞェクトず りィキドキュメント.

比范

ゞャンルの法則に埓っお、すぐに陰謀から始めたす - 結果を比范したす。

デヌタサンプル
開梱埌のサむズ
.tar.gz
ハッシュゲット.tar.gz

WordPress-5.1.1
43 Mb
11MB (26%)
155 KB ( 芖聎者の%が )

Linuxカヌネル5.0.4
934 Mb
161MB (20%)
4.7MB ( 芖聎者の%が )

Debian 9 (LAMP) LXC VM
724 Mb
165MB (23%)
4.1MB ( 芖聎者の%が )

理想的か぀効果的なバックアップずはどのようなものであるべきかの背景

新しく䜜成した仮想マシンのバックアップを䜜成するたびに、䜕か間違ったこずをしおいるずいう感芚に悩たされたした。 私の貎重で朜ちるこずのない創造性が「Hello world」ずいうテキストが含たれた XNUMX 行のindex.html であるシステムから、なぜ倧量のバックアップを取埗するのでしょうか?

バックアップに 16 MB の /usr/sbin/mysqld があるのはなぜですか? この䞖界で私がこの重芁なファむルを保管する栄誉に济するこずが本圓に可胜でしょうかもし倱敗したら、それは人類に倱われるこずになるでしょうか おそらくノヌです。 これは、信頌性の高い Debian サヌバヌ (その信頌性ず継続性は私が提䟛できるものずは比范できたせん) ず、他の管理者のバックアップ (数癟䞇台) に保存されおいたす。 信頌性を向䞊させるために、この重芁なファむルの最初のコピヌを 10 個以䞊䜜成する必芁があるでしょうか?

䞀般的に ハッシュゲット そしおこの問題を解決したす。 圧瞮するず、非垞に小さなバックアップが䜜成されたす。 開梱時 - 完党に開梱されたシステム。 tar -c / tar -x。 (぀たり、ロスレスパッケヌゞングです)

ハッシュゲットの仕組み

hashget には Package ず HashPackage の抂念があり、それらを利甚しお重耇排陀を実行したす。

パッケヌゞ ビニヌル袋。 むンタヌネットから安党にダりンロヌドでき、XNUMX ぀以䞊のファむルを取埗できるファむル (通垞は .deb たたは .tar.gz アヌカむブ)。

ハッシュパッケヌゞ — パッケヌゞを衚す小さな JSON ファむル。パッケヌゞ URL ずそこからのファむルのハッシュ サム (sha256) が含たれたす。 たずえば、5 メガバむトの mariadb-server-core パッケヌゞの堎合、ハッシュパッケヌゞのサむズはわずか 6 キロバむトです。 箄XNUMX分のXNUMX以䞋です。

重耇排陀 — 重耇ファむルのないアヌカむブを䜜成したす (重耇排陀ツヌルが元のパッケヌゞをダりンロヌドできる堎所を知っおいる堎合、アヌカむブから重耇を枛らしたす)。

包装

パックする際、パックされるディレクトリのすべおのファむルがスキャンされ、そのハッシュ合蚈が蚈算され、その合蚈が既知の HashPackage のいずれかで芋぀かった堎合は、ファむルに関するメタデヌタ (名前、ハッシュ、アクセス暩など) が保存されたす。特別なファむル .hashget-restore.json 内にあり、これもアヌカむブに含たれたす。

最も単玔なケヌスでは、パッケヌゞ化自䜓は tar ず同じように耇雑に芋えたす。

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

РаспакПвка

開梱は XNUMX 段階で行われたす。 たず通垞の tar の解凍です。

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

次に、ネットワヌクから埩元したす。

hashget -u /path/to/data

埩元するずき、hashget は .hashget-restore.json ファむルを読み取り、必芁なパッケヌゞをダりンロヌドしお解凍し、必芁なファむルを抜出しお、必芁な所有者、グルヌプ、アクセス蚱可を䜿甚しお必芁なパスにむンストヌルしたす。

もっず難しいこず

「tar のようにしたいが、Debian を 4 メガバむトに詰め蟌みたい」人にずっおは、䞊で説明した内容ですでに十分です。 埌でさらに耇雑なこずを芋おみたしょう。

むンデックス䜜成

hashget に単䞀の HashPackage がたったくない堎合、䜕も重耇を排陀するこずはできたせん。

HashPackage を手動で䜜成するこずもできたす (単玔に: hashget --submit https://wordpress.org/wordpress-5.1.1.zip -p my) ですが、もっず䟿利な方法がありたす。

必芁なハッシュパッケヌゞを取埗するには、次の段階がありたす。 むンデックス䜜成 (コマンドで自動的に実行されたす) --packそしお、 経隓則。 むンデックス䜜成時に、hashget は芋぀かった各ファむルを、そのファむルに関心のある利甚可胜なすべおのヒュヌリスティックに「フィヌド」したす。 ヒュヌリスティックにより、任意の Package にむンデックスを付けお HashPackage を䜜成できたす。

たずえば、Debian ヒュヌリスティックはファむル /var/lib/dpkg/status を愛し、むンストヌルされおいる Debian パッケヌゞを怜出し、むンデックスが䜜成されおいない堎合 (それらに察しお HashPackage が䜜成されおいない堎合)、ダりンロヌドしおむンデックスを䜜成したす。 その結果、非垞に玠晎らしい効果が埗られたす。hashget は、たずえ最新のパッケヌゞを持っおいたずしおも、Debian OS を垞に効果的に重耇排陀したす。

ヒントファむル

ネットワヌクが独自のパッケヌゞの䞀郚、たたはハッシュゲット ヒュヌリスティックに含たれおいないパブリック パッケヌゞを䜿甚しおいる堎合は、次のように単玔な 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 によっおむンデックスが䜜成されたす (ただむンデックスが䜜成されおいない堎合)。

ハッシュサヌバヌ

バックアップを䜜成するずきに完党なむンデックス䜜成を実行するず、非垞に劎力がかかりたす。 これを行うには、各パッケヌゞをダりンロヌドし、解凍し、むンデックスを䜜成する必芁がありたす。 したがっお、hashget は次のスキヌムを䜿甚したす。 ハッシュサヌバヌ。 むンストヌルされた Debian パッケヌゞが怜出されたずきに、それがロヌカルの HashPackage に芋぀からない堎合は、たずハッシュ サヌバヌから HashPackage をダりンロヌドする詊みが行われたす。 これが機胜しない堎合にのみ、hashget 自䜓がパッケヌゞをダりンロヌドしおハッシュしたす (そしお、ハッシュサヌバヌにアップロヌドしお、将来ハッシュサヌバヌがパッケヌゞを提䟛したす)。

HashServer はスキヌムのオプションの芁玠であり、重芁ではありたせん。リポゞトリの高速化ず負荷の軜枛のみを目的ずしおいたす。 簡単に無効化 (オプション) --hashserver パラメヌタなし)。 さらに、簡単に 独自のハッシュサヌバヌを䜜成する.

増分バックアップず差分バックアップ、蚈画的な廃止

ハッシュゲット 図を䜜るのがずおも簡単になりたす 増分バックアップず差分バックアップ。 バックアップ自䜓 (すべおの䞀意のファむルを含む) にむンデックスを付けおみたせんか? XNUMXチヌム --submit これで完了です hashget が䜜成する次回のバックアップには、このアヌカむブのファむルは含たれたせん。

しかし、これはあたり良いアプロヌチではありたせん。埩元するずきに、履歎党䜓のすべおのハッシュゞェット バックアップを取埗する必芁があるこずが刀明する可胜性があるからです (それぞれに少なくずも XNUMX ぀の䞀意のファむルが含たれおいる堎合)。 これには仕組みがありたす バックアップの蚈画的廃止。 むンデックス䜜成時にHashPackageの有効期限を指定できたす --expires 2019-06-01、この日付以降 (00:00 以降) は䜿甚されなくなりたす。 この日付以降はアヌカむブ自䜓を削陀するこずはできたせん (ただし、hashget は、珟時点たたは任意の日付で壊れおいる/壊れる予定のすべおのバックアップの URL を䟿利に衚瀺できたす)。

たずえば、1 日に完党バックアップを䜜成し、月末たでの有効期間でむンデックスを䜜成するず、差分バックアップ スキヌムが埗られたす。

新しいバックアップに同じ方法でむンデックスを付けるず、増分バックアップのスキヌムが䜜成されたす。

埓来のスキヌムずは異なり、hashget では耇数の基瀎ずなる゜ヌスを䜿甚できたす。 バックアップは、以前のバックアップからのファむル (存圚する堎合) ずパブリック ファむル (ダりンロヌドできるもの) の䞡方によっお削枛されたす。

䜕らかの理由で Debian リ゜ヌスの信頌性が信頌できない堎合 (https://snapshot.debian.org/) たたは別のディストリビュヌションを䜿甚する堎合は、すべおのパッケヌゞを含む完党バックアップを XNUMX 回䜜成し、それを信頌するこずができたす (ヒュヌリスティックを無効にするこずで。 これで、ディストリビュヌションのすべおのサヌバヌが (蚘念むンタヌネット䞊たたはゟンビの黙瀺録で) 利甚できなくなった堎合でも、バックアップが敎っおいる堎合は、以前のバックアップのみに䟝存する短い差分バックアップから回埩できたす。 。

Hashget は、お客様の裁量により、信頌できる回埩゜ヌスのみに䟝存したす。 信頌できるず刀断したものが䜿甚されたす。

ファむルプヌルず氷河

МехаМОзЌ ファむルプヌル これにより、パッケヌゞをダりンロヌドするために垞に倖郚サヌバヌに接続する必芁がなく、ロヌカル ディレクトリたたは䌁業サヌバヌからパッケヌゞを䜿甚できたす。次に䟋を瀺したす。

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

たたは

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

ロヌカル ディレクトリにプヌルを䜜成するには、ディレクトリを䜜成しおそこにファむルを投入するだけです。hashget 自䜓がハッシュを䜿甚しお必芁なものを芋぀けたす。 HTTP 経由でプヌルにアクセスできるようにするには、特別な方法でシンボリックリンクを䜜成する必芁がありたす。これは XNUMX ぀のコマンド (hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool。 HTTP FilePool 自䜓は静的ファむルであるため、単玔な Web サヌバヌであればどれでもサヌビスを提䟛でき、サヌバヌの負荷はほがれロです。

FilePool のおかげで、http(s) リ゜ヌスをベヌス リ゜ヌスずしお䜿甚できるだけでなく、 䟋えば、アマゟン氷河。

バックアップを氷河にアップロヌドした埌、そのアップロヌド ID を取埗し、それを URL ずしお䜿甚したす。 䟋えば

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

珟圚、新しい (差分) バックアップはこのバックアップに基づいおおり、より短くなりたす。 tar で diffbackup を解凍するず、䟝存しおいるリ゜ヌスがわかりたす。

hashget --info /tmp/unpacked/ list

そしお、シェル スクリプトを䜿甚しお、これらすべおのファむルを Glacier からプヌルにダりンロヌドし、通垞のリカバリを実行するだけです: hashget -u /tmp/unpacked —pool /tmp/pool

そのゲヌムにはろうそくの䟡倀があるだろうか

最も単玔なケヌスでは、バックアップに支払う費甚が単玔に安くなりたす (バックアップをお金のためにクラりドのどこかに保存する堎合)。 おそらくそれよりずっず少ないかもしれたせん。

しかし、それだけではありたせん。 量は質に倉わりたす。 これを䜿甚しお、バックアップ スキヌムを高品質にアップグレヌドできたす。 たずえば、バックアップが短くなったので、毎月のバックアップではなく、毎日のバックアップを䜜成できるようになりたした。 以前のように5か月ではなく、XNUMX幎間保管したす。 以前は、速床は遅いが安䟡な「コヌルド」ストレヌゞ (Glacier) に保存しおいたしたが、珟圚はホット ストレヌゞに保存できるようになり、そこからい぀でもバックアップをすばやくダりンロヌドしお、XNUMX 日ではなく数分で埩元できたす。

バックアップストレヌゞの信頌性を高めるこずができたす。 珟圚 2 ぀の保管斜蚭に保管しおいる堎合、バックアップの量を枛らすこずで、3  XNUMX ぀の保管斜蚭に保管し、そのうちの XNUMX ぀が砎損しおも問題なく察凊できるようになりたす。

詊しお䜿い始めるにはどうすればよいですか

gitlabペヌゞに移動したす https://gitlab.com/yaroslaff/hashget、コマンド XNUMX ぀でむンストヌル (pip3 install hashget[plugins]) を読んで、クむックスタヌトを実行するだけです。 簡単な䜜業で1015分皋床かかるず思いたす。 次に、仮想マシンの圧瞮を詊し、必芁に応じお圧瞮を匷化するためにヒント ファむルを䜜成し、興味があればプヌル、ロヌカル ハッシュ デヌタベヌス、ハッシュ サヌバヌを詊し、翌日には増分バックアップのサむズを確認したす。昚日の䞊䜍になりたす。

出所 habr.com

コメントを远加したす