Vue d’ensemble des tâches de pré-sauvegarde

Les tâches de pré-sauvegarde sous VSS sont axées sur la création d’un cliché instantané des volumes contenant des données pour la sauvegarde. L’application de sauvegarde enregistre les données du cliché instantané, et non pas le volume réel. Pour plus d’informations, consultez Vue d’ensemble du traitement d’une sauvegarde sous VSS.

Les demandeurs attendent généralement que les rédacteurs se préparent à la sauvegarde et à la création du cliché instantané. L’enregistreur doit déterminer s’il doit participer à la sauvegarde et, le cas échéant, configurer ses fichiers et lui-même pour être prêt pour la sauvegarde et le cliché instantané. Le tableau suivant montre la séquence d’actions et d’événements nécessaires à la préparation d’une opération de sauvegarde.

Action du demandeur Événement Action writer
Le demandeur peut définir les options de sauvegarde (voir IVssBackupComponents::SetBackupOptions) None Aucune
Prise en charge des opérations de sauvegarde incrémentielle et différentielle en examinant les tampons de sauvegarde stockés (voir IVssComponent::GetBackupStamp, IVssBackupComponents::SetPreviousBackupStamp) Aucune Aucune
Avertir les rédacteurs de préparer une opération de sauvegarde à l’aide de IVssBackupComponents::P repareForBackup PrepareForBackup Les préparations de l’enregistreur incluent la détermination si les fichiers doivent être sauvegardés, si l’enregistreur participe au blocage des clichés instantanés, ainsi que la création de métadonnées spécifiques au writer (voir CVssWriter::OnPrepareBackup, CVssWriter::IsPathAffected, IVssWriterComponents, IVssComponent, IVssComponent::GetBackupOptions, CVssWriter::AreComponentsSelected, IVssComponent::SetBackupMetadata et IVssComponent:: GetPreviousBackupStamp.
Le demandeur attend que les enregistreurs configurent la sauvegarde à l’aide d’IVssAsync. Il doit également vérifier writer status (voir IVssBackupComponents::GatherWriterStatus, IVssBackupComponents::GetWriterStatus) Aucune Aucune
Le demandeur demande un cliché instantané à l’aide de IVssBackupComponents::D oSnapshotSet Aucune Aucune
Aucune PrepareForSnapshot CVssWriter::OnPrepareSnapshot : placez l’enregistreur dans un état prêt pour les clichés instantanés.
Aucune Freeze CVssWriter::OnFreeze : Configuration finale avant le cliché instantané.
Aucune Libérer CVssWriter::OnThaw : Le fonctionnement normal (y compris les E/S) peut reprendre.
Aucune PostSnapshot CVssWriter::OnPostSnapshot: Final propre ups des préparations de clichés instantanés. Consultez IVssComponent::AddDifferencedFilesByLastModifyTime et IVssComponent::SetBackupStamp.
Le demandeur attend la fin du cliché instantané à l’aide de : IVssAsync, il doit également vérifier writer status (voir IVssBackupComponents::GatherWriterStatus, IVssBackupComponents::GetWriterStatus
Aucune Aucune

 

Tâches de pré-sauvegarde du demandeur

En outre, avant de créer un événement IVssBackupComponents::P repareForBackup , un demandeur peut également définir des options de sauvegarde pour les rédacteurs individuels à l’aide de IVssBackupComponents::SetBackupOptions en fonction des caractéristiques de chaque enregistreur et de la prise en compte par un demandeur.

Pour prendre en charge les opérations incrémentielles et différentielles, les demandeurs peuvent à ce stade choisir d’examiner les horodatages des composants d’une opération de sauvegarde antérieure (à l’aide de IVssComponent::GetBackupStamp) et utiliser ces informations pour définir un horodatage précédent pour un writer à traiter (à l’aide de IVssBackupComponents::SetPreviousBackupStamp). Pour plus d’informations, consultez Sauvegardes incrémentielles et différentielles .

Un demandeur peut désormais diriger les rédacteurs du système pour effectuer les préparations de pré-sauvegarde et gérer la création d’un cliché instantané.

Tout d’abord, le demandeur génère un événement PrepareForBackup en appelant IVssBackupComponents::P repareForBackup.

Une fois que tous les rédacteurs participants sont revenus de la gestion de l’événement PrepareForBackup (qu’un demandeur détermine à l’aide de la instance de l’interface IVssAsync retournée par PrepareForBackup), le demandeur peut lancer le cliché instantané en appelant IVssBackupComponents::D oSnapshotSet, qui, à mesure qu’il progresse, générera PrepareForSnapshot, Freeze, Thaw et PostSnapshot événements pour les rédacteurs à gérer.

Dans certains cas, un demandeur n’a peut-être pas besoin de créer un cliché instantané. Plus précisément, chaque jeu de fichiers géré par l’un des composants d’un writer donné a un masque de sauvegarde de spécification de fichier (indiqué par un or au niveau du bit de valeurs VSS_FILE_SPEC_BACKUP_TYPE ) défini pendant l’événement Identifier . Ce masque spécifie, entre autres choses, si un jeu de fichiers nécessite que le système soit copié de manière fantôme avant d’effectuer sa sauvegarde.

Si aucun jeu de fichiers à sauvegarder sur un volume ne nécessite un cliché instantané, IVssBackupComponents::D oSnapshotSet n’a pas besoin d’être appelé.

Tâches de pré-sauvegarde writer

Lors de la gestion de l’événement PrepareForBackup , VSS appelle la méthode CVssWriter::OnPrepareBackup de chaque writer, une méthode virtuelle qui, par défaut, retourne simplement true.

Les enregistreurs peuvent remplacer cette implémentation par défaut et utiliser la gestion pour rechercher des informations sur la sauvegarde à venir et prendre des mesures.

Un writer peut déterminer des informations sur le type d’opération de sauvegarde envisagée à l’aide des méthodes suivantes :

  1. CVssWriter::GetBackupType
  2. CVssWriter::IsBootableStateBackedUp
  3. CVssWriter::AreComponentsSelected

Un writer détermine si les fichiers qu’il gère seront impliqués dans le cliché instantané à l’aide de CVssWriter::IsPathAffected.

Plus important encore, lorsque VSS appelle la méthode CVssWriter::OnPrepareBackup, il transmet une instance de l’interface IVssWriterComponents, qui permet un accès direct via l’interface IVssComponent à ceux de ses composants explicitement inclus dans le document composants de sauvegarde du demandeur. L’enregistreur a utilisé les instances de l’interface IVssComponent qui définissent des jeux de composants pour accéder à son composant implicitement inclus (voir Selectability and working with Component Properties).

Pendant la gestion de l’événement PrepareForBackup , les rédacteurs utilisent l’interface IVssComponent pour effectuer des opérations composant par composant (ou ensemble de composants par ensemble de composants), notamment :

  1. Ajout de fichiers partiels (si pris en charge) en appelant IVssComponent::AddPartialFile.
  2. Définition des métadonnées privées dont l’enregistreur a besoin pour gérer la restauration.
  3. Si l’enregistreur prend en charge les sauvegardes incrémentielles et différentielles (consultez Sauvegardes incrémentielles et différentielles), procédez comme suit :
  4. Lancement d’opérations asynchrones très longues, telles que la synchronisation des données sur plusieurs disques. Cela permettra au writer de continuer à fonctionner pendant le traitement de l’opération, y compris la gestion d’autres événements VSS. Ces opérations doivent se terminer avant l’événement Freeze .

L’appel du demandeur à IVssBackupComponents::D oSnapshotSet lance le cliché instantané et génère les événements suivants que les enregistreurs doivent gérer :

Trois des gestionnaires du writer (CVssWriter::OnPrepareSnapshot, CVssWriter::OnFreeze et CVssWriter::OnThaw) sont des méthodes virtuelles pures, et chaque writer doit les implémenter au lieu de s’appuyer sur des valeurs par défaut. Selon les besoins d’un rédacteur, ils peuvent être codés comme des méthodes factices, en retournant simplement TRUE.

Étant donné qu’il existe généralement une fenêtre de temps étroite entre l’émission d’un événement Freeze et l’émission d’un événement De thaw , la plupart des tâches principales de préparation du cliché instantané, telles que l’arrêt des processus, la création de fichiers temporaires ou le drainage des files d’attente d’E/S, sont gérées dans CVssWriter::OnPrepareSnapshot.

La façon dont un writer peut utiliser CVssWriter::OnPrepareSnapshot pour gérer ses E/S avant la création d’un cliché instantané dépend fortement de sa propre architecture.

Les enregistreurs qui peuvent se permettre de conserver toutes les écritures et de conserver les données dans un état de cohérence absolue avant Freeze doivent le faire.

Si l’enregistreur ne peut pas figer ses E/S, il doit prendre des mesures pour créer une source stable pour la sauvegarde et réduire le temps de récupération d’un cliché instantané. Par exemple, la mise en file d’attente des demandes d’E/S entrantes ou la génération d’un jeu de fichiers en double dans un autre chemin d’accès à utiliser comme source d’une sauvegarde.

La méthode CVssWriter::OnFreeze effectue des tâches simples et courtes, telles que la vérification que CVssWriter::OnPrepareSnapshot a laissé les E/S dans l’état correct et que toutes les tâches asynchrones démarrées par CVssWriter::OnPrepareBackup se sont terminées . Cette méthode est la dernière chance d’un rédacteur d’opposer son veto à un cliché instantané en cas de problème (voir Erreurs et vetos de l’enregistreur).

Il est généralement possible pour un writer de reprendre le fonctionnement normal après un événement de dégel : un cliché instantané peut ne pas être immédiatement prêt pour la sauvegarde après le dégel, mais un enregistreur doit être en mesure de reprendre le fonctionnement normal. Par conséquent, CVssWriter::OnThaw est généralement utilisé par les rédacteurs pour revenir à un état de pré-gel. Toutefois, tous les fichiers temporaires créés pour prendre en charge le cliché instantané doivent être conservés jusqu’à l’événement PostSnapshot . En règle générale, vous utilisez CVssWriter::OnPostSnapshot pour ce type de nettoyage. Étant donné que de nombreuses applications ne nécessitent pas ce type de nettoyage, CVssWriter::OnPostSnapshot est une méthode virtuelle avec une implémentation par défaut qui retourne simplement TRUE. Si une sauvegarde incrémentielle ou différentielle est effectuée, l’enregistreur peut appeler IVssComponent::GetPreviousBackupStamp et IVssComponent::SetBackupStamp. Pour plus d’informations, consultez Rôle d’enregistreur dans sauvegarde de magasins complexes. Une autre méthode qui peut être appelée à ce stade est IVssComponent::AddDifferencedFilesByLastModifyTime.