Заметки о Windows и других программных продуктах Microsoft...

Production Checkpoints в Windows Server 2016

Production Checkpoints в Windows Server 2016

Механизм создания моментальных снимков появился еще в первой версии Hyper-V в Windows Server 2008 и долгое время оставался практически неизменным. Однако в Windows Server 2016 технология снимков была переработана, в результате чего появились так называемые производственные снимки (Production checkpoints). Сегодня мы попробуем разобраться, что они из себя представляют и чем отличаются от обычных снимков.

Для начала в общих чертах, что такое моментальные снимки и зачем вообще они нужны.

Примечание. На самом деле моментальный снимок по английски — это snapshot, а checkpoint переводится как ″контрольная точка″. Термин снапшот  использовался в более ранних версиях Hyper-V, а начиная с Windows Server 2012 моментальные снимки переименовали в чекпойнты. Чтобы избежать путаницы, дальше в статье будет использоваться слово снимок.

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

В общем случае процедура создания снимка ВМ выглядит следующим образом:

1.  В директории, указанной в ″Checkpoinf File Location″, создается копия конфигурационных файлов ВМ;
2.  Для каждого подключенного к ВМ виртуального диска (VHDX) cоздается разностный диск (AVHDX).

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

С имеющимся снимком можно произвести следующие операции:

• Применить (Apply) — возврат на точку создания снимка. Удаляются все изменения конфигурации, произошедшие со времени создания снимка, разностные диски пересоздаются заново. При этом теряется текущее состояние ВМ;
• Удалить (Delete) — удаление снимка. Хотя на самом деле удаление — не совсем корректное название, более правильно было бы сказать слияние. При удалении снимка разностные диски сливаются с оригинальными, а сохраненная оригинальная конфигурация заменяется на текущую. Содержимое Checkpoinf File Location удаляется. Сами данные при этом не удаляются, но пропадает возможность возврата.

Отличия

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

При создании стандартного снимка, если машина находится во включенном состоянии или сохранена (save state), то состояние оперативной памяти, процессора и текущие дисковые операции сохраняются на диск. Для машин, созданных в Server 2012, в директории со снимками дополнительно создаются файлы BIN (содержимое оперативной памяти) и VSV (состояние файлов). Для ВМ, созданных в Server 2016, текущее состояние сохраняется в файл VMRS.

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

При этом сама гостевая система никак не участвует в создании снимка и даже не подозревает о том, что с ней что то делали. Соответственно после применения снимка машина продолжает работу ровно с того места, на котором он был сделан. В некоторых случаях это может вызвать сбои приложений внутри ВМ. Особенно это актуально для приложений, использующих в своей работе транзакции, таких как SQL Server, Exchange и им подобных.

Производственные снимки, в отличии от стандартных, не сохраняют содержимое оперативной памяти. Вместо этого при их создании используется технология теневого копирования томов (Volume Shadow Copy, VSS). Для взаимодействия с приложениями внутри виртуальной машины используется сервис интеграции Backup (volume shadow copy), т.е. при создании чекпойнта используется механизм резервного копирования.

При создании производственного снимка гипервизор через сервис интеграции уведомляет гостевую операционную систему о своих действиях. Внутри ВМ все приложения с поддержкой VSS корректно завершают текущие операции и сохраняют данные. Затем происходит создание снимка, после чего машина продолжает свою работу.

Плюс использования VSS при создании снимка заключается в том, что у приложений нет незавершенных действий (транзакций и т.п.) и данные находятся в консистентном состоянии. Кроме того, после применения производственного снимка машина остается выключенной, что также помогает избежать сбоев и потери данных.

Примечание. Если в качестве гостевой ОС используется Linux, в которых нет службы VSS, то для создания производственных снимков используется заморозка файловой системы (file system freeze).

Немного о VSS

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

VSS Writer —  обеспечивает взаимодействие с приложением в процессе бэкапа. Каждое приложение с поддержкой VSS устанавливает свой собственный Writer;
VSS Requestor — служба, инициирующая процесс бэкапа. В качестве Requestor может выступать программа резервного копирования или операционная система;
VSS Provider — обеспечивает взаимодействие службы VSS с аппаратной составляющей операционной системы (жесткий диск, RAID-массив и т.п.).

Сам процесс создания бэкапа выглядит следующим образом:

Операционная система с помощью VSS Requestor обращается ко всем приложениям с поддержкой VSS;
• Каждый VSS Writer запускает процедуру подготовки — завершает текущие операции, сохраняет данные и приостанавливает работу приложения;
• Затем VSS Provider создает снимок тома и сохраняет его;
• После создания бэкапа VSS Requestor уведомляет об этом каждый VSS Writer и приложения продолжают работу.

Настройки

Если ВМ создается в Windows Server 2016, для нее по умолчанию выбираются производственные чекпойнты, а если машина была импортирована с более ранней версии гипервизора — то стандартные. Изменить эти настройки и выбрать тип снимков можно в свойствах ВМ, в разделе Checkpoints. Дополнительно можно разрешить создание стандартных снимков при невозможности создания производственных.

настройки ВМ

 

Настройки можно производить и с помощью PowerShell. Например так мы включаем стандартные снимки:

Set-VM -Name SRV1 -CheckpointType Standard

так производственные:

Set-VM -Name SRV1 -CheckpointType ProductionOnly

а так — производственные с возможностью создания стандартных:

Set-VM -Name SRV1 -CheckpointType Production

Пример

А теперь на наглядном примере посмотрим различия между стандартным и производственным снимком. Для этого возьмем виртуальную машину и создадим на рабочем столе текстовый файл test.txt. Затем откроем его в программе Notepad, добавим пару строк и оставим файл открытым.

до создания стандартного снимка

 

Теперь с помощью PowerShell включим создание стандартных снимков:

Set-VM -Name SRV1 -CheckpointType Standard

Создадим снимок:

Checkpoint-VM -Name SRV1 -CheckpointName Standard

И применим его:

Restore-VMCheckpoint -VMName SRV1 -Name Standard -Confirm:$false

создание стандартного снимка

 

Подключимся к ВМ и увидим, что файл открыт на том же месте и записи в нем присутствуют.

до создания стандартного снимка

 

Теперь добавим в файл еще одну строчку.

до создания Production снимка

 

Изменим тип снимков на производственный:

Set-VM -Name SRV1 -CheckpointType ProductionOnly

Создадим новый снимок:

Checkpoint-VM -Name SRV1 -CheckpointName Production

И еще раз применим его:

Restore-VMCheckpoint -VMName SRV1 -Name Production -Confirm:$false

создание Production снимка

 

Теперь подключившись к ВМ мы видим, что она выключена.

после восстановления Production снимка

 

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

результат восстановления Production снимка

Заключение

Производственные снимки обеспечивают согласованность данных (data consistency), а стандартные — согласованность приложений (application consistensy). Выбор типа снимка зависит исключительно от конкретной ситуации. Например для сервера баз данных предпочтительнее использовать производственный снимок, а для обычного файлового сервера лучше подойдет стандартный.

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

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

 

 
 
Комментарии

Отличная статья, спасибо за подробный разбор.

Дмитрий

Спасибо! Полезная информация.

Ответить