Compartilhar via


Trabalhando com arquivos parciais

Às vezes, é útil fazer backup e restaurar apenas seções de arquivos. O VSS fornece mecanismos de arquivo parciais , que, se os solicitantes dão suporte a ele, permite que os gravadores especifiquem backups e restaurações parciais de arquivos.

As operações de arquivo parciais são frequentemente de maior uso para gravadores que mantêm arquivos muito grandes, apenas uma pequena fração da qual a alteração entre as operações de backup. Sendo esse o caso, é frequentemente útil copiar somente essa seção que foi alterada para a mídia de backup. Por esse motivo, as operações de arquivo parciais normalmente são, mas não exclusivamente, usadas para dar suporte a operações incrementais de backup e restauração.

Se um gravador quiser implementar uma operação de arquivo parcial, ele usará CVssWriter::IsPartialFileSupportEnabled para determinar se o solicitante com o qual está trabalhando dá suporte à operação.

Se o solicitante der suporte a operações de arquivo parciais e se ele adicionar o componente que gerencia o arquivo (ou o componente que define o conjunto de componentes que contém o arquivo) ao Documento de Componentes de Backup, um gravador indicará quais seções do arquivo salvar (normalmente durante o tratamento de um evento PrepareForBackup ou PostSnapshot ) chamando IVssComponent::AddPartialFile.

Além de um caminho e um nome de arquivo, o gravador fornece o intervalo, informações opcionais de metadados para IVssComponent::AddPartialFile.

As informações de intervalo são fornecidas como uma cadeia de caracteres que contém um dos seguintes:

  • Pares de deslocamentos no arquivo a serem copiados (em bytes) e o comprimento da seção a ser feito com backup (em bytes), o deslocamento e o comprimento separados por dois-pontos e cada par separado por uma vírgula, por exemplo, Offset1**:Length1,** Offset2**:**Length2.

    Cada valor é um inteiro de 64 bits (no formato hexadecimal ou decimal) especificando um deslocamento de bytes e um comprimento em bytes, respectivamente.

  • O caminho completo, incluindo o nome do arquivo, no sistema atual de um arquivo de intervalos binários que contém o seguinte:

    • O número (expresso como um inteiro de 64 bits) de intervalos de arquivos distintos contidos no arquivo
    • Cada intervalo expresso como um par de inteiros de 64 bits: o primeiro membro do par sendo o deslocamento para o arquivo que está sendo feito backup (em bytes) e o segundo membro com o comprimento dos dados a serem copiados (em bytes)

Se um gravador usar um arquivo de intervalos para especificar uma operação de arquivo parcial, um solicitante deverá garantir que esse arquivo tenha backup (mesmo que o arquivo não seja necessariamente parte do conjunto de backup padrão) ou que as informações de intervalos sejam preservadas na mídia de backup de alguma outra maneira. Se as informações do arquivo de intervalos não forem copiadas em backup, a restauração do arquivo de backup parcial será impossível.

O gravador também pode adicionar uma cadeia de caracteres que contém metadados. Esses metadados podem estar em um formato específico do gravador porque se destinam a permitir que o gravador valide quaisquer restaurações futuras.

Com essas informações, um solicitante de suporte pode executar um backup de arquivo parcial.

Por exemplo, considere um arquivo grande cujo cabeçalho (bytes 64-512) contém uma contagem de registros e outras informações atualizadas com frequência e cujos dados mais recentes devem ser encontrados nos últimos 65536 bytes do arquivo — bytes 0x1239E8577A para 0x1239E7577A.

Um gravador pode especificar uma lista de intervalos como a cadeia de caracteres "64:448,0x1239E8577A:65536".

Na restauração e antes de realmente executar uma operação de restauração, um solicitante deve marcar para ver se algum arquivo requer suporte parcial ao arquivo.

Para fazer isso, o solicitante primeiro itera sobre os gravadores com componentes armazenados em seu Documento de Componentes de Backup usando IVssBackupComponents::GetWriterComponentsCount e IVssBackupComponents::GetWriterComponents.

A interface IVssBackupComponents::GetWriterComponents é usada para retornar instâncias da interface IVssWriterComponentsExt , que fornecem IVssWriterComponentsExt::GetComponent e IVssWriterComponentsExt::GetComponentCount, que permitem que o solicitante obtenha instâncias IVssComponent .

Isso permite que um solicitante obtenha informações sobre os arquivos com backup parcial para participar de uma restauração usando IVssComponent::GetPartialFileCount e IVssComponent::GetPartialFile para a instância de IVssComponent correspondente ao componente que gerencia o arquivo (ou o componente que define o conjunto de componentes que contém o arquivo).

Se a operação de arquivo parcial foi controlada por um arquivo de intervalos, esse arquivo deve ser restaurado antes de copiar os dados de volta para o disco. Pode acontecer que o solicitante precise copiar o arquivo de intervalos de volta para um novo local no disco. Nesse caso, ele indica que o fez por meio do IVssBackupComponents::SetRangesFilePath.

Em seguida, o solicitante continua a copiar dados para os locais apropriados no destino de restauração já em disco.

Um gravador (durante o tratamento de um evento PostRestore ), examinando IVssComponent::GetFileRestoreStatus para os arquivos indicados por IVssComponent::GetPartialFile, determina se a operação de arquivo parcial foi bem-sucedida. O gravador sempre deve tentar verificar a correção dessa restauração usando as informações de deslocamento e os metadados incluídos no Documento de Componentes de Backup.

Se o solicitante tiver que restaurar o arquivo de intervalos para um novo local, o VSS atualizará essas informações para que o caminho retornado por IVssComponent::GetPartialFile esteja correto.