LINUX.ORG.RU
ФорумAdmin

Оцените архиватор (дедупликатор) hashget для бэкапов. (архив менее 1%)

 , , , ,


5

1

Привет!

Поглядите пожалуйста мой новый «велосипед» - дедупликатор hashget. Начнем сразу с интриги:

Сравнение

Data sampleunpacked size.tar.gzhashget .tar.gz
Wordpress-5.1.143 Mb11 Mb ( 26% )155 Kb ( 0.3% )
Linux kernel 5.0.4934 Mb161 Mb ( 20% )4.7 Mb ( 0.5% )
Debian 9 (LAMP) LXC VM724 Mb165 Mb ( 23% )4.1 Mb ( 0.5% )

Предыстория

Всегда когда целиком бэкапил виртуалку, у меня было некоторое ощущение неправильности. С одной стороны, никогда нельзя просто сохранить только нужное (например, /etc, /home, /root и /var/www), потому что при восстановлении из такого бэкапа либо надо будет что-то сделать (поставить/настроить пакет какой-то), либо что-то забудешь положить в архив, например, утилитку из /usr/local/bin. А нужно - чтобы из архива автоматически получить точно ту же исходную систему, без «жаль забыл еще то и это в бэкап включить».

С другой стороны, паковать всю машину с файлами apache, mysql (о! базы mysql еще забыл в предыдущем списке) - получается примерно гигабайт исходных данных даже на скромную чистую LAMP машинку где еще нет ничего ценного. Очень большой overhead.

И еще у бэкапов есть важное свойство - делаем мы их регулярно, храним их (и оплачиваем хранение) каждый день. А вот восстанавливаемся из них - раз в 5 лет. Соответственно, лишний гиг каждого бэкапа обходится довольно дорого.

Hashget

Hashget - делает только дедупликацию. То есть, смотрит, какие из файлов для архивации можно при восстановлении просто скачать (то есть, их для вас уже кто-то надежно хранит) и подготавливает exclude file для tar (опция -X). Например, файлы из пакета apache - в бэкап не пойдут. Файлы из wordpress тоже почти все не пойдут. Но если вы что-то пропатчили (и эти новые файлы отличаются от дистрибутивных) - то эти файлы будут в архиве.

Распаковка делается в два шага автоматом, сначала tar -x …, затем hashget -u … . Он автоматом выкачает то что нужно, положит по нужным путям, выставит те же атрибуты. Вот в примере выше, крошечные архивы по 150Kb / 4M - аналогичны таким же .tar.gz архивам по 160Mb.

Еще можно использовать его для инкрементальных и дифференциальных бэкапов. Тогда новые бэкапы (дельты) будут очень маленькими, и при этом все ресурсы для распаковки будут на собственных приватных серверах (все распакуется даже в случае зомби-апокалипсиса и падения интернета).

В результате

Бэкапы - гораздо меньше. Их можно делать каждый день и хранить хоть все. Это дешево. Можно пересылать по почте, в телеграм-чате, хоть на флоппи-дисках. Заливать на Amazon Glacier и забывать о них. Разложить в десяток разных мест на разных материках, чтобы даже после ядерной войны они сохранились. Все равно это все будет стоить копейки.

Вопрос

Может быть кто-то посоветует еще интересные проекты чтобы автоматически включить их в hashget? (Сейчас каждый пользователь вручную может добавлять их для себя, в том числе и приватные). Интересны проекты, где данные большого размера, прежние релизы доступны по тем же адресам, ну и не новые, чтобы была уверенность в надежности проекта.

Интересны любые отзывы и вопросы по hashget’у.



Последнее исправление: xen0n (всего исправлений: 1)

Ответ на: комментарий от futurama

Отмазка не прошла. Учи терминологию.

anonymous
()
Ответ на: комментарий от Deleted

Ну вот для частном использовании в пределах одного компьютера - все уже так и работает. Можно запаковать debian виртуалочку (при индексации скачаются сами пакеты и лягут в кэш, надо только --hashserver опцию указать, чтобы отключить дефотный).

Дальше отключаем интернет-кабель и восстанавливаем. Все восстановиться из кеша. Сейчас проверил на linux-kernel пакете с отключенным wifi на ноуте (архив, про который выше писал) - без интернета распаковывается (т.к. файл в кеше).

Я просто думаю, как это сделать удобно, если у нас не 1 машина, а небольшая сетка.

xen0n
() автор топика
Ответ на: комментарий от xen0n

Все восстановиться из кеша

А если не из кэша? Если есть локальная репа «принесённая» извне (неважно на чём)? И эта репа в /etc/apt/sources.d прописана?

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от KillTheCat

