Função gravador em backups incrementais e diferenciais do VSS

A participação de um gravador em backups incrementais e diferenciais normalmente ocorre durante a manipulação de eventos Identifi (CVssWriter::OnIdentify), PrepareForBackup (CVssWriter:OnPrepareBackup) e PostSnapshot (CVssWriter:OnPostSnapshot). A forma como um gravador participa é moldada se ele dá suporte a carimbos de backup e últimos tempos de modificação e se o solicitante que executa o backup dá suporte a operações de arquivo parciais.

Manipulando eventos de identificação durante backups incrementais e diferenciais

Ao manipular o evento Identifi, os gravadores estabelecem sua arquitetura básica para a operação de backup incremental e diferencial por meio das máscaras de esquema de backup (VSS_BACKUP_SCHEMA) e de tipo de backup de especificação de arquivo (VSS_FILE_SPEC_BACKUP_TYPE).

Um gravador indica quais operações ele dá suporte em seu Documento de Metadados do Gravador criando uma máscara de bits de valores de VSS_BACKUP_SCHEMA e passando-o para o método IVssCreateWriterMetadata::SetBackupSchema . Com isso, um gravador pode indicar se ele dá suporte ao seguinte:

  • Backups incrementais (VSS_BS_INCREMENTAL)
  • Backups diferenciais (VSS_BS_DIFFERENTIAL)
  • Backups incrementais e diferenciais não podem ser mistos (VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL)
  • Backups incrementais e diferenciais usando selos de backup (VSS_BS_TIMESTAMPED)
  • Backups incrementais e diferenciais com base em informações sobre a última modificação de um arquivo (VSS_BS_LAST_MODIFY)

Os gravadores usam a máscara de tipo de backup de especificação de arquivo para fornecer informações de nível de conjunto de arquivos aos solicitantes sobre como incluir arquivos em um backup incremental ou diferencial.

Um gravador pode definir a máscara de tipo de backup de especificação de arquivo de um conjunto de arquivos quando ele adiciona o conjunto de arquivos a um componente criando uma máscara de bits de valores de VSS_FILE_SPEC_BACKUP_TYPE e passando-a para IVssCreateWriterMetadata::AddDatabaseFiles, IVssCreateWriterMetadata::AddDatabaseLogFiles ou IVssCreateWriterMetadata::AddFilesToFileGroup.

Há três valores de "backup necessário" da enumeração VSS_FILE_SPEC_BACKUP_TYPE que afetam backups diferenciais e incrementais:

  • VSS_FSBT_ALL_BACKUP_REQUIRED
  • VSS_FSBT_INCREMENTAL_BACKUP_REQUIRED
  • VSS_FSBT_DIFFERENTIAL_BACKUP_REQUIRED

Há três valores de "cópia de sombra necessária":

  • VSS_FSBT_ALL_SNAPSHOT_REQUIRED
  • VSS_FSBT_INCREMENTAL_SNAPSHOT_REQUIRED
  • VSS_FSBT_DIFFERENTIAL_SNAPSHOT_REQUIRED

Conjuntos de arquivos marcados com um tipo de backup de especificação de arquivo de "cópia de sombra necessária" indicam se um solicitante precisa copiar dados de uma cópia de sombra ao executar operações de backup INCREMENTAL, DIFERENCIAL ou ALL (que inclui operações incrementais e diferenciais).

O sinalizador "backup necessário", aplicado a operações de backup INCREMENTAL, DIFERENCIAL ou ALL, indica que o gravador espera que uma cópia da versão atual do conjunto de arquivos esteja disponível após a restauração de qualquer operação de backup. Normalmente, isso significa que, se um conjunto de arquivos for marcado com "backup necessário", todos os seus membros serão copiados para a mídia de backup durante um backup incremental ou diferencial, independentemente de quando o backup ou modificação ocorreu pela última vez.

Por padrão, os conjuntos de arquivos são adicionados a componentes com um tipo de backup de especificação de arquivo de VSS_FSBT_ALL_BACKUP_REQUIRED | VSS_FSBT_ALL_SNAPSHOT_REQUIRED. Portanto, a menos que um desenvolvedor de gravador decida não usar o padrão (escolhendo outro tipo de backup de especificação de arquivo, usando operações de arquivo parciais ou usando arquivos diferentes), os arquivos na maioria dos conjuntos de arquivos normalmente serão copiados em sua totalidade para a mídia de backup.

Neste ponto, o Documento de Metadados do Gravador do gravador é totalmente preenchido com a maioria das informações que um solicitante precisará para iniciar um backup diferencial ou incremental. A especificação de adição de informações de nível de arquivo ou conjunto de arquivos para dar suporte ao backup será tratada durante o evento PrepareForBackup .

Manipulando eventos PrepareForBackup durante backups incrementais e diferenciais

