Partager via


Utilisation de la récupération automatique du système VSS pour la récupération d’urgence

Une application de sauvegarde et de récupération VSS qui effectue une récupération d’urgence (également appelée récupération complète) peut utiliser l’enregistreur ASR (Automated System Recovery) avec l’environnement de préinstallation Windows (Windows PE) pour sauvegarder et restaurer des volumes critiques et d’autres composants de l’état du système de démarrage. L’application de sauvegarde est implémentée en tant que demandeur VSS.

Note Les applications qui utilisent ASR doivent obtenir une licence Windows PE.

Windows Server 2003 et Windows XP : ASR n’est pas implémenté en tant qu’enregistreur VSS.

Pour plus d’informations sur les outils de suivi que vous pouvez utiliser avec ASR, consultez Utilisation des outils de suivi avec les applications VSS ASR.

Dans cet article :

Vue d’ensemble des tâches de la phase de sauvegarde

Au moment de la sauvegarde, le demandeur effectue les étapes suivantes.

Notes

Toutes les étapes sont requises, sauf indication contraire.

 

  1. Appelez la fonction CreateVssBackupComponents pour créer un instance de l’interface IVssBackupComponents et appelez la méthode IVssBackupComponents::InitializeForBackup pour initialiser le instance pour gérer une sauvegarde.

  2. Appelez IVssBackupComponents::SetContext pour définir le contexte de l’opération de cliché instantané.

  3. Appelez IVssBackupComponents::SetBackupState pour configurer la sauvegarde. Définissez le paramètre bBackupBootableSystemState sur true pour indiquer que la sauvegarde inclura un état système démarrable.

  4. Choisissez les composants critiques dans le document de métadonnées writer de l’enregistreur ASR à sauvegarder et appelez IVssBackupComponents::AddComponent pour chacun d’eux.

  5. Appelez IVssBackupComponents::StartSnapshotSet pour créer un jeu de clichés instantanés vide.

  6. Appelez IVssBackupComponents::GatherWriterMetadata pour initier un contact asynchrone avec des rédacteurs.

  7. Appelez IVssBackupComponents::GetWriterMetadata pour récupérer le document de métadonnées writer de l’enregistreur ASR. L’ID de l’enregistreur ASR est BE000CBE-11FE-4426-9C58-531AA6355FC4, et la chaîne du nom de l’enregistreur est « ENREGISTREUR ASR ».

  8. Appelez IVssExamineWriterMetadata::SaveAsXML pour enregistrer une copie du document de métadonnées writer de l’enregistreur ASR.

  9. Appelez IVssBackupComponents::AddToSnapshotSet pour chaque volume pouvant participer à des clichés instantanés pour ajouter le volume au jeu de clichés instantanés.

  10. Appelez IVssBackupComponents::P repareForBackup pour avertir les rédacteurs de se préparer à une opération de sauvegarde.

  11. Appelez IVssBackupComponents::GatherWriterStatus et IVssBackupComponents::GetWriterStatus (ou IVssBackupComponentsEx3::GetWriterStatus) pour vérifier la status de l’enregistreur ASR.

  12. À ce stade, vous pouvez rechercher les messages d’échec qui ont été définis par l’enregistreur dans sa méthode CVssWriter::OnPrepareBackup . Pour obtenir un exemple de code montrant comment afficher ces messages, consultez IVssComponentEx::GetPrepareForBackupFailureMsg.

  13. Appelez IVssBackupComponents::D oSnapshotSet pour créer un cliché instantané de volume.

  14. Appelez IVssBackupComponents::GatherWriterStatus et IVssBackupComponents::GetWriterStatus pour vérifier la status de l’enregistreur ASR.

  15. Sauvegardez les données.

  16. Indiquez si l’opération de sauvegarde a réussi en appelant IVssBackupComponents::SetBackupSucceeded.

  17. Appelez IVssBackupComponents::BackupComplete pour indiquer que l’opération de sauvegarde est terminée.

  18. Appelez IVssBackupComponents::GatherWriterStatus et IVssBackupComponents::GetWriterStatus. La mémoire d’état de session writer est une ressource limitée, et les enregistreurs doivent éventuellement réutiliser les états de session. Cette étape marque l’état de la session de sauvegarde de l’enregistreur comme terminé et avertit VSS que cet emplacement de session de sauvegarde peut être réutilisé par une opération de sauvegarde ultérieure.

    Notes

    Cela n’est nécessaire que sur Windows Server 2008 avec Service Pack 2 (SP2) et versions antérieures.

     

  19. Appelez IVssBackupComponents::SaveAsXML pour enregistrer une copie du document des composants de sauvegarde du demandeur. Les informations contenues dans le document Composants de sauvegarde sont utilisées au moment de la restauration lorsque le demandeur appelle la méthode IVssBackupComponents::InitializeForRestore .

