Обзор инициализации резервного копирования
На этом этапе резервного копирования инициализируется модуль записи и инициатор запроса, заполняя их внутренние структуры данных, указывая резервную копию, и устанавливается связь между модулями записи и инициатора запроса через необходимый вызов IVssBackupComponents::CollectWriterMetadata. Дополнительные сведения см. в статье Общие сведения об обработке резервной копии в VSS.
В следующей таблице показана последовательность действий и событий, необходимых для инициализации резервного копирования.
Действие инициатора запроса | Событие | Действие записи |
---|---|---|
Создает интерфейс IVssBackupComponents и инициализирует его для управления резервным копированием (см. раздел CreateVssBackupComponents, IVssBackupComponents::InitializeForBackup) и при необходимости включает или отключает записи в системе. | Нет | Нет |
При необходимости задайте контекст для операций теневого копирования и при необходимости запрашивайте в системе поставщики и теневые копии, которые она поддерживает (см. раздел IVssBackupComponents::SetContext, IVssBackupComponents::Query). | Нет | Нет |
Инициатор запроса может предоставить дополнительные сведения об обработке операций резервного копирования и восстановления (см. раздел IVssBackupComponents::SetBackupState). | Нет | Нет |
Инициирует асинхронный контакт с записью записи (см. раздел IVssBackupComponents::GatherWriterMetadata) | Identify | Создает документ метаданных модуля записи (см. раздел Работа с документом метаданных записи, CVssWriter::OnIdentify, IVssCreateWriterMetadata) |
Действия инициатора запроса во время инициализации резервного копирования
Объект IVssBackupComponents можно использовать только для одной резервной копии. Таким образом, инициатор запроса должен завершить резервное копирование, в том числе освободить интерфейс IVssBackupComponents . Если резервное копирование должно завершиться преждевременно, инициатору запроса необходимо вызвать IVssBackupComponents::AbortBackup, а затем освободить объект IVssBackupComponents (дополнительные сведения см. в разделе Прерывание операций VSS ). Не пытайтесь возобновить работу интерфейса IVssBackupComponents .
Как правило, документ компонентов резервной копии инициатора запроса инициализируется как пустой. Сохраненный документ компонентов резервной копии можно загрузить при вызове IVssBackupComponents::InitializeForBackup , как правило, для поддержки переносимых теневых томов. В этом случае обмен данными между модулями записи и инициатора запроса будет несколько отличаться от описанного ниже. (Дополнительные сведения см. в статье Импорт переносимых теневых томов .)
Чтобы добавить тома в набор теневого копирования, инициатор запроса должен сначала задать контекст для операции теневого копирования, вызвав IVssBackupComponents::SetContext. Если этот метод не вызывается, используется контекст по умолчанию для теневых копий, VSS_CTX_BACKUP. Сведения о настройке контекста теневого копирования см. в разделе Конфигурации контекста теневого копирования.
Чтобы начать настройку до резервного копирования, инициатор запроса должен вызвать IVssBackupComponents::SetBackupState. Таким образом инициатор запроса указывает записи:
- Тип резервного копирования (как определено в VSS_BACKUP_TYPE)
- Указывает, включает ли резервная копия загрузочное состояние системы
- Поддерживает ли инициатор запроса выбор отдельных компонентов или выполняет резервное копирование целых томов.
Все инициаторы запроса, участвующие в операциях резервного копирования и восстановления, должны всегда вызывать IVssBackupComponents::GatherWriterMetadata. Этот метод инициирует обмен данными между модулями записи и инициатора запроса путем создания события VSS Identify , в ответ на которое модуль записи создает свой документ метаданных.
Перед вызовом IVssBackupComponents::CollectWriterMetadata запрашивающий объект имеет возможность явно включить или отключить определенные определенные классы записи и записи с помощью IVssBackupComponents::EnableWriterClasses, IVssBackupComponents::D isableWriterInstances и IVssBackupComponents::D isableWriterClasses (по умолчанию включены все классы). После вызова IVssBackupComponents::GatherWriterMetadata эти вызовы не оказывают никакого влияния.
Так как нет способа получить список записей в системе перед вызовом IVssBackupComponents::GatherWriterMetadata, инициаторы запроса могут рассмотреть возможность создания и последующего удаления второго экземпляра IVssBackupComponents для получения списка.
Нет необходимости вызывать IVssBackupComponents::GatherWriterStatus после завершения IVssBackupComponents::GatherWriterMetadata. Записи, которые не могут обработать событие Identify , созданное вызовами, не будут входить в список записей, предоставляющих метаданные, найденные IVssBackupComponents::GetWriterMetadataCount и IVssBackupComponents::GetWriterMetadata (см. раздел Определение состояния записи).
Действия записи во время инициализации резервного копирования
В ответ на событие Identify VSS вызывает метод виртуального обработчика каждого модуля записи CVssWriter::OnIdentify. Модуль записи создает документ метаданных модуля записи, переопределяя реализацию по умолчанию CVssWriter::OnIdentify и используя интерфейс IVssCreateWriterMetadata .
Обратите внимание, что приложения, отличные от текущего инициатора запроса (например, системные приложения), могут создавать события Идентификации, которые должны обрабатываться модулем записи. Кроме того, средство записи не может определить из CVssWriter::OnIdentify , какое приложение создало событие Identify.
В этом случае, учитывая, что модуль записи может получать несколько событий Identify при обработке операции резервного копирования, модуль записи никогда не должен задавать сведения о состоянии в обработчике CVssWriter::OnIdentify .
Вместо этого CVssWriter::OnIdentify должен выполнять согласованный алгоритм для создания документа метаданных модуля записи, особенно потому, что после создания документа модуль записи ни инициатор запроса, ни модуль записи не могут изменить его. С этого момента это документ, доступный только для чтения.
Это означает, что количество и тип компонентов , связанных с модулем записи, файлы которых являются частью каждого компонента, а также явное исключение файлов из операций резервного копирования или восстановления невозможно изменить после возврата модуля записи после обработки события Identify.
Все записи, участвующие в VSS, должны выполнять следующие действия:
- Укажите метод восстановления для всех компонентов, управляемых модулем записи с помощью IVssCreateWriterMetadata::SetRestoreMethod.
- Добавьте по крайней мере один компонент с помощью IVssCreateWriterMetadata::AddComponent (дополнительные сведения о спецификации компонента см. в разделе Определение компонентов по модулям записи ).
Модуль записи указывает файлы для участия в операции резервного копирования или восстановления, добавляя наборы файлов (сочетание пути, спецификации файла и флага рекурсии) в данный компонент с помощью IVssCreateWriterMetadata::AddFilesToFileGroup, IVssCreateWriterMetadata::AddDatabaseFiles или IVssCreateWriterMetadata::AddDatabaseLogFiles в зависимости от типа (см. раздел Добавление файлов в компоненты.)
Модуль записи также может содержать один или несколько пустых компонентов, к которым не были добавлены файлы. Они очень полезны для упорядочения компонентов модуля записи. (См. раздел Логический путь компонентов.)
Модуль записи использует IVssCreateWriterMetadata::AddExcludeFiles для явного предотвращения включения файлов в резервную копию. Это явное исключение полезно, так как для указания файлов для включения можно использовать подстановочные знаки (см. раздел Спецификация исключения списка файлов). Обратите внимание, что список исключенных файлов имеет приоритет над списками файлов компонентов.
IVssCreateWriterMetadata::AddAlternateLocationMapping используется для создания альтернативных сопоставлений расположений для указанных наборов файлов, добавленных в один из компонентов модуля записи. Эти сопоставления используются во время восстановления файла, если восстановление в исходное расположение файла невозможно или нежелательно. (См. общие сведения о фактическом восстановлении файлов и расположениях резервного копирования и восстановления, отличных от расположения резервного копирования и восстановления по умолчанию.)
Так как резервный набор файлов указан в документе метаданных записи, его нельзя изменить позже. Таким образом, модуль записи должен быть закодирован таким образом, чтобы определение набора файлов включало все файлы, необходимые в резервной копии, либо по имени, либо с помощью подстановочных знаков. Возможно, сюда могут входить некоторые файлы, которые могут быть созданы после события Identify.