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

Para dar suporte a uma operação de backup incremental ou diferencial , um solicitante deve fazer o seguinte:

  1. Determine qual grau de suporte de gravador está disponível (usando IVssBackupComponents::GetWriterMetadata para obter acesso a informações em Documentos de Metadados do Gravador)— em particular, determine qual esquema de backup tem suporte (VSS_BACKUP_SCHEMA).
  2. Defina um estado de backup apropriado.
  3. Obtenha especificações de nível de arquivo e de conjunto de arquivos para um backup incremental ou diferencial.
  4. Execute o backup.

Determinação do solicitante de suporte e configuração incrementais e diferenciais

Um solicitante precisa obter informações sobre o suporte ao gravador antes de selecionar componentes para inclusão em um backup incremental ou diferencial ou definir seu próprio estado.

Determinando o suporte ao gravador

Um solicitante determina se um determinado gravador dá suporte a backups incrementais ou diferenciais do VSS recuperando a máscara de esquema de backup do gravador usando o método IVssExamineWriterMetadata::GetBackupSchema .

A máscara de esquema de backup de um gravador que dá suporte a técnicas incrementais ou diferenciais do VSS conterá VSS_BS_INCREMENTAL ou VSS_BS_DIFFERENTIAL ou ambos. Os escritores também podem indicar restrições à sua participação com o sinalizador VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL . (Consulte VSS_BACKUP_SCHEMA para obter mais informações sobre esquemas de backup).

Definindo o estado de backup do solicitante

Um solicitante indica que um backup é um backup incremental ou diferencial definindo um tipo de backup como VSS_BT_INCREMENTAL ou VSS_BT_DIFFERENTIAL usando o método IVssBackupComponents::SetBackupState antes de gerar um evento PrepareForBackup .

O método IVssBackupComponents::SetBackupState também é usado para indicar se o solicitante fornece suporte parcial ao arquivo, que é frequentemente usado para implementar determinadas operações incrementais de backup e restauração.

Obtendo especificações de gravador para backups incrementais e diferenciais

As informações de especificação de backup de arquivo no nível do arquivo (VSS_FILE_SPEC_BACKUP_TYPE) contidas no Documento de Metadados do Gravador de cada gravador estão disponíveis para exame após o retorno bem-sucedido de IVssBackupComponents::GatherWriterMetadata.

No entanto, um gravador pode adicionar arquivos diferenciados ou solicitar suporte parcial a arquivos até o tratamento bem-sucedido do evento PostSnapshot .

A especificação de suporte parcial e de arquivo de arquivo diferenciado pode substituir o tipo de backup de especificação de arquivo, portanto, os solicitantes podem querer adiar uma análise completa de todas as especificações de gravador sobre backups incrementais e diferenciais até depois do retorno bem-sucedido de IVssBackupComponents::P repareForBackup.

Obtendo informações de especificação de backup de arquivo

As informações de especificação de backup de arquivo no nível do arquivo (VSS_FILE_SPEC_BACKUP_TYPE) estão contidas no Documento de Metadados do Gravador de cada gravador e podem ser examinadas imediatamente após o retorno bem-sucedido de IVssBackupComponents::GatherWriterMetadata.

Os solicitantes devem obter máscaras de especificação de backup de arquivo (VSS_FILE_SPEC_BACKUP_TYPE) para que cada conjunto de arquivos de cada um dos componentes de um gravador seja incluído no backup incremental ou diferencial, independentemente de o componente ter sido incluído explicita ouimplicitamente .

Um solicitante pode determinar qual documento de metadados do gravador deve ser consultado usando IVssBackupComponents::GetWriterComponentsCount e IVssBackupComponents::GetWriterComponents. A instância da interface IVssWriterComponentsExt retornada por IVssBackupComponents::GetWriterComponents fornece informações de gravador por meio do método IVssWriterComponentsExt::GetWriterInfo .

O solicitante obtém informações de componente por meio de instâncias da interface IVssWMComponent correspondente a um componente incluído gerenciado por um determinado gravador usando IVssExamineWriterMetadata::GetComponent.

As informações sobre conjuntos de arquivos gerenciados pelo componente correspondente à interface IVssWMComponent são obtidas por chamadas para IVssWMComponent::GetFile, IVssWMComponent::GetDatabaseFile ou IVssWMComponent::GetDatabaseLogFile (conforme apropriado).