Choix des composants critiques à sauvegarder

Dans la phase d’initialisation de la sauvegarde, l’enregistreur ASR signale les types de composants suivants dans son document de métadonnées writer :

  • Les volumes critiques, tels que les volumes de démarrage, de système et d’environnement de récupération Windows (Windows RE), ainsi que la partition Windows RE associée à la instance de Windows Vista ou Windows Server 2008 en cours d’exécution. Un volume est un volume critique s’il contient des informations sur l’état du système. Les volumes de démarrage et de système sont inclus automatiquement. Le demandeur doit inclure tous les volumes qui contiennent des composants critiques pour le système signalés par les enregistreurs, tels que les volumes qui contiennent Active Directory. Les composants critiques du système sont marqués comme « non sélectionnables pour la sauvegarde ». Dans VSS, « non sélectionnable » signifie « non facultatif ». Par conséquent, le demandeur doit les sauvegarder dans le cadre de l’état du système. Pour plus d’informations, consultez Sauvegarde et restauration de l’état du système. Les composants pour lesquels l’indicateur VSS_CF_NOT_SYSTEM_STATE est défini ne sont pas critiques pour le système.

    Notes

    Le composant ASR est un composant critique pour le système qui est signalé par l’enregistreur ASR.

     

  • Disques. Chaque disque fixe sur l’ordinateur est exposé en tant que composant dans ASR. Si un disque n’a pas été exclu pendant la sauvegarde, il est affecté pendant la restauration et peut être recréé et reformaté. Notez que pendant la restauration, le demandeur peut toujours recréer un disque qui a été exclu lors de la sauvegarde en appelant la méthode IVssBackupComponents::SetRestoreOptions . Si un disque d’un pack de disques dynamique est sélectionné, tous les autres disques de ce pack doivent également être sélectionnés. Si un volume est sélectionné parce qu’il s’agit d’un volume critique (c’est-à-dire un volume qui contient des informations sur l’état du système), chaque disque qui contient une extension pour ce volume doit également être sélectionné. Pour rechercher les extensions d’un volume, utilisez le code de contrôle IOCTL_VOLUME_GET_VOLUME_DISK_EXTENTS .

    Notes

    Pendant la sauvegarde, le demandeur doit inclure tous les disques fixes. Si le disque qui contient le jeu de sauvegarde du demandeur est un disque local, ce disque doit être inclus. Pendant la restauration, le demandeur doit exclure le disque qui contient le jeu de sauvegarde du demandeur pour empêcher son remplacement.

     

    Dans un environnement clustering, ASR ne recrée pas la disposition des disques partagés du cluster. Ces disques doivent être restaurés en ligne une fois le système d’exploitation restauré dans le Windows RE.

  • Magasin de données de configuration de démarrage (BCD). Ce composant spécifie le chemin d’accès du répertoire qui contient le magasin BCD. Le demandeur doit spécifier ce composant et sauvegarder tous les fichiers dans le répertoire du magasin BCD. Pour plus d’informations sur le magasin BCD, consultez À propos de BCD.

    Notes

    Sur les ordinateurs qui utilisent l’interface EFI (Extended Firmware Interface), la partition système EFI (ESP) est toujours masquée et ne peut pas être incluse dans un cliché instantané de volume. Le demandeur doit sauvegarder le contenu de cette partition. Étant donné que cette partition ne peut pas être incluse dans un cliché instantané de volume, la sauvegarde peut être effectuée uniquement à partir du volume actif, et non à partir du cliché instantané. Pour plus d’informations sur EFI et ESP, consultez Guide d’installation.

