Реализация резервного копирования на хардлинках под Windows

в 1:33, , рубрики: Без рубрики

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

А требовалось не так уж много — во-первых в любой момент времени копировать любые файлы, в том числе работающие базы данных, чтобы не заставлять людей выходить из программ даже на ночь, и копировать быстро; во-вторых иметь возможность очень быстро восстановить данные из резервной копии (хранение данных «как есть» идеально), в третьих хранить как можно больше резервных копий, и не лишь бы как, а с полной структурой данных. Все эти задачи как нельзя лучше реализуются с помощью теневого копирования и использования хардлинков. Но вот та реализация — на куче батников и с использованием портированной версии rsync (которая к тому же требовала кучу библиотек cygwin и имела проблемы с нестандартными символами), мне совсем не понравилась. Стал искать альтернативы, но найти именно то, что подходило бы мне идеально, не удалось. Поэтому было решено — нужно сделать проще и лучше, и не только себе, но и коллегам.

Возможности и рекомендации

Так появилась первая версия LightBackup, которая уже выполняет возложенные на неё задачи. Возможности получились следующие:

  • Программа работает с любыми ОС Windows от WinXP и выше, всех разрядностей.
  • Поддерживается теневое копирование тома для чтения заблокированных файлов.
  • Для файлов, которые не изменились с прошлого копирования, создаются жёсткие ссылки.
  • Поддерживаются пути файловой системы любой длины и любой кодировки.
  • Полная поддержка юникода, два языка интерфейса (русский и английский).
  • Создание общего журнала работы программы и журналов по каждой копии.
  • Поддержка тихого режима и автоматического удаления старых копий.
  • Не требует никаких сторонних библиотек для своей работы.

Теневая копия перед копированием создаётся всегда, это позволяет сохранять любые данные, даже открытые для монопольного доступа, например базы данных или весь раздел с операционной системой. При первом запуске данные копируются как есть, при следующих — сравниваются даты файлов в источнике и последней резервной копии, и вместо копирования неизменившихся файлов на них будут созданы жёсткие ссылки — это значительно ускорит создание резервной копии и сильно сэкономит место. Можно задать количество хранимых копий, старые будут автоматически удалены. Количество копий должно быть не меньше 2-х и не больше 1024-х, а раздел для хранения данных должен иметь файловую систему NTFS. Копирование желательно делать на физически другой носитель, иначе при поломке источника резервирование не будет иметь смысла. Таким образом не смотря на инкрементное копирование данных, благодаря жёстким ссылкам будет видно полную структуру данных в любой резервной копии. При этом в резервной копии изменять данные не желательно, иначе изменения перенесутся жёсткими ссылками на другие копии. Архивирование не выполняется намеренно, это позволяет получить доступ к данным в резервной копии мгновенно и из любой системы. Теневое копирование не отменяет права доступа, поэтому у пользователя, под которым работает программа, должно быть право чтения копируемой информации.

Файл конфигурации

[Main]
Silent = 0 # Показать сообщение после завершения копирования

[Config1] # Имя секции в формате ConfigX, где X - номер профиля
Snapshots = 3 # Какое количество резервных копий хранить
Source = C:WindowsSystem32Config # Что нужно копировать
Backup = D:BackupConfig # В этой папке будут храниться резервные копии

Следующие секции записываются в том же формате, только увеличивается номер профиля в порядке возрастания, например Config2, Config3 и т. д. Параметр Backup везде должен указывать на разные директории, там создаются папки по датам и времени. Пример конфигурации создаётся при первом запуске программы. Так в первом примере создаётся резервная копия реестра, а второй пример копирует базы данных из C:Bases в D:BackupBases и хранит все копии за полгода, если планировщик запускается раз в сутки:

[Config2]
Snapshots = 180
Source = C:Bases
Backup = D:BackupBases

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

Лицензирование

Программа полностью бесплатна для персонального использования на не-серверных операционных системах. Для коммерческого использования на серверных ОС возможно будет введена небольшая стоимость, но до нового года ключи будут раздаваться даром всем желающим (HWID из конфигурации нужно отправить на support@lightbackup.com). Однако отличие зарегистрированной версии от обычной заключается только в одном сообщении по окончании копирования. Другими словами никаких функциональных ограничений нет даже без регистрации и решение о покупке можно принять после любого периода использования программы или когда резервирование нужно будет настроить на тихое автоматическое выполнение в планировщике. Здесь прошу понять меня правильно, так как кто знает, как много я стараюсь делать для всех годами полностью бесплатно, когда пожертвования не окупают даже интернет, тот меня поймёт.

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

Загрузить LightBackup 1.0 можно по этой ссылке. Надеюсь она будет вам полезной.

Автор: simplix

Источник


* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js