Usar a Recuperação do sistema automatizada do VSS para recuperação de desastre

Um aplicativo de backup e recuperação do VSS que executa a recuperação de desastre (também chamada de recuperação bare-metal) pode usar o gravador asr (Recuperação automatizada do sistema) junto com o Windows PE (Ambiente de Pré-Instalação do Windows) para fazer backup e restaurar volumes críticos e outros componentes do estado do sistema inicializável. O aplicativo de backup é implementado como um solicitante vss.

Nota Os aplicativos que usam ASR devem licenciar o Windows PE.

Windows Server 2003 e Windows XP: O ASR não é implementado como um gravador VSS.

Para obter informações sobre ferramentas de rastreamento que você pode usar com o ASR, consulte Usando ferramentas de rastreamento com aplicativos ASR VSS.

Neste artigo:

Visão geral das tarefas da fase de backup

No momento do backup, o solicitante executa as etapas a seguir.

Observação

Todas as etapas são necessárias, a menos que indicado de outra forma.

 

  1. Chame a função CreateVssBackupComponents para criar uma instância da interface IVssBackupComponents e chame o método IVssBackupComponents::InitializeForBackup para inicializar a instância para gerenciar um backup.

  2. Chame IVssBackupComponents::SetContext para definir o contexto para a operação de cópia de sombra.

  3. Chame IVssBackupComponents::SetBackupState para configurar o backup. Defina o parâmetro bBackupBootableSystemState como true para indicar que o backup incluirá um estado do sistema inicializável.

  4. Escolha quais componentes críticos no Documento de Metadados do Gravador do ASR fazer backup e chamar IVssBackupComponents::AddComponent para cada um deles.

  5. Chame IVssBackupComponents::StartSnapshotSet para criar um novo conjunto de cópias de sombra vazio.

  6. Chame IVssBackupComponents::GatherWriterMetadata para iniciar o contato assíncrono com gravadores.

  7. Chame IVssBackupComponents::GetWriterMetadata para recuperar o documento de metadados do gravador do ASR. A ID do gravador do ASR é BE000CBE-11FE-4426-9C58-531AA6355FC4 e a cadeia de caracteres de nome do gravador é "Gravador ASR".

  8. Chame IVssExamineWriterMetadata::SaveAsXML para salvar uma cópia do documento de metadados do gravador do ASR.

  9. Chame IVssBackupComponents::AddToSnapshotSet para cada volume que pode participar de cópias de sombra para adicionar o volume ao conjunto de cópias de sombra.

  10. Chame IVssBackupComponents::P repareForBackup para notificar os gravadores a se prepararem para uma operação de backup.

  11. Chame IVssBackupComponents::GatherWriterStatus e IVssBackupComponents::GetWriterStatus (ou IVssBackupComponentsEx3::GetWriterStatus) para verificar o status do gravador ASR.

  12. Neste ponto, você pode consultar mensagens de falha que foram definidas pelo gravador em seu método CVssWriter::OnPrepareBackup . Por exemplo, código que mostra como exibir essas mensagens, consulte IVssComponentEx::GetPrepareForBackupFailureMsg.

  13. Chame IVssBackupComponents::D oSnapshotSet para criar uma cópia de sombra de volume.

  14. Chame IVssBackupComponents::GatherWriterStatus e IVssBackupComponents::GetWriterStatus para verificar o status do gravador ASR.

  15. Faça backup dos dados.

  16. Indique se a operação de backup foi bem-sucedida chamando IVssBackupComponents::SetBackupSucceeded.

  17. Chame IVssBackupComponents::BackupComplete para indicar que a operação de backup foi concluída.

  18. Chame IVssBackupComponents::GatherWriterStatus e IVssBackupComponents::GetWriterStatus. A memória do estado da sessão do gravador é um recurso limitado e os gravadores devem, eventualmente, reutilizar os estados de sessão. Esta etapa marca o estado da sessão de backup do gravador como concluído e notifica o VSS de que esse slot de sessão de backup pode ser reutilizado por uma operação de backup subsequente.

    Observação

    Isso só é necessário no Windows Server 2008 com Service Pack 2 (SP2) e anterior.

     

  19. Chame IVssBackupComponents::SaveAsXML para salvar uma cópia do Documento de Componentes de Backup do solicitante. As informações no Documento de Componentes de Backup são usadas no momento da restauração quando o solicitante chama o método IVssBackupComponents::InitializeForRestore .

Escolhendo quais componentes críticos fazer backup

