Доработка Exdupe.exe — Архиватора С Быстрой Дедупликацией

Некоторое время назад я столкнулся с неприятной проблемой — мне нужно было сделать резервную копию нескольких виртуальных машин.

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

Батник для архивации, конечно, был написан быстро и работал без нареканий, но размер.

Размер резервного набора оказался огромным.

Что особенно печально, так это то, что это были практически одинаковые виртуальные машины, и почти одинаковые резервные копии этих виртуальных машин.

Итак, я выучил слова «дедупликация» и «diff» и начал искать какую-нибудь утилиту для сжатия с дедупликацией.

Разные утилиты предлагали разные подходы к сжатию файлов со схожим содержимым, но одно оказалось общим — вы выбираете один исходный файл и настраиваете утилиту против остальных — она определяет разницу между исходником и остальными и архивирует результат, а когда вам нужно его развернуть, вы указываете исходный файл и архив с диффом, утилита сама все развернет. Короче говоря, исходник должен был быть где-то доступен в развернутом виде.

Постоянно - и в момент архивации, и в момент разархивации.

То есть «картина маслом» — у меня пять виртуальных машин, сегодня я хочу сделать архив с разницей между сегодняшними виртуальными машинами и вчерашними — я должен: - начиная со вчерашнего дня готовьте полную копию всей фермы, — далее запускаем утилиту, она сделает дифф и архив диффа.

Теперь хочу все это скопировать куда-нибудь — не буду тащить вчерашние данные (исходник) в несжатом виде — придется еще и архивировать исходник.

Если завтра мне понадобится сделать разницу между вчера и завтра, исходник должен быть доступен в несжатом и нетронутом виде — либо копия вчерашнего состояния, либо архив, который придется расширить.

Если мне нужно развернуть архив на новом хосте, мне сначала нужно развернуть исходный код, а затем развернуть сам дифф.

Ну да ладно, место на диске можно купить, но пора! Разархивирование исходников занимает столько времени! Но он нашелся - архиватор, который умел все делать правильно - положить исходник в архив, с дедупликацией, а потом делать диффы прямо из сжатого исходника, причем скорость архивации/разархивации зависит от скорости жесткого диска .

Прохладный! Но под Windows 2003 это не работает. Как вы понимаете, если бы все работало само по себе, я бы не писал эту статью.

Итак, теперь - амбулатория.

Архиватор называется exdupe, он был несерьезного типа, с частично доступным исходным кодом.

Частично — потому что библиотека дедупликатора была скомпонована статически, а код выложен в утилиту командной строки (сейчас весь код выложен).

Все в виде проекта под Visual Studio 2012. Запускалось все только под 64-битной версией Windows (у меня Win2003), и при запуске выдавало ошибку:

Точка входа не найдена Точка входа в процедуру VssFreeSnapshotPropertiesInternal не найдена в библиотеке динамической компоновки VSSAPI.DLL.


Доработка exdupe.exe — архиватора с быстрой дедупликацией

Исходник был сразу скачан с сайт программы (я обновил версию 0.5.0).

Причина ошибки - несовместимость версий библиотеки VSSAPI.dll на моей винде и либе, которая была подключена в проекте.

Повозившись с исходниками, я понял, что проще всего просто отключить поддержку Shadow Copy — убрать обращения к библиотеке VSS и отключить функции, отвечающие за доступ к VSS. Надо сказать, что код был написан сразу, хоть и с ошибками, а функций было всего две и они находились в файле «shadow\shadow.cpp».

Вот что мы делаем:

  1. найдите функцию void unshadow(void)
  2. закомментируйте строку 342:
Теги: #Администрирование сервера #дедупликация #архиватор #exdupe
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.