Я подумываю о создании резервных копий на основе образов (Acronis) в производственных системах Windows в непиковые часы. Мне просто интересно, могут ли они потенциально привести к повреждению данных приложения. Допустим, у меня есть база данных, которая сильно пострадала. Могу ли я потенциально сделать так, чтобы начальные блоки базы данных были зафиксированы в изображении, данные, вставленные в базу данных (которая изменяет начальные блоки БД на сервере, но не изображение), а затем блоки данных, зафиксированные в изображении ( приводящее к противоречивому состоянию).
Вот пример того, что я пытаюсь проиллюстрировать. Представьте себе простую структуру данных, у которой число впереди, которое представляет количество букв "а" в файле. Число и данные разделяются знаком «-». Например:
4-ajjjjjjjajuuuuuuuaoffffa
Если "a" изменен, структура данных сбрасывает номер в начале файла, например:
3-ajjjjjjjajuuuuuuuboffffa
Я предполагаю, что acronis записывает блок за блоком, являясь прямым изображением, поэтому вот что я вижу в моей базе данных
t0: 4-ajjjjjjjajuuuuuuuaoffffa
^pointer is here
t1: 4-ajjjjjjjajuuuuuuuaoffffa
^pointer is here (all data before this is comitted to the image)
t2: 4-ajjjjjjjajuuuuuuuboffffa
^pointer is here (all data before this is comitted to the image)
Also notice how one of the "a"s change to a b. There are only 3 "a"s now
t3: 4-ajjjjjjjajuuuuuuuboffffa
^pointer is here (all data before this is comitted to the image)
Окончательное изображение теперь читается как «4-ajjjjjjjajuuuuuuuboffffa», а истинные данные - «3-ajjjjjjjajuuuuuuuboffffa», что приводит к повреждению «базы данных».
В основном изменения в цепочке блоков могут быть отражены в изображении, в то время как важный заголовок и синхронизация уже могут быть зафиксированы. Устаревшая информация заголовка не точно отражает структуру будущих блоков.
То, что здесь происходит, касается acronis, и почти все программы резервного копирования используют службу теневого копирования томов. Различные приложения, такие как SQL и сервер обмена, также имеют свой собственный модуль записи VSS.
http://blog.macrium.com/2012/11/backup-internals-what-is-vss-how-does-it-work-and-why-do-we-use-it/ имеет довольно хороший обзор того, как это работает.
Обычно acronis сообщает, что Windows действительно создает снимок. С этого момента, когда программа изменяет файл, исходные данные сохраняются в теневом хранилище. Когда acronis добирается до этой части файла, vss дает ему исходную версию из теневого хранилища вместо обновленной, которую видят все обычные программы.
Когда все работает правильно, вы получаете точную копию того, что вы получили бы, если бы отключили сервер и сделали резервную копию в автономном режиме. Приложения с поддержкой VSS, такие как SQL, получают возможность еще до создания моментального снимка сохранить все, что необходимо сохранить, чтобы избежать противоречивых данных. Другие программы могли бы иметь поврежденные данные в резервной копии, если бы они находились прямо в середине записи файла, но поскольку моментальный снимок создается быстро, это случается редко, и не хуже, чем при отключении питания и перезагрузке сервера.