Antes que o solicitante prossiga com a operação de backup real, os gravadores podem modificar a especificação de um backup incremental ou diferencial alterando o Documento de Componentes de Backup do solicitante por meio da interface IVssComponent .

Como os gravadores usam a interface IVssComponent , eles normalmente executam esses preparativos durante a manipulação do evento PrepareForBackup .

Em CVssWriter:OnPrepareBackup, os gravadores podem especificar com mais precisão como alguns arquivos devem ser avaliados para backup, especificar quais mecanismos devem ser usados no backup deles e, possivelmente, definir selos de backup.

Arquivos Parciais

Se um solicitante der suporte a eles, um gravador poderá optar por ter um backup incremental ou diferencial implementado usando operações de arquivo parciais. (Os gravadores podem determinar se um solicitante dá suporte a operações de arquivo parciais chamando CVssWriter::IsPartialFileSupportEnabled.)

Os gravadores usam IVssComponent::AddPartialFile para indicar essas partes dos arquivos selecionados a serem copiados em backup durante a operação incremental ou diferencial. Os solicitantes devem respeitar essa especificação e sempre devem fazer backup das seções especificadas dos arquivos. (Consulte Trabalhando com arquivos parciais para obter mais informações sobre operações parciais de arquivos.)

Usando IVssComponent::AddPartialFile, um gravador pode adicionar um arquivo ao backup que não foi adicionado anteriormente a um de seus conjuntos de componentes (por IVssCreateWriterMetadata::AddDatabaseFiles, IVssCreateWriterMetadata::AddDatabaseLogFiles ou IVssCreateWriterMetadata::AddFilesToFileGroup) como um arquivo parcial. Todos os novos arquivos adicionados ao backup dessa maneira devem estar em um volume que já está sendo copiado para esse backup.

Se um arquivo estiver envolvido com operações de arquivo parciais, isso substituirá qualquer tipo de backup de especificação de arquivo, que será ignorado.

Arquivos diferenciados

Os gravadores que dão suporte a um último esquema de backup modificado (VSS_BS_SCHEMA) podem adicionar arquivos diferenciados a um backup incremental ou diferencial.

Ao especificar um arquivo diferente, um gravador usa IVssComponent::AddDifferencedFileByLastModifyTime e especifica um caminho, um nome de arquivo e um sinalizador recursivo. No entanto, eles não precisam corresponder a um conjunto de arquivos incluído em nenhum componente.

Na verdade, um gravador pode adicionar um arquivo não adicionado anteriormente a um de seus conjuntos de componentes (por IVssCreateWriterMetadata::AddDatabaseFiles, IVssCreateWriterMetadata::AddDatabaseLogFiles ou IVssCreateWriterMetadata::AddFilesToFileGroup) ao backup como um arquivo diferente. Todos os novos arquivos adicionados ao backup dessa maneira devem estar em um volume que já está sendo copiado para esse backup.

Normalmente, um gravador também especificará uma hora da última modificação ao adicionar um arquivo diferente, com base no próprio mecanismo de histórico do gravador. Esse último tempo de modificação, se especificado, sempre deve ser usado pelos solicitantes para determinar se um arquivo precisa ser incluído em um backup incremental ou diferencial.

Um gravador pode optar por não especificar um último tempo de modificação ao adicionar um arquivo diferenciado a um conjunto de backup incremental ou diferencial. Se esse for o caso, os solicitantes estarão livres para usar seus próprios mecanismos, por exemplo, logs de backups anteriores ou informações do sistema de arquivos, para determinar se o arquivo diferenciado deve ser incluído em um backup incremental ou diferencial.

O tipo de backup de especificação de arquivo de qualquer arquivo diferente é ignorado.

Selos de Backup

Os gravadores que dão suporte a selos de backup (VSS_BS_TIMESTAMP) têm seu próprio formato privado para armazenar informações sobre quando ocorreu um backup pela última vez. Essas informações são geradas pelo gravador durante o backup.

O carimbo de backup é armazenado no Documento de Componentes de Backup como uma cadeia de caracteres pelo método IVssComponent::SetBackupStamp . O carimbo de backup se aplica a todos os conjuntos de arquivos no componente (ou conjunto de componentes) correspondente à instância do IVssComponent.

Se um solicitante tiver acesso ao carimbo de backup de um backup anterior, ele o disponibilizará para o gravador chamando IVssBackupComponents::SetPreviousBackupStamp.

Em seguida, um gravador pode examinar esse carimbo de data/hora usando IVssComponent::GetPreviousBackupStamp.

Observe que o solicitante apenas armazena e retorna a cadeia de caracteres que contém o carimbo de backup. Ele não sabe nada sobre o formato da cadeia de caracteres ou como usá-la; somente o gravador tem essa informação.

Um gravador pode optar por atualizar o carimbo de backup atual usando IVssComponent::SetBackupStamp depois de ter chamado IVssComponent::GetPreviousBackupStamp, gravando em seu próprio formato a data da operação de backup incremental ou diferencial atual.