Les noms de composants utilisent les formats suivants :

  • Pour les composants de disque, le format est

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

    n est le numéro de disque. Seul le numéro de disque est enregistré. Pour obtenir le numéro de disque, utilisez le code de contrôle IOCTL_STORAGE_GET_DEVICE_NUMBER .

  • Pour les composants de volume, le format est

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

    GUID est le GUID du volume.

  • Pour le composant de magasin BCD, le format est

    <COMPONENT logicalPath="BCD » componentName="BCD » componentType="filegroup » componentCaption = « Il s’agit du chemin d’accès au magasin BCD de démarrage et aux gestionnaires de démarrage... Tous les fichiers de ce répertoire doivent être sauvegardés...>

    Si la partition système a un nom GUID de volume, ce composant peut être sélectionné. Sinon, il n’est pas sélectionnable.

    Notes

    ASR ajoute les fichiers au groupe de fichiers du composant de magasin BCD comme suit :

    • Pour les disques EFI, ASR ajoute

      SystemPartitionPath\EFI\Microsoft\Boot\*.*

      SystemPartitionPath est le chemin d’accès à la partition système.

    • Pour les disques GPT, ASR ajoute

      SystemPartitionPath\Boot\*.*

      SystemPartitionPath est le chemin d’accès à la partition système.

    • Le chemin de la partition système se trouve sous la clé de Registre suivante : HKEY_LOCAL_MACHINE\System\Setup\SystemPartition

     

Lors de la restauration, tous les composants marqués comme volumes critiques doivent être restaurés. Si un ou plusieurs volumes critiques ne peuvent pas être restaurés, l’opération de restauration échoue.

Dans la phase Prérestore de la séquence de restauration, les disques qui n’ont pas été exclus lors de la sauvegarde sont recréés et reformatés par défaut. Toutefois, ils ne sont pas recréés ou reformatés s’ils remplissent les conditions suivantes :

  • Un disque de base n’est pas recréé si sa disposition de disque est intacte ou si seules des modifications additives y ont été apportées. La disposition du disque est intacte si les conditions suivantes sont remplies :

    • La signature du disque, le style de disque (GPT ou MBR), la taille du secteur logique et le décalage de début du volume ne sont pas modifiés.
    • La taille du volume n’est pas réduite.
    • Pour les disques GPT, l’identificateur de partition n’est pas modifié.
  • Un disque dynamique n’est pas recréé si sa disposition de disque est intacte ou si seules des modifications additives lui ont été apportées. Pour qu’un disque dynamique soit intact, toutes les conditions d’un disque de base doivent être remplies. En outre, la structure de volume du pack de disque entier doit être intacte. La structure de volume du pack de disques est intacte si elle remplit les conditions suivantes, qui s’appliquent aux disques MBR et GPT :

    • Le nombre de volumes disponibles dans le pack physique pendant la restauration doit être supérieur ou égal au nombre de volumes qui ont été spécifiés dans les métadonnées de l’enregistreur ASR pendant la sauvegarde.

    • Le nombre de plexes par volume doit être inchangé.

    • Le nombre de membres doit être inchangé.

    • Le nombre d’extensions de disque physique doit être supérieur au nombre d’extensions de disque spécifiées dans les métadonnées de l’enregistreur ASR.

    • Un pack intact reste intact lorsque des volumes supplémentaires sont ajoutés ou si un volume dans le pack est étendu (par exemple, d’un volume simple à un volume étendu).

      Notes

      Si un volume simple est mis en miroir, le pack n’est pas intact et est recréé pour s’assurer que l’état bcd et le volume de démarrage restent cohérents après la restauration. Si des volumes sont supprimés, le pack est recréé.

       

  • Si la structure du volume du pack de disques dynamiques est intacte et que seules des modifications additives y ont été apportées, les disques du pack ne sont pas recréé.

    Windows Vista : Les disques dynamiques sont toujours recréé. Notez que ce comportement a changé avec Windows Server 2008 et Windows Vista avec Service Pack 1 (SP1).