Essas chamadas podem retornar instâncias da interface IVssWMFiledesc para cada um dos conjuntos de arquivos de um componente.

O tipo de backup de especificação de arquivo de um conjunto de arquivos é obtido chamando IVssWMFiledesc::GetBackupTypeMask.

Obtendo informações de arquivo parcial e arquivo diferenciado

Um solicitante obtém informações parciais de arquivo e arquivos diferentes por meio da interface IVssComponent .

Um solicitante pode iterar em todos os gravadores incluídos em um backup usando IVssBackupComponents::GetWriterComponentsCount e IVssBackupComponents::GetWriterComponents.

A instância de uma interface IVssWriterComponentsExt retornada por IVssBackupComponents::GetWriterComponents fornece acesso a todas as instâncias da interface IVssComponent correspondentes aos componentes explicitamente incluídos de um determinado gravador por meio dos métodos IVssWriterComponentsExt::GetComponent e IVssWriterComponentsExt::GetComponentCount .

Um solicitante precisará percorrer todas as instâncias de IVssComponent para todos os gravadores cujo esquema dê suporte ao backup incremental ou diferencial, ou seja, gravadores cuja máscara de esquema de backup, conforme retornado por IVssExamineWriterMetadata::GetBackupSchema, inclui VSS_BS_INCREMENTAL quando o tipo de backup é VSS_BT_INCREMENTAL ou VSS_BS_DIFFERENTIAL quando o tipo de backup é VSS_BS_DIFFERENTIAL.

As informações parciais do arquivo são obtidas chamando IVssComponent::GetPartialFileCount e IVssComponent::GetPartialFile (consulte Trabalhando com arquivos parciais).

Para gravadores que dão suporte a operações de backup com base nos últimos dados de modificação de um arquivo (gravadores cuja máscara de esquema de backup, conforme retornado por IVssExamineWriterMetadata::GetBackupSchema, inclui VSS_BS_LAST_MODIFY), informações de arquivo diferentes são obtidas chamando IVssComponent::GetDifferencedFilesCount e IVssComponent::GetDifferencedFile.

Observe que arquivos diferentes podem ser novos arquivos, ou seja, arquivos que não são membros de nenhum conjunto de arquivos atualmente em um determinado documento de metadados do gravador.

Os solicitantes não devem encontrar arquivos incluídos para operações de arquivo parciais e como arquivos diferenciados. Se um solicitante encontrar essa circunstância, ele deverá retornar e registrar um erro de gravador.

Um solicitante ainda pode optar por continuar fazendo backup dos arquivos do gravador problemático, mas, nesse caso, deve fazê-lo de acordo com a especificação encontrada nas informações de arquivo diferentes.

Implementando backups incrementais ou diferenciais

Antes de implementar um backup, os solicitantes devem ter informações sobre quais gravadores dão suporte a um backup incremental ou diferencial , todas as operações de arquivo parciais solicitadas, todos os arquivos diferenciados e o tipo de backup de especificação de arquivo de todos os outros arquivos.

Gravadores sem suporte

Gravadores cujo esquema não dá suporte ao backup incremental ou diferencial (gravadores cuja máscara de esquema de backup, conforme retornado por IVssExamineWriterMetadata::GetBackupSchema, inclui VSS_BS_INCREMENTAL quando o tipo de backup é VSS_BT_INCREMENTAL ou não inclui VSS_BS_DIFFERENTIAL quando o tipo de backup é VSS_BS_DIFFERENTIAL) não podem fornecer suporte direto a uma operação de backup incremental ou diferencial.

Isso não significa necessariamente que os dados dos gravadores não estarão envolvidos em uma operação de backup incremental ou diferencial. No entanto, a escolha do que fazer fica a critério do solicitante. O solicitante pode fazer qualquer um dos seguintes procedimentos:

  • Fazer backup de nenhum arquivo pertencente aos gravadores sem suporte (indicar claramente isso para o usuário)
  • Fazer backup de todos os arquivos de gravadores sem suporte
  • Execute um backup incremental usando dados do sistema de arquivos e os logs de histórico do próprio solicitante.

A última alternativa deve ser usada com muito cuidado e somente se o solicitante entender se os gravadores envolvidos podem dar suporte ao backup incremental ou diferencial e à restauração de dados independentemente do mecanismo VSS.