Na fase de inicialização de backup, o gravador ASR relata os seguintes tipos de componentes em seu Documento de Metadados do Gravador:

  • Volumes críticos, como os volumes inicialização, sistema e Ambiente de Recuperação do Windows (Windows RE) e a partição Windows RE associada à instância do Windows Vista ou do Windows Server 2008 em execução no momento. Um volume será um volume crítico se contiver informações de estado do sistema. Os volumes de inicialização e sistema são incluídos automaticamente. O solicitante deve incluir todos os volumes que contêm componentes críticos do sistema relatados por gravadores, como os volumes que contêm o Active Directory. Os componentes críticos do sistema são marcados como "não selecionáveis para backup". No VSS, "não selecionável" significa "não opcional". Portanto, o solicitante é necessário para fazer backup deles como parte do estado do sistema. Para obter mais informações, consulte Backup e restauração do estado do sistema. Os componentes para os quais o sinalizador VSS_CF_NOT_SYSTEM_STATE está definido não são críticos para o sistema.

    Observação

    O componente ASR é um componente crítico do sistema que é relatado pelo gravador ASR.

     

  • Discos. Cada disco fixo no computador é exposto como um componente no ASR. Se um disco não tiver sido excluído durante o backup, ele será atribuído durante a restauração e poderá ser recriado e reformatado. Observe que, durante a restauração, o solicitante ainda pode recriar um disco que foi excluído durante o backup chamando o método IVssBackupComponents::SetRestoreOptions . Se um disco em um pacote de disco dinâmico estiver selecionado, todos os outros discos nesse pacote também deverão ser selecionados. Se um volume for selecionado porque é um volume crítico (ou seja, um volume que contém informações de estado do sistema), cada disco que contém uma extensão para esse volume também deverá ser selecionado. Para encontrar as extensões de um volume, use o código de controle IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS .

    Observação

    Durante o backup, o solicitante deve incluir todos os discos fixos. Se o disco que contém o conjunto de backup do solicitante for um disco local, esse disco deverá ser incluído. Durante a restauração, o solicitante deve excluir o disco que contém o conjunto de backup do solicitante para impedir que ele seja substituído.

     

    Em um ambiente clustering, o ASR não recria o layout dos discos compartilhados do cluster. Esses discos devem ser restaurados online depois que o sistema operacional for restaurado no Windows RE.

  • Repositório BCD (Dados de Configuração de Inicialização). Esse componente especifica o caminho do diretório que contém o repositório BCD. O solicitante deve especificar esse componente e fazer backup de todos os arquivos no diretório do repositório BCD. Para obter mais informações sobre o repositório BCD, consulte Sobre BCD.

    Observação

    Em computadores que usam a EFI (Interface de Firmware Estendido), a ESP (Partição do Sistema EFI) está sempre oculta e não pode ser incluída em uma cópia de sombra de volume. O solicitante deve fazer backup do conteúdo dessa partição. Como essa partição não pode ser incluída em uma cópia de sombra de volume, o backup só pode ser executado a partir do volume dinâmico, não da cópia de sombra. Para obter mais informações sobre EFI e ESP, consulte Guia de apresentação.

Os nomes dos componentes usam os seguintes formatos:

  • Para componentes de disco, o formato é

    <COMPONENT logicalPath="Disks" componentName="harddiskn" componentType="filegroup" />

    em que n é o número do disco. Somente o número do disco é registrado. Para obter o número do disco, use o código de controle IOCTL_STORAGE_GET_DEVICE_NUMBER .

  • Para componentes de volume, o formato é

    <COMPONENT logicalPath="Volumes" componentName="Volume{GUID}" componentType="filegroup" />

    em que GUID é o GUID do volume.

  • Para o componente de repositório BCD, o formato é

    <COMPONENT logicalPath="BCD" componentName="BCD" componentType="filegroup" componentCaption = "Este é o caminho para o repositório BCD de inicialização e os gerenciadores de inicialização... Todos os arquivos neste diretório precisam ser copiados em backup...">

    Se a partição do sistema tiver um nome GUID de volume, esse componente será selecionável. Caso contrário, ele não será selecionável.

    Observação

    O ASR adiciona os arquivos ao grupo de arquivos do componente do repositório BCD da seguinte maneira:

    • Para discos EFI, o ASR adiciona

      SystemPartitionPath\EFI\Microsoft\Boot\*.*

      em que SystemPartitionPath é o caminho para a partição do sistema.

    • Para discos GPT, o ASR adiciona

      SystemPartitionPath\Boot\*.*

      em que SystemPartitionPath é o caminho para a partição do sistema.

    • O caminho de partição do sistema pode ser encontrado sob a seguinte chave do Registro: HKEY_LOCAL_MACHINE\\ SystemSetup\SystemPartition

     