À tout moment avant le début de la phase de restauration, le demandeur peut spécifier que les disques doivent être mis en forme rapidement en définissant la clé de Registre HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ASR\RestoreSession . Sous cette clé, il existe une valeur nommée QuickFormat avec le type de données REG_DWORD. Si cette valeur n’existe pas, vous devez la créer. Définissez les données de la valeur QuickFormat sur 1 pour la mise en forme rapide ou sur 0 pour la mise en forme lente.

Si la valeur QuickFormat n’existe pas, les disques sont mis en forme lentement.

La mise en forme rapide est beaucoup plus rapide que la mise en forme lente (également appelée mise en forme complète). Toutefois, la mise en forme rapide ne vérifie pas chaque secteur sur le volume.

Vue d’ensemble des tâches de la phase de restauration

Au moment de la restauration, le demandeur effectue les étapes suivantes :

Notes

Toutes les étapes sont requises, sauf indication contraire.

 

  1. Appelez la fonction CreateVssBackupComponents pour créer un instance de l’interface IVssBackupComponents et appelez la méthode IVssBackupComponents::InitializeForRestore pour initialiser le instance pour la restauration en chargeant le document des composants de sauvegarde du demandeur dans le instance.

  2. [Cette étape n’est requise que si le demandeur doit modifier si « IncludeDisk » ou « ExcludeDisk » est spécifié pour un ou plusieurs disques.] Appelez IVssBackupComponents::SetRestoreOptions pour définir les options de restauration pour les composants de l’enregistreur ASR. L’enregistreur ASR prend en charge les options suivantes : « IncludeDisk » permet au demandeur d’inclure un disque sur le système cible à prendre en compte pour la restauration, même s’il n’a pas été sélectionné pendant la phase de sauvegarde. « ExcludeDisk » permet au demandeur d’empêcher la recréation d’un disque sur le système cible. Notez que si « ExcludeDisk » est spécifié pour un disque qui contient un volume critique, l’appel suivant à IVssBackupComponents::P reRestore échoue.

    L’exemple suivant montre comment utiliser SetRestoreOptions pour empêcher la recréation du disque 0 et du disque 1 et injecter des pilotes tiers dans le volume de démarrage restauré.

    Windows Server 2008, Windows Vista, Windows Server 2003 et Windows XP : L’injection de pilotes tiers n’est pas prise en charge.

    L’exemple suppose que le pointeur IVssBackupComponents , m_pBackupComponents, est valide.

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

    Pour exclure tous les disques d’un volume spécifié, consultez l’article suivant : « Exclusion de tous les disques pour un volume ».

  3. Appelez IVssBackupComponents::P reRestore pour avertir l’enregistreur ASR de se préparer à une opération de restauration. Appelez IVssAsync::QueryStatus autant de fois que nécessaire jusqu’à ce que la valeur status retournée dans le paramètre pHrResult ne soit pas VSS_S_ASYNC_PENDING.

  4. Restaurer les données. Dans la phase de restauration, ASR reconfigure le chemin du GUID du volume (\\?\Volume{GUID}) pour chaque volume afin qu’il corresponde au chemin d’accès GUID de volume utilisé pendant la phase de sauvegarde. Toutefois, les lettres de lecteur ne sont pas conservées, car cela entraînerait des collisions avec les lettres de lecteur qui sont automatiquement affectées dans l’environnement de récupération. Par conséquent, lors de la restauration des données, le demandeur doit utiliser des chemins GUID de volume, et non des lettres de lecteur, pour accéder aux volumes.

  5. Définissez la clé de Registre HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ASR\RestoreSession pour indiquer l’ensemble des volumes qui ont été restaurés ou reformatés.

    Sous cette clé, il existe une valeur nommée RestoredVolumes avec le type de données REG_MULTI_SZ. Si cette valeur n’existe pas, vous devez la créer. Sous cette valeur, votre demandeur doit créer une entrée GUID de volume pour chaque volume restauré. Cette entrée doit être au format suivant : \\?\Volume{78618c8f-aefd-11da-a898-806e6f6e6e6963}. Chaque fois qu’une récupération complète est effectuée, ASR définit la valeur RestoredVolumes sur l’ensemble de volumes restaurés par ASR. Si le demandeur a restauré des volumes supplémentaires, il doit définir cette valeur sur l’union de l’ensemble de volumes restauré par le demandeur et de l’ensemble de volumes restaurés par ASR. Si le demandeur n’a pas utilisé ASR, il doit remplacer la liste des volumes.

    Vous devez également créer une valeur nommée LastInstance avec le type de données REG_SZ. Cette clé doit contenir un cookie aléatoire qui identifie de manière unique l’opération de restauration en cours. Un tel cookie peut être créé à l’aide des fonctions UuidCreate et UuidToString . Chaque fois qu’une récupération complète est effectuée, ASR réinitialise cette valeur de Registre pour informer les demandeurs et les applications de sauvegarde non-VSS que la récupération a eu lieu.

  6. Appelez IVssBackupComponents::P ostRestore pour indiquer la fin de l’opération de restauration. Appelez IVssAsync::QueryStatus autant de fois que nécessaire jusqu’à ce que la valeur status retournée dans le paramètre pHrResult ne soit pas VSS_S_ASYNC_PENDING.

