Роль инициатора запроса в резервном копировании сложных хранилищ
Как и для всех важных операций в VSS, добавочные и разностные резервные копии требуют тесного сотрудничества между инициаторами запроса и авторами.
Тип резервного копирования
Инфраструктура обеспечивает специальную поддержку для пяти типов резервного копирования. Они описаны ниже.
Полный (VSS_BT_FULL). Резервные копии файлов будут создаваться независимо от даты их последней резервной копии. Журнал резервных копий каждого файла будет обновлен, и этот тип резервного копирования можно использовать в качестве основы для добавочной или разностной резервной копии. Если есть файлы журналов, они могут быть усечены в результате этой резервной копии.
Для восстановления полной резервной копии требуется только один образ резервной копии.
Разностный (VSS_BT_DIFFERENTIAL). API VSS используется для того, чтобы гарантировать, что только файлы, которые были изменены или добавлены с момента последней полной резервной копии, должны быть скопированы на носитель хранилища; все промежуточные сведения о резервном копировании игнорируются. Это могут быть целые файлы или определенные диапазоны в файлах. Разностная резервная копия связана с полной резервной копией и обычно не может быть восстановлена до тех пор, пока не будет восстановлена полная резервная копия. Если есть файлы журналов, они обычно не усекаются в результате этой резервной копии.
Для восстановления разностной резервной копии требуется исходный образ резервной копии и последний образ разностной резервной копии, сделанные с момента последней полной резервной копии.
Добавочный (VSS_BT_INCREMENTAL). API VSS используется для того, чтобы гарантировать, что только файлы, которые были изменены или добавлены с момента последней полной или добавочной резервной копии, будут скопированы на носитель хранилища. Это могут быть целые файлы или определенные диапазоны в файлах. Некоторые модули записи не позволяют смешивать добавочные резервные копии с разностными резервными копиями. Если есть файлы журналов, они могут быть усечены в результате этой резервной копии.
Для восстановления добавочной резервной копии требуется исходный образ резервной копии и все образы добавочной резервной копии, сделанные с момента первоначального резервного копирования.
Резервное копирование журналов (VSS_BT_LOG). Будут создаваться только файлы журнала модуля записи (файлы, добавленные в компонент с помощью метода IVssCreateWriterMetadata::AddDataBaseLogFiles и полученные путем вызова IVssWMComponent::GetDatabaseLogFile). Этот тип резервного копирования является специфическим для VSS. Резервное копирование журналов, как правило, выполняется довольно часто. Как правило, файл журнала будет усечен в результате этой резервной копии.
Копирование резервной копии (VSS_BT_COPY). Как и VSS_BT_FULL тип резервной копии, резервные копии файлов будут создаваться независимо от даты последней резервной копии. Однако журнал резервных копий каждого файла не обновляется, и такой тип резервной копии нельзя использовать в качестве основы для добавочной или разностной резервной копии. Файлы журналов никогда не должны быть усечены в результате резервной копии.
-
Поддержка частичных файлов
-
Некоторые модули записи поддерживают восстановление файлов путем перезаписи частей файлов, которыми они управляют. Инициатор запроса может быть разработан таким образом, чтобы воспользоваться этим, и если да, он указывает на это, задав сведения в IVssBackupComponents::SetBackupState.
Инициатор запроса указывает, какой тип резервного копирования выполняется с помощью параметра backupTypeобъекта IVssBackupComponents::SetBackupState. Разные модули записи поддерживают разные типы резервного копирования. После вызова IVssBackupComponents::CollectWriterMetadata инициатор запроса может определить, какие типы резервного копирования поддерживает данный модуль записи, вызвав метод IVssExamineWriterMetadata::GetBackupSchema. Возвращаемое значение представляет собой битовую маску, указывающую на поддержку различных типов резервного копирования. VSS_BS_DIFFERENTIAL указывает на поддержку разностных резервных копий, VSS_BS_INCREMENTAL для добавочных резервных копий, VSS_BS_LOG для резервных копий журналов и VSS_BS_COPY для копирования резервных копий; все модули записи должны поддерживать полные резервные копии. Если модуль записи не поддерживает смешивание добавочных резервных копий с разностными резервными копиями, также будет добавлен флаг VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL . Если инициатор запроса выполняет добавочное или разностное резервное копирование и данный модуль записи не поддерживает этот тип резервной копии, необходимо выполнить полное резервное копирование для этого модуля записи.
Метки резервных копий
Добавочные и разностные резервные копии всегда привязаны к предыдущей резервной копии. Существует два способа связывания резервных копий. Для простых хранилищ данных инициатор запроса может отслеживать корреляцию между резервными копиями. Однако для более сложных хранилищ данных модуль записи должен поддерживать собственную метку времени с резервной копией. эта метка времени может отслеживать положение в журнале, сведения о контрольных точках и т. д. Инициатор запроса может определить, нужно ли данному модулю записи хранить собственную метку времени, проверив бит VSS_BS_TIMESTAMPED в значении, возвращаемом IVssExamineWriterMetadata::GetBackupSchema.
Записи, которые хранят метку времени в резервной копии, добавляют метку времени при обработке IVssBackupComponents::P repareForBackup или при обработке IVssBackupComponents::D oSnapshotSet. Инициатор запроса может получить эту метку времени, вызвав IVssComponent::GetBackupStamp. При выполнении добавочного или разностного резервного копирования инициатору запроса необходимо связать текущую резервную копию с предыдущей резервной копией. Для этого нужно получить метку времени из предыдущей резервной копии определенного компонента и передать ее в функцию IVssBackupComponents::SetPreviousBackupStamp ; это необходимо сделать для каждого компонента, резервное копирование которых выполнялось в предыдущей резервной копии.
Резервное копирование файлов
Резервное копирование файлов, о чем сообщает модуль записи
Каждая спецификация файла, добавляемая модулем записи к своим метаданным на этапе CollectWriterMetadata, содержит маску типа резервного копирования, указывающую время резервного копирования файла. Инициатор запроса определяет, что такое эта маска, вызывая IVssWMFiledesc::GetBackupTypeMask. Значения в этой маске используются для определения типов резервных копий, для которых требуется создать резервную копию спецификации файла. Маска может содержать одно или несколько из следующих битовых значений:
-
VSS_FSBT_FULL_BACKUP_REQUIRED
-
Требуется для полного резервного копирования.
-
VSS_FSBT_DIFFERENTIAL_BACKUP_REQUIRED
-
Требуется для разностных резервных копий.
-
VSS_FSBT_INCREMENTAL_BACKUP_REQUIRED
-
Требуется для добавочных резервных копий.
-
VSS_FSBT_LOG_BACKUP_REQUIRED
-
Требуется для резервного копирования журналов.
-
VSS_FSBT_ALL_BACKUP_REQUIRED
-
Требуется для всех типов резервного копирования; это значение по умолчанию.
Эта спецификация переопределяет спецификацию селективности компонента. Например, рассмотрим компонент, все файлы которого помечены VSS_FSBT_LOG_BACKUP_REQUIRED , но не VSS_FSBT_FULL_BACKUP_REQUIRED. Предположим, что этот компонент нельзя выбрать для резервного копирования (bSelectable было false при вызове IVssCreateWriterMetadata::AddComponent ). В случае резервной копии журнала это означает, что все файлы в этом компоненте должны всегда создаваться для резервного копирования. Однако в случае полной резервной копии ни один из файлов не требуется создавать резервную копию, несмотря на то, что избирательность компонента подразумевает, что для него необходимо создать резервную копию.
Резервное копирование по времени последнего изменения
Сведения о спецификации файла, указанные на этапе IVssBackupComponents::GatherWriterMetadata , не предоставляют инициатору запроса сведения об изменениях с момента последнего резервного копирования. Одним из способов указания изменений в инициаторе запроса является использование механизма разностного файла. Модуль записи может указать, что определенные файлы в компоненте должны создаваться только в том случае, если они были изменены с определенного времени; Модуль записи может указать эти файлы в IVssBackupComponents::P repareForBackup или в IVssBackupComponents::D oSnapshotSet. Инициатор запроса может определить эти файлы, вызвав IVssComponent::GetDifferencedFilesCount и IVssComponent::GetDifferencedFile. Если спецификация файла соответствует одному набору в IVssBackupComponents::GatherWriterMetadata (который в настоящее время является допустимым на основе маски типа резервной копии), разностные сведения о файле переопределяют предыдущие сведения; то есть файлы, соответствующие этой спецификации файла, теперь создаются только в том случае, если они были изменены с указанного времени. Время последнего изменения передается с помощью структуры FILETIME . Если значение этой структуры равно нулю, это означает, что время последнего изменения должно определяться на основе записи инициатора запроса о времени последнего резервного копирования.
Частичное резервное копирование файлов
Еще один способ указать изменения в инициаторе запроса — использовать механизм частичного файла. Модуль записи может указывать диапазоны байтов в файлах компонентов, которые необходимо создать для резервного копирования; Модуль записи может указать эти диапазоны файлов в IVssBackupComponents::P repareForBackup или в IVssBackupComponents::D oSnapshotSet. Инициатор запроса может определить эти файлы, вызвав IVssComponent::GetPartialFileCount и IVssComponent::GetPartialFile. IVssComponent::GetPartialFile возвращает путь и имя файла, указывающее на файл, а также строку диапазонов, указывающую, что необходимо создать резервную копию в файле. Как и в случае с разностными файлами, если путь и имя файла соответствуют спецификации файла, заданной модулем записи в IVssBackupComponents::CollectWriterMetadata, сведения о частичном файле переопределяют предыдущий параметр. Строка диапазонов может иметь два формата: она может указывать диапазоны напрямую или указать файл, содержащий сведения о диапазонах. Если диапазоны указываются напрямую, синтаксис представляет собой разделенный запятыми список формы offset1:length1, offset2:length2, где каждое смещение и длина являются 64-разрядным целым числом без знака. При указании файла диапазонов строка диапазонов должна иметь значение File= filename, где filename — это полный путь к файлу диапазонов. Сам файл диапазонов — это двоичный файл, отформатированный как список 64-разрядных целых чисел без знака. Первое целое число указывает, сколько диапазонов представлено в файле. Каждая последующая пара целых чисел представляет смещение и длину диапазона. Инициатор запроса также должен позаботиться о резервном копировании и восстановлении этого файла диапазонов.
Правила спецификации файлов
Спецификации файлов, добавленные с помощью механизмов различающегося файла и частичного файла, будут либо изменять спецификации файлов, заданные в IVssBackupComponents::GatherWriterMetadata , либо добавлять полностью новые файлы. При изменении спецификаций файлов, заданных в IVssBackupComponents::GatherWriterMetadata с помощью механизма частичного создания файла, инициатор запроса может ожидать, что спецификация файла будет точно соответствовать одной из спецификаций файлов, заданных в компоненте В IVssBackupComponents::GatherWriterMetadata. Спецификация файла не будет частично перекрывать другую спецификацию файла и не будет соответствовать спецификациям файлов в других компонентах этого модуля записи. Однако спецификации файлов, добавленные с помощью механизма частичного файла, могут частично перекрывать другую спецификацию файла. Если это так, спецификация differenced-file или partial-file переопределяет набор спецификаций в IVssBackupComponents::GatherWriterMetadata. Общие спецификации файла могут иметь значение альтернативного расположения (возвращаемое IVssWMFiledesc::GetAlternateLocation), указывающее альтернативное место для получения файла во время резервного копирования. Если спецификации файлов, заданные с помощью механизмов разных файлов или частичных файлов, соответствуют существующей спецификации файлов с альтернативным расположением, данные следует собирать из этого альтернативного расположения. Если спецификации файлов, заданные с помощью механизмов различающегося файла или частичного файла, не соответствуют ни одному из существующих спецификаций компонента, эти диапазоны файлов теперь следует добавить в резервную копию. Инициатор запроса может ожидать, что с помощью одного из этих механизмов будут добавлены только файлы на томах, которые уже включены в набор теневого копирования.
Резервное копирование без теневого копирования
Некоторые типы файлов могут не нуждаться в резервном копировании из тома теневого копирования. Например, это часто относится к файлам журнала базы данных. Так как файлы журналов растут монотонно, а модуль записи может точно указать, какие части файла нужно создать для резервного копирования с помощью частичных файлов, часто можно создать резервную копию исходного тома. В качестве оптимизации модуль записи может пометить, какие файлы требуют теневых копий для различных типов резервных копий, используя маску типа резервного копирования. Значение, возвращаемое из IVssWMFiledesc::GetBackupTypeMask , может содержать одно или несколько из следующих битовых значений:
-
VSS_FSBT_FULL_SNAPSHOT_REQUIRED
-
Теневое копирование требуется для полного резервного копирования.
-
VSS_FSBT_DIFFERENTIAL_SNAPSHOT_REQUIRED
-
Теневое копирование требуется для разностных резервных копий.
-
VSS_FSBT_INCREMENTAL_SNAPSHOT_REQUIRED
-
Теневое копирование, необходимое для добавочных резервных копий.
-
VSS_FSBT_LOG_SNAPSHOT_REQUIRED
-
Для резервных копий журналов требуется теневое копирование.
-
VSS_FSBT_ALL_SNAPSHOT_REQUIRED
-
Теневое копирование требуется для всех типов резервных копий; это значение по умолчанию.
Если определенный том содержит только компоненты, не требующие теневой копии для этой резервной копии, инициатор запроса может пропустить этап создания теневой копии для этого тома. Все данные на этом томе можно скопировать на носитель резервного копирования непосредственно из исходного тома.
Восстановление файлов
Последовательное восстановление
Завершив выполнение операции восстановления инициатором запроса, он отправляет событие PostRestore всем записи. Как правило, средства записи обрабатывают это событие, выполняя восстановление или другие операции после восстановления. Восстановление добавочных резервных копий обычно выполняется в виде последовательности операций восстановления, по одной на добавочную резервную копию. Инициатор запроса должен сообщить средству записи о том, что выполняется такое восстановление, чтобы предотвратить восстановление или другие нежелательные операции, пока восстановление не будет полностью завершено. Для этого вызывается метод IVssBackupComponents::SetAdditionalRestores. Этот метод вызывается для каждого компонента и указывает для модуля записи, что для этого компонента будут выполняться дополнительные операции восстановления. Для окончательного восстановления в последовательности флагу additional-restores должно быть присвоено значение false (значение по умолчанию), указывающее, что это последнее восстановление в последовательности для этого компонента.
Новые цели
При поддержке модуля записи инициатор запроса может восстановить файлы данных в расположении, отличном от исходного расположения времени резервного копирования. Инициатор запроса может проверка для этой поддержки, вызвав IVssExamineWriterMetadata::GetBackupSchema. Бит VSS_BS_WRITER_SUPPORTS_NEW_TARGET будет задан, если модуль записи поддерживает такое поведение. Инициатор запроса информирует модуля записи о новом расположении, вызывая IVssBackupComponents::AddNewTarget для каждой спецификации перемещаемого файла. Инициатор запроса также может решить восстановить определенный файл диапазонов в другом расположении. Инициатор запроса информирует модуля записи об этом изменении, вызывая IVssBackupComponents::SetRangesFilePath.
Целевые объекты
В сложных сценариях восстановления модуль записи может сопоставить диапазоны резервного файла с разными диапазонами того же или другого файла. Это можно сделать с помощью целевого механизма. Инициатор запроса может определить после этапа IVssBackupComponents::P reRestore , что этот механизм используется для компонента, вызвав метод IVssComponent::GetRestoreTarget и проверив возврат VSS_RT_DIRECTED. Инициатор запроса может получить все перенаправленные операции восстановления, вызвав IVssComponent::GetDirectedTargetCount и IVssComponent::GetDirectedTarget. IVssComponent::GetDirectedTarget вернет полный путь к исходному файлу в резервной копии и полный путь к целевому файлу, в который будет восстановлен. Он также возвращает список диапазонов для каждого из этих файлов. Затем инициатор запроса отвечает за восстановление указанных диапазонов в исходном файле в сопоставленные диапазоны в целевом файле. Формат строки диапазонов совпадает с форматом IVssComponent::GetPartialFile.
- Роль записи в добавочных и разностных резервных копиях VSS
- Роль инициатора запроса в добавочных и разностных резервных копиях VSS