Некоторое время назад я столкнулся с неприятной проблемой — мне нужно было сделать резервную копию нескольких виртуальных машин.
Сразу скажу, что резервное копирование для меня означает иметь в результате не просто архив с последней копией, а небольшую горстку этих архивов, сделанную по заданному шаблону.
Батник для архивации, конечно, был написан быстро и работал без нареканий, но размер.
Размер резервного набора оказался огромным.
Что особенно печально, так это то, что это были практически одинаковые виртуальные машины, и почти одинаковые резервные копии этих виртуальных машин.
Итак, я выучил слова «дедупликация» и «diff» и начал искать какую-нибудь утилиту для сжатия с дедупликацией.
Разные утилиты предлагали разные подходы к сжатию файлов со схожим содержимым, но одно оказалось общим — вы выбираете один исходный файл и настраиваете утилиту против остальных — она определяет разницу между исходником и остальными и архивирует результат, а когда вам нужно его развернуть, вы указываете исходный файл и архив с диффом, утилита сама все развернет. Короче говоря, исходник должен был быть где-то доступен в развернутом виде.
Постоянно - и в момент архивации, и в момент разархивации.
То есть «картина маслом» — у меня пять виртуальных машин, сегодня я хочу сделать архив с разницей между сегодняшними виртуальными машинами и вчерашними — я должен: - начиная со вчерашнего дня готовьте полную копию всей фермы, — далее запускаем утилиту, она сделает дифф и архив диффа.
Теперь хочу все это скопировать куда-нибудь — не буду тащить вчерашние данные (исходник) в несжатом виде — придется еще и архивировать исходник.
Если завтра мне понадобится сделать разницу между вчера и завтра, исходник должен быть доступен в несжатом и нетронутом виде — либо копия вчерашнего состояния, либо архив, который придется расширить.
Если мне нужно развернуть архив на новом хосте, мне сначала нужно развернуть исходный код, а затем развернуть сам дифф.
Ну да ладно, место на диске можно купить, но пора! Разархивирование исходников занимает столько времени! Но он нашелся - архиватор, который умел все делать правильно - положить исходник в архив, с дедупликацией, а потом делать диффы прямо из сжатого исходника, причем скорость архивации/разархивации зависит от скорости жесткого диска .
Прохладный! Но под Windows 2003 это не работает. Как вы понимаете, если бы все работало само по себе, я бы не писал эту статью.
Итак, теперь - амбулатория.
Архиватор называется exdupe, он был несерьезного типа, с частично доступным исходным кодом.
Частично — потому что библиотека дедупликатора была скомпонована статически, а код выложен в утилиту командной строки (сейчас весь код выложен).
Все в виде проекта под Visual Studio 2012. Запускалось все только под 64-битной версией Windows (у меня Win2003), и при запуске выдавало ошибку:
Точка входа не найдена Точка входа в процедуру VssFreeSnapshotPropertiesInternal не найдена в библиотеке динамической компоновки VSSAPI.DLL.
Исходник был сразу скачан с сайт программы (я обновил версию 0.5.0).
Причина ошибки - несовместимость версий библиотеки VSSAPI.dll на моей винде и либе, которая была подключена в проекте.
Повозившись с исходниками, я понял, что проще всего просто отключить поддержку Shadow Copy — убрать обращения к библиотеке VSS и отключить функции, отвечающие за доступ к VSS. Надо сказать, что код был написан сразу, хоть и с ошибками, а функций было всего две и они находились в файле «shadow\shadow.cpp».
Вот что мы делаем:
- найдите функцию void unshadow(void)
- закомментируйте строку 342:
-
Что Такое Наши Счастливые Сайты
19 Oct, 24 -
Обзор Ноутбука Sony Vaio Vpcy11S1E/S
19 Oct, 24 -
Итоги Первого Тура Russian Ai Cup
19 Oct, 24 -
Оригинальная Капча. Часть 2. Продолжение
19 Oct, 24 -
Еще Одна «Новая Жизнь» Героев
19 Oct, 24