Dans la phase de restauration, ASR peut créer ou supprimer des partitions pour restaurer l’ordinateur à son état précédent. Les demandeurs ne doivent pas tenter de mapper les numéros de disque de la phase de sauvegarde à la phase de restauration.

Lors de la restauration, le demandeur doit exclure le disque qui contient le jeu de sauvegarde du demandeur. Sinon, le jeu de sauvegarde peut être remplacé par l’opération de restauration.

Lors de la restauration, un disque est exclu s’il n’a pas été sélectionné en tant que composant lors de la sauvegarde, ou s’il est explicitement exclu en appelant IVssBackupComponents::SetRestoreOptions avec l’option « ExcludeDisk » pendant la restauration.

Il est important de noter que pendant la récupération d’urgence WinPE, la fonctionnalité d’enregistreur ASR est présente, mais aucun autre enregistreur n’est disponible et le service VSS n’est pas en cours d’exécution. Une fois la récupération d’urgence WinPE terminée, l’ordinateur a redémarré et le système d’exploitation Windows s’exécute normalement, le service VSS peut être démarré et le demandeur peut effectuer toutes les opérations de restauration supplémentaires qui nécessitent la participation d’auteurs autres que l’enregistreur ASR.

Si, pendant la session de restauration, l’application de sauvegarde détecte que les ID uniques de volume sont inchangés et, par conséquent, tous les volumes à partir du moment de la sauvegarde sont présents et intacts dans WinPE, l’application de sauvegarde peut restaurer uniquement le contenu des volumes, sans impliquer asr. Dans ce cas, l’application de sauvegarde doit indiquer que l’ordinateur a été restauré en définissant la clé de Registre suivante dans le système d’exploitation restauré : HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ASR\RestoreSession

Sous cette clé, spécifiez LastInstance pour le nom de la valeur, REG_SZ pour le type de valeur et un cookie aléatoire (tel qu’un GUID créé par la fonction UuidCreate ) pour les données de valeur.

Si, pendant la session de restauration, l’application de sauvegarde détecte qu’un ou plusieurs volumes sont modifiés ou manquants, l’application de sauvegarde doit utiliser ASR pour effectuer la restauration. ASR recréera les volumes exactement comme ils étaient au moment de la sauvegarde et définira la clé de Registre RestoreSession .

Exclusion de tous les disques pour un volume

L’exemple suivant montre comment exclure tous les disques d’un volume spécifié.

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 );
}