Общие сведения о задачах перед резервным копированием

Задачи предварительного резервного копирования в VSS предназначены для создания теневой копии томов, содержащих данные для резервного копирования. Приложение резервного копирования сохранит данные из теневой копии, а не из фактического тома. Дополнительные сведения см. в статье Общие сведения об обработке резервной копии в VSS.

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

Действие инициатора запроса Событие Действие записи
Инициатор запроса может задать параметры резервного копирования (см. раздел IVssBackupComponents::SetBackupOptions). Нет Нет
Поддержка добавочных и разностных операций резервного копирования путем проверки всех сохраненных меток резервных копий (см. раздел IVssComponent::GetBackupStamp, IVssBackupComponents::SetPreviousBackupStamp). Нет Нет
Уведомление модулей записи о подготовке к операции резервного копирования с помощью IVssBackupComponents::P repareForBackup PrepareForBackup Подготовка модуля записи включает определение того, следует ли создавать резервные копии файлов, будет ли модуль записи участвовать в заморозке теневых копий. а также создание метаданных для модуля записи (см . CVssWriter::OnPrepareBackup, CVssWriter::IsPathAffected, IVssWriterComponents, IVssComponent, IVssComponent::GetBackupOptions, CVssWriter::AreComponentSelected, IVssComponent::SetBackupMetadata и IVssComponent:: GetPreviousBackupStamp.
Инициатор запроса ожидает, пока модули записи будут настроены для резервного копирования с помощью IVssAsync. Необходимо также проверить состояние модуля записи (см. раздел IVssBackupComponents::CollectWriterStatus, IVssBackupComponents::GetWriterStatus). Нет Нет
Запрашивающий запрос запрашивает теневое копирование с помощью IVssBackupComponents::D oSnapshotSet Нет Нет
Нет PrepareForSnapshot CVssWriter::OnPrepareSnapshot: перевод модуля записи в состояние готовности к теневой копии.
Нет Заморозить CVssWriter::OnFreeze: окончательная настройка перед теневой копией.
Нет Разморозить CVssWriter::OnThaw: нормальное функционирование (включая ввод-вывод) может возобновиться.
Нет PostSnapshot CVssWriter::OnPostSnapshot: окончательная очистка подготовки теневого копирования. См. статьи IVssComponent::AddDifferencedFilesByLastModifyTime и IVssComponent::SetBackupStamp.
Запрашивающий ожидает завершения теневого копирования с помощью IVssAsync, он также должен проверить состояние записи (см. IVssBackupComponents::CollectWriterStatus, IVssBackupComponents::GetWriterStatus
Нет Нет

 

Задачи перед резервным копированием инициатора запроса

Кроме того, перед созданием события IVssBackupComponents::P repareForBackup инициатор запроса также может задать параметры резервного копирования для отдельных модулей записи с помощью IVssBackupComponents::SetBackupOptions в зависимости от особенностей каждого модуля записи и того, знает ли о них инициатор запроса.

Для поддержки добавочных и разностных операций инициаторы запроса могут на этом этапе проверить компоненты на наличие меток времени для предыдущей операции резервного копирования (с помощью IVssComponent::GetBackupStamp) и использовать эти сведения, чтобы задать предыдущую метку времени для обработки модуля записи (с помощью IVssBackupComponents::SetPreviousBackupStamp). Дополнительные сведения см. в разделе Добавочные и разностные резервные копии .

Инициатор запроса теперь может направлять средства записи системы на выполнение подготовки к предварительному резервному копированию и обработку создания теневой копии.

Во-первых, инициатор запроса создает событие PrepareForBackup , вызывая IVssBackupComponents::P repareForBackup.

После того как все участвующие модули записи вернутся из обработки события PrepareForBackup (которое инициатор запроса определяет с помощью экземпляра интерфейса IVssAsync , возвращенного PrepareForBackup), инициатор запроса может инициировать теневое копирование, вызвав IVssBackupComponents::D oSnapshotSet, который, по мере выполнения, создает события PrepareForSnapshot, Freeze, Thaw и PostSnapshot , которые будут обрабатываться средствами записи.

В некоторых случаях инициатору запроса может не потребоваться создавать теневые копии. В частности, каждый набор файлов , управляемый одним из компонентов модуля записи, имеет маску резервного копирования спецификации файла (обозначенную битовой или значениями VSS_FILE_SPEC_BACKUP_TYPE ), заданную во время события Identify . Эта маска, среди прочего, указывает, требуется ли для набора файлов теневое копирование системы перед выполнением резервного копирования.

Если для создания резервных копий наборов файлов на томах не требуется теневое копирование, вызов IVssBackupComponents::D oSnapshotSet не требуется.

Задачи записи перед резервным копированием

При обработке события PrepareForBackup VSS вызывает метод CVssWriter::OnPrepareBackup каждого модуля записи, виртуальный метод, который по умолчанию просто возвращает значение true.

Записи могут переопределить эту реализацию по умолчанию и использовать обработку для поиска сведений о предстоящем резервном копировании и выполнения действий.

Модуль записи может определить сведения о типе планируемой операции резервного копирования с помощью следующих методов:

  1. CVssWriter::GetBackupType
  2. CVssWriter::IsBootableStateBackedUp
  3. CVssWriter::AreComponentsSelected

Модуль записи определяет, будут ли управляемые им файлы участвовать в теневой копии с помощью CVssWriter::IsPathAffected.

Что еще более важно, когда VSS вызывает метод CVssWriter::OnPrepareBackup , он передает экземпляр интерфейса IVssWriterComponents , который обеспечивает прямой доступ через интерфейс IVssComponent к тем из его компонентов, которые явно включены в документ компонентов резервного копирования инициатора запроса. Модуль записи использовал экземпляры интерфейса IVssComponent , определяющие наборы компонентов, чтобы получить доступ к неявно включенном компоненту (см. статью Выборка и работа со свойствами компонента).

Во время обработки события PrepareForBackup средства записи используют интерфейс IVssComponent для выполнения операций по компоненту (или по набору компонентов), в том числе:

  1. Добавление частичных файлов (если поддерживается) путем вызова IVssComponent::AddPartialFile.
  2. Настройка любых частных метаданных, необходимых модулю записи для обработки восстановления.
  3. Если модуль записи поддерживает добавочные и разностные резервные копии (см. раздел Добавочные и разностные резервные копии), выполните следующие действия.
  4. Запуск очень длительных асинхронных операций, таких как синхронизация данных на нескольких дисках. Это позволит модулю записи продолжать работу во время обработки операции, включая обработку других событий VSS. Эти операции должны завершиться до события Freeze .

Вызов запрашивающего объекта IVssBackupComponents::D oSnapshotSet инициирует теневое копирование и создает следующие события для обработки средствами записи:

Три обработчика модуля записи — CVssWriter::OnPrepareSnapshot, CVssWriter::OnFreeze и CVssWriter::OnThaw — являются чисто виртуальными методами, и каждый модуль записи должен реализовывать их, а не полагаться на значения по умолчанию. В зависимости от потребностей модуля записи они могут быть закодированы как фиктивные методы, просто возвращая значение TRUE.

Так как между выпуском события Freeze и запуском события Thaw обычно существует узкий временной интервал, большая часть основной работы по подготовке к теневой копии, например завершение процессов, создание временных файлов или очистка очередей ввода-вывода, будет выполняться в CVssWriter::OnPrepareSnapshot.

Способ использования модуля записи CVssWriter::OnPrepareSnapshot для обработки операций ввода-вывода перед созданием теневой копии в значительной степени зависит от собственной архитектуры модуля записи.

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

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

Метод CVssWriter::OnFreeze выполняет простые короткие задачи, такие как проверка того, что CVssWriter::OnPrepareSnapshot оставил ввод-вывод в правильном состоянии и что все асинхронные задачи, запущенные CVssWriter::OnPrepareBackup , завершены. Этот метод является последним шансом автора набрать вето на теневое копирование при наличии проблем (см . статью Об ошибках записи и вето).

Как правило, модуль записи может возобновить нормальную работу после события Thaw : теневая копия может быть не сразу готова к резервному копированию после оттепели, но модуль записи должен иметь возможность возобновить нормальную работу. Поэтому обычно CVssWriter::OnThaw используется средствами записи для возврата в состояние предварительной заморозки. Однако все временные файлы, созданные для поддержки теневой копии, следует оставить на месте до события PostSnapshot . Как правило, для такой очистки используется CVssWriter::OnPostSnapshot . Так как многие приложения не требуют такой очистки, CVssWriter::OnPostSnapshot — это виртуальный метод с реализацией по умолчанию, которая просто возвращает true. Если выполняется добавочное или разностное резервное копирование, модуль записи может вызвать IVssComponent::GetPreviousBackupStamp и IVssComponent::SetBackupStamp. Дополнительные сведения см. в разделе Роль записи в резервном копировании сложных хранилищ. Еще один метод, который можно вызвать в настоящее время, — это IVssComponent::AddDifferencedFilesByLastModifyTime.