Na restauração, todos os componentes marcados como volumes críticos devem ser restaurados. Se um ou mais volumes críticos não puderem ser restaurados, a operação de restauração falhará.

Na fase PreRestore da sequência de restauração, os discos que não foram excluídos durante o backup são recriados e reformatados por padrão. No entanto, eles não serão recriados ou reformatados se atenderem às seguintes condições:

  • Um disco básico não será recriado se seu layout de disco estiver intacto ou apenas alterações aditivas tiverem sido feitas nele. O layout do disco estará intacto se as seguintes condições forem verdadeiras:

    • A assinatura de disco, o estilo de disco (GPT ou MBR), o tamanho do setor lógico e o deslocamento de início do volume não são alterados.
    • O tamanho do volume não é reduzido.
    • Para discos GPT, o identificador de partição não é alterado.
  • Um disco dinâmico não será recriado se seu layout de disco estiver intacto ou apenas alterações aditivas tiverem sido feitas nele. Para que um disco dinâmico esteja intacto, todas as condições de um disco básico devem ser atendidas. Além disso, toda a estrutura de volume do pacote de discos deve estar intacta. A estrutura de volume do pacote de discos estará intacta se atender às seguintes condições, que se aplicam aos discos MBR e GPT:

    • O número de volumes disponíveis no pacote físico durante a restauração deve ser maior ou igual ao número de volumes especificados nos metadados do gravador ASR durante o backup.

    • O número de plexes por volume deve ser inalterado.

    • O número de membros deve ser inalterado.

    • O número de extensões de disco físico deve ser maior do que o número de extensões de disco especificadas nos metadados do gravador ASR.

    • Um pacote intacto permanece intacto quando volumes adicionais são adicionados ou se um volume no pacote é estendido (por exemplo, de um volume simples para um volume estendido).

      Observação

      Se um volume simples for espelhado, o pacote não estará intacto e será recriado para garantir que o bcd e o estado do volume de inicialização permaneçam consistentes após a restauração. Se os volumes forem excluídos, o pacote será recriado.

       

  • Se a estrutura de volume do pacote de disco dinâmico estiver intacta e apenas alterações aditivas tiverem sido feitas a ela, os discos no pacote não serão recriados.

    Windows Vista: Os discos dinâmicos são sempre recriados. Observe que esse comportamento mudou com o Windows Server 2008 e o Windows Vista com Service Pack 1 (SP1).

A qualquer momento antes do início da fase de restauração, o solicitante pode especificar que os discos devem ser formatados rapidamente definindo a chave do Registro HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ASR\RestoreSession. Nessa chave, há um valor chamado QuickFormat com o tipo de dados REG_DWORD. Se esse valor não existir, você deverá criá-lo. Defina os dados do valor QuickFormat como 1 para formatação rápida ou 0 para formatação lenta.

Se o valor QuickFormat não existir, os discos serão formatados lentamente.

A formatação rápida é significativamente mais rápida do que a formatação lenta (também chamada de formatação completa). No entanto, a formatação rápida não verifica cada setor no volume.

Visão geral das tarefas da fase de restauração

No momento da restauração, o solicitante executa as seguintes etapas:

Observação