Escritores de suporte

Um solicitante precisa processar (em ordem) todos os arquivos diferenciados de um gravador, manipular quaisquer solicitações de arquivo parciais e, em seguida, fazer backup dos arquivos restantes de acordo com o tipo de backup de especificação de arquivo (VSS_FILE_SPEC_BACKUP_TYPE).

  1. Fazendo backup de arquivos diferenciados:

    Para gravadores que dão suporte a operações de backup com base nos últimos dados de modificação (gravadores cuja máscara de esquema de backup, conforme retornado por IVssExamineWriterMetadata::GetBackupSchema, inclui VSS_BS_LAST_MODIFY), um solicitante usa as informações de caminho, especificação de arquivo e sinalizador de recursão retornadas por IVssComponent::GetDifferencedFile para gerar uma lista de arquivos como candidatos para backup incremental ou restauração.

    IVssComponent::GetDifferencedFile também pode retornar uma hora da última modificação (expressa como uma estrutura FILETIME ).

    Se a hora da última modificação fornecida pelo gravador for diferente de zero, o solicitante a usará como base (em vez de informações do sistema de arquivos ou os próprios dados armazenados do solicitante) para determinar se o arquivo deve ser incluído no backup incremental ou diferencial .

    Por exemplo, se a hora da última modificação de um arquivo, conforme retornado pelo gravador, foi:

    • Após o último backup completo, o arquivo deve ser incluído em backups incrementais e diferenciais.
    • Após o último backup completo, mas antes do último backup incremental, o arquivo deve ser incluído em operações de backup incremental, mas não em backups diferenciais.

    Se a hora da última modificação fornecida pelo gravador for zero, o solicitante deverá usar informações do sistema de arquivos e seus próprios dados armazenados para determinar o tempo de modificação do arquivo diferenciado.

  2. Usando operações parciais de arquivo:

    Se um gravador solicitou que um arquivo fosse copiado em backup usando uma operação de arquivo parcial, o solicitante usará as informações de deslocamento de arquivo para salvar os segmentos de arquivo indicados na mídia de backup. (Consulte Trabalhando com arquivos parciais para obter mais informações sobre operações parciais de arquivo).

    Conforme observado acima, um gravador não deve designar um arquivo como um arquivo diferente e como participante de uma operação de arquivo parcial. Se um solicitante encontrar essa circunstância, ele deverá retornar e registrar um erro de gravador.

    Um solicitante ainda pode optar por continuar fazendo backup dos arquivos do gravador problemático, mas, nesse caso, deve fazê-lo de acordo com a especificação encontrada nas informações de arquivo diferentes.

  3. Trabalhando com o tipo de backup de especificação de arquivo:

    Depois de processar todos os arquivos diferentes e operações parciais de arquivo, o solicitante agora processa todos os arquivos restantes em seu conjunto de backup com base em seu tipo de backup de especificação de arquivo (VSS_FILE_SPEC_BACKUP_TYPE).

    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 que um solicitante precisa copiar dados de uma cópia de sombra ao executar operações de backup INCREMENTAL, DIFFERENTIAL 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", um solicitante copiará todos os seus membros para a mídia de backup durante um backup incremental ou diferencial, independentemente de quando ocorreu o backup ou modificação 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 gravador defina explicitamente o tipo de backup de especificação de arquivo, caso contrário, os solicitantes precisarão copiar esses arquivos não manipulados por operações de arquivo parciais ou arquivos designados diferentes na maioria dos conjuntos de arquivos normalmente serão copiados em sua totalidade para a mídia de backup.

Carimbos de Backup

Gravadores que dão suporte a carimbos de backup (VSS_BS_TIMESTAMP) podem optar por gerar informações de carimbo de backup a serem usadas para dar suporte a operações futuras de backup e restauração incrementais e diferenciais.

O formato e as informações contidas em cadeias de caracteres que contêm informações de carimbo de backup são particulares para o gravador que as gera; o solicitante não sabe como processar essas informações.

Os gravadores de suporte armazenam o carimbo de backup no Documento de Componentes de Backup como uma cadeia de caracteres usando o método IVssComponent::SetBackupStamp .

A função do solicitante no tratamento de informações de carimbo de backup é (se existir) para disponibilizá-las para o gravador chamando IVssBackupComponents::SetPreviousBackupStamp em uma operação futura de backup ou restauração.