Разве там нет хеша каждого файла?

Нет. Там и файлов то нет, как таковых. Там только хеши блоков и суммарный хеш.

Deleted
()
Ответ на: комментарий от Deleted

Там только хеши блоков

В принципе - можно использовать хеши вместо имен файлов и разбить их по разным торрентам с разным размером блока.

Хотя это и костыльно, DC++ считай уже мертвый. Может tahoe-LAFS?

KillTheCat ★★★★★
()
Ответ на: комментарий от KillTheCat

можно использовать хеши вместо имен файлов и разбить их по разным торрентам с разным размером блока.

Фига себе кубик-рубик!

DC++ считай уже мертвый.

Кто это сказал? Озерки живее всех живых.

Deleted
()
Ответ на: комментарий от Deleted

@zvezdochiot: то что она в /etc/apt/sources.d/ - это сейчас вообще ничего не дает, хешгет его не читает и «apt-get update» не делает. Вообще обычный APT репозиторий (ftp://ftp.ru.debian.org) для наших целей не подходит, так как он не статичный. Только snapshot.debian.org статичный.

Если кто-то принесет отдельно - то варианта два (с той версией, которая сейчас): 1. Исправить restore файл, чтобы были ссылки на туда, где эти копии 2. Разложить копии в формате кеша. Там он простой: /var/cache/CacheGet/files/http/snapshot.debian.org/archive/debian-security/20180822T062143Z/pool/updates/main/o/openssh/openssh-server_7.4p1-10+deb9u4_amd64.deb

Или скомбинировать и то и то (все файлы тупо в корень, и все ссылки на корень поставить).

Но мне нравится сама идея, чтобы можно было удобно и легко восстановиться даже если помер основной источник, поэтому подумаю, как красиво это сделать, чтобы и на одной машины было удобно и по сети.

xen0n
() автор топика
Ответ на: комментарий от pfg

@pfg: Да в .hashget-restore даже хеши есть (но - sha256, не magnet).

Может быть как-то правильнее - не создавать чудовище с DC++ / Kademlia и прочими страшными словами, а сделать так:

- По пакету храним информацию о нем в разных доступных способах, в том числе как magnet линк и другие.

- Делаем так, чтобы hashget мог удобно выдать список пакетов в разных форматах

- Другой тулзой уже выкачиваем их, хоть пусть из самых экзотичных P2P сетей

- Распаковываем с локальным пулом скачанных файлов.

xen0n
() автор топика
Ответ на: комментарий от xen0n

1. Исправить restore файл, чтобы были ссылки на туда, где эти копии 2. Разложить копии в формате кеша.

Геморно. Оба варианта. А также лишнее усложнение (смотрим правило 1 в простых правилах). Лучше вернуться к опции --local /path/to/archives.

Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

Геморно, согласен. Их я описал, чтобы показать, как это прямо сейчас сделать.

Думаю, завтра-послезавтра сделаю --local или что-то подобное. Не хочу «на порыве энтузиазма» импульсивно фичи делать - обычно после этого долго переделывать приходится :-)

xen0n
() автор топика
Ответ на: комментарий от Deleted

Сделана опия --pool

Новая версия готова. Основная фича - использование локального пула пакетов, указывается опцией --pool, либо как каталог, либо как HTTP URL.

Если пакет (с тем же SHA256) обнаруживается в локальном пуле, то он не скачивается из сети. Это позволяет сэкономить трафик и распаковать данные даже без доступа в сеть.

Например:

hashget --pack /path/to/directory -zf /tmp/my-hashget-archive.tar.gz --pool /var/hashget/pool

или

hashget -u .  --pool http://mypool.example.com/pool

Наполнение пула

В простейшем случае, можно просто сбросить любые файлы в каталог. hashget автоматически их подхватит при запуске. Если hashget скачивает пакет (например, при индексации каталога) и при этом у нас указан –pool, то пакет будет сохранен в пуле (только для пулов в каталоге)

HTTP Pool

hashget-admin создает статический интерфейс (из каталогов и симлинков) к локальному пулу. Например:

hashget-admin --build /var/www/html/hashdb/ --pool /tmp/pool

Теперь к нему есть доступ через HTTP:

hashget -u . --pool http://localhost/hashdb
...
Recovered 8534/8534 files 450.0M bytes (0 downloaded, 98.7M from pool, 0 cached) in 143.54s
xen0n
() автор топика
Ответ на: Сделана опия --pool от xen0n

Новая версия готова.

Good work.

Сделаешь декомпрессор на Си, и ты в дамках.

Deleted
()
Ответ на: комментарий от xen0n

и нельзя новые «изобретать»

Можно, но нужны звёзды.

peregrine ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.