Todas as etapas são necessárias, a menos que indicado de outra forma.

 

  1. Chame a função CreateVssBackupComponents para criar uma instância da interface IVssBackupComponents e chame o método IVssBackupComponents::InitializeForRestore para inicializar a instância de restauração carregando o Documento de Componentes de Backup do solicitante na instância.

  2. [Esta etapa será necessária somente se o solicitante precisar alterar se "IncludeDisk" ou "ExcludeDisk" for especificado para um ou mais discos.] Chame IVssBackupComponents::SetRestoreOptions para definir as opções de restauração para os componentes do gravador ASR. O gravador ASR dá suporte às seguintes opções: "IncludeDisk" permite que o solicitante inclua um disco no sistema de destino a ser considerado para restauração, mesmo que não tenha sido selecionado durante a fase de backup. "ExcludeDisk" permite que o solicitante impeça que um disco no sistema de destino seja recriado. Observe que, se "ExcludeDisk" for especificado para um disco que contém um volume crítico, a chamada subsequente para IVssBackupComponents::P reRestore falhará.

    O exemplo a seguir mostra como usar SetRestoreOptions para impedir que o disco 0 e o disco 1 sejam recriados e injetar drivers de terceiros no volume de inicialização restaurado.

    Windows Server 2008, Windows Vista, Windows Server 2003 e Windows XP: Não há suporte para a injeção de drivers de terceiros.

    O exemplo pressupõe que o ponteiro IVssBackupComponents , m_pBackupComponents, é válido.

        m_pBackupComponents->SetRestoreOptions(
            AsrWriterId,
            VSS_CT_FILEGROUP,
            NULL,
            TEXT("ASR"),
            TEXT("\"ExcludeDisk\"=\"0\", \"ExcludeDisk\"=\"1\" "),
            TEXT("\"InjectDrivers\"=\"1\" ")
            );
    

    Para excluir todos os discos de um volume especificado, confira o seguinte "Excluindo todos os discos de um volume".

  3. Chame IVssBackupComponents::P reRestore para notificar o gravador asr para se preparar para uma operação de restauração. Chame IVssAsync::QueryStatus quantas vezes forem necessárias até que o valor de status retornado no parâmetro pHrResult não seja VSS_S_ASYNC_PENDING.

  4. Restaurar os dados. Na fase de restauração, o ASR reconfigura o caminho guid do volume (\\?\Volume{GUID}) para cada volume corresponder ao caminho guid do volume que foi usado durante a fase de backup. No entanto, as letras da unidade não são preservadas, pois isso causaria colisões com as letras da unidade que são atribuídas automaticamente no ambiente de recuperação. Assim, ao restaurar dados, o solicitante deve usar caminhos GUID de volume, não letras de unidade, para acessar os volumes.

  5. Defina a chave do Registro HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ASR\RestoreSession para indicar o conjunto de volumes que foram restaurados ou reformatados.

    Nessa chave, há um valor chamado RestoredVolumes com o tipo de dados REG_MULTI_SZ. Se esse valor não existir, você deverá criá-lo. Sob esse valor, o solicitante deve criar uma entrada guid de volume para cada volume que foi restaurado. Essa entrada deve estar no seguinte formato: \\?\Volume{78618c8f-aefd-11da-a898-806e6f6e6963}. Sempre que uma recuperação bare-metal é executada, o ASR define o valor RestoredVolumes como o conjunto de volumes que o ASR restaurou. Se o solicitante tiver restaurado volumes adicionais, ele deverá definir esse valor como a união do conjunto de volumes que o solicitante restaurou e o conjunto de volumes que o ASR restaurou. Se o solicitante não tiver usado o ASR, ele deverá substituir a lista de volumes.

    Você também deve criar um valor chamado LastInstance com o tipo de dados REG_SZ. Essa chave deve conter um cookie aleatório que identifique exclusivamente a operação de restauração atual. Esse cookie pode ser criado usando as funções UuidCreate e UuidToString . Sempre que uma recuperação bare-metal é executada, o ASR redefine esse valor do Registro para notificar os solicitantes e aplicativos de backup não VSS de que a recuperação ocorreu.

  6. Chame IVssBackupComponents::P ostRestore para indicar o fim da operação de restauração. Chame IVssAsync::QueryStatus quantas vezes forem necessárias até que o valor de status retornado no parâmetro pHrResult não seja VSS_S_ASYNC_PENDING.

Na fase de restauração, o ASR pode criar ou remover partições para restaurar o computador para seu estado anterior. Os solicitantes não devem tentar mapear números de disco da fase de backup para a fase de restauração.

Na restauração, o solicitante deve excluir o disco que contém o conjunto de backup do solicitante. Caso contrário, o conjunto de backup pode ser substituído pela operação de restauração.

Na restauração, um disco será excluído se não tiver sido selecionado como um componente durante o backup ou se ele for explicitamente excluído chamando IVssBackupComponents::SetRestoreOptions com a opção "ExcludeDisk" durante a restauração.

É importante observar que, durante a recuperação de desastre do WinPE, a funcionalidade do gravador ASR está presente, mas nenhum outro gravador está disponível e o serviço VSS não está em execução. Após a conclusão da recuperação de desastre do WinPE, o computador foi reiniciado e o sistema operacional Windows está em execução normalmente, o serviço VSS pode ser iniciado e o solicitante pode executar quaisquer operações de restauração adicionais que exijam a participação de gravadores diferentes do gravador ASR.

Se durante a sessão de restauração o aplicativo de backup detectar que as IDs exclusivas do volume não foram alteradas e, portanto, todos os volumes do momento do backup estiverem presentes e intactos no WinPE, o aplicativo de backup poderá continuar a restaurar apenas o conteúdo dos volumes, sem envolver o ASR. Nesse caso, o aplicativo de backup deve indicar que o computador foi restaurado definindo a seguinte chave do Registro no sistema operacional restaurado: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ASR\RestoreSession

Nessa chave, especifique LastInstance para o nome do valor, REG_SZ para o tipo de valor e um cookie aleatório (como um GUID criado pela função UuidCreate ) para os dados de valor.

Se durante a sessão de restauração o aplicativo de backup detectar que um ou mais volumes estão alterados ou ausentes, o aplicativo de backup deverá usar o ASR para executar a restauração. O ASR recriará os volumes exatamente da maneira como estavam no momento do backup e definirá a chave do Registro RestoreSession .

Excluindo todos os discos de um volume

O exemplo a seguir mostra como excluir todos os discos de um volume especificado.

HRESULT BuildRestoreOptionString
(
    const WCHAR             *pwszVolumeNamePath,
    CMyString               *pstrExclusionList
)
{
    HANDLE                  hVolume           = INVALID_HANDLE_VALUE;
    DWORD                   cbSize            = 0;
    VOLUME_DISK_EXTENTS     * pExtents        = NULL;
    DISK_EXTENT             * pExtent         = NULL;
    ULONG                   i                 = 0;
    BOOL                    fIoRet            = FALSE;
    WCHAR                   wszDest[MAX_PATH] = L"";
    CMyString               strVolumeName;
    CMyString               strRestoreOption;

    // Open a handle to the volume device.
    strVolumeName.Set( pwszVolumeNamePath );
    // If the volume name contains a trailing backslash, remove it.
    strVolumeName.UnTrailing( L'\\' );
    hVolume = ::CreateFile(strVolumeName, 0, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, NULL, 0);
    // Check whether the call to CreateFile succeeded.

    // Get the list of disks used by this volume.
    cbSize = sizeof(VOLUME_DISK_EXTENTS);
    pExtents = (VOLUME_DISK_EXTENTS *)::CoTaskMemAlloc(cbSize);

    ::ZeroMemory(pExtents, cbSize);

    fIoRet = ::DeviceIoControl(hVolume, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0, pExtents, cbSize, &cbSize, 0);
    if ( !fIoRet && GetLastError() == ERROR_MORE_DATA )
    {
        // Allocate more memory.
        cbSize = FIELD_OFFSET(VOLUME_DISK_EXTENTS, Extents) + pExtents->NumberOfDiskExtents * sizeof(DISK_EXTENT);
        ::CoTaskMemFree(pExtents);
        pExtents = NULL;

        pExtents = (VOLUME_DISK_EXTENTS *) ::CoTaskMemAlloc(cbSize);
        // Check whether CoTaskMemAlloc returned an out-of-memory error.
        ::ZeroMemory(pExtents, cbSize);

        // Now the buffer should be big enough.
        ::DeviceIoControl(hVolume, IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS, NULL, 0, pExtents, cbSize, &cbSize, 0);
        // Check whether the IOCTL succeeded.
    }
    // Check for errors; note that the IOCTL can fail for a reason other than insufficient memory.

    // For each disk, mark it to be excluded in the Restore Option string.
    for (i = 0; i < pExtents->NumberOfDiskExtents; i++)
    {
        pExtent = &pExtents->Extents[i];

        *wszDest = L'\0';
        StringCchPrintf(wszDest, MAX_PATH, L"\"ExcludeDisk\"=\"%d\", ", pExtent->DiskNumber); // check errors

        strRestoreOption.Append(wszDest);
        // Check for an out-of-memory error.
    }

    // Remove the trailing comma.
    strRestoreOption.TrimRight();
    strRestoreOption.UnTrailing(',');

    // Set the output parameter.
    strRestoreOption.Transfer( pstrExclusionList );

Exit:
    if( pExtents )
    {
        ::CoTaskMemFree(pExtents);
        pExtents = NULL;
    }

    if( hVolume != INVALID_HANDLE_VALUE )
    {
        ::CloseHandle(hVolume);
        hVolume = INVALID_HANDLE_VALUE;
    }

    return ( hr );
}