Rôle writer dans les sauvegardes incrémentielles et différentielles VSS
La participation d’un writer à des sauvegardes incrémentielles et différentielles a généralement lieu lors de la gestion des événements Identifier (CVssWriter::OnIdentify), PrepareForBackup (CVssWriter:OnPrepareBackup) et PostSnapshot (CVssWriter:OnPostSnapshot). La façon dont un writer participe est déterminée par le fait qu’il prend en charge les tampons de sauvegarde et les heures de dernière modification, et si le demandeur qui exécute la sauvegarde prend en charge les opérations de fichier partielles.
Gestion des événements d’identification pendant les sauvegardes incrémentielles et différentielles
Lors de la gestion de l’événement Identifier, les enregistreurs établissent leur architecture de base pour les opérations de sauvegarde incrémentielle et différentielle via les masques de schéma de sauvegarde (VSS_BACKUP_SCHEMA) et de type de sauvegarde (VSS_FILE_SPEC_BACKUP_TYPE) de la spécification de fichier.
Un writer indique les opérations qu’il prend en charge dans son document de métadonnées writer en créant un masque de bits de valeurs VSS_BACKUP_SCHEMA et en le transmettant à la méthode IVssCreateWriterMetadata::SetBackupSchema . Avec cela, un writer peut indiquer s’il prend en charge les éléments suivants :
- Sauvegardes incrémentielles (VSS_BS_INCREMENTAL)
- Sauvegardes différentielles (VSS_BS_DIFFERENTIAL)
- Les sauvegardes incrémentielles et différentielles ne peuvent pas être mixtes (VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL)
- Sauvegardes incrémentielles et différentielles à l’aide de tampons de sauvegarde (VSS_BS_TIMESTAMPED)
- Sauvegardes incrémentielles et différentielles sur la base d’informations sur la dernière modification d’un fichier (VSS_BS_LAST_MODIFY)
Les enregistreurs utilisent le masque de type de sauvegarde de spécification de fichier pour fournir aux demandeurs des informations au niveau du jeu de fichiers sur la façon d’inclure des fichiers dans une sauvegarde incrémentielle ou différentielle.
Un writer peut définir le masque de type de sauvegarde de spécification de fichier d’un jeu de fichiers lorsqu’il ajoute le jeu de fichiers à un composant en créant un masque de bits de valeurs VSS_FILE_SPEC_BACKUP_TYPE et en le transmettant à IVssCreateWriterMetadata::AddDatabaseFiles, IVssCreateWriterMetadata::AddDatabaseLogFiles ou IVssCreateWriterMetadata::AddFilesToFileGroup.
Il existe trois valeurs de « sauvegarde requise » de l’énumération VSS_FILE_SPEC_BACKUP_TYPE qui affectent les sauvegardes différentielles et incrémentielles :
- VSS_FSBT_ALL_BACKUP_REQUIRED
- VSS_FSBT_INCREMENTAL_BACKUP_REQUIRED
- VSS_FSBT_DIFFERENTIAL_BACKUP_REQUIRED
Il existe trois valeurs « cliché instantané requis » :
- VSS_FSBT_ALL_SNAPSHOT_REQUIRED
- VSS_FSBT_INCREMENTAL_SNAPSHOT_REQUIRED
- VSS_FSBT_DIFFERENTIAL_SNAPSHOT_REQUIRED
Les jeux de fichiers marqués avec un type de sauvegarde de spécification de fichier « cliché instantané requis » indiquent si un demandeur doit copier des données à partir d’un cliché instantané lors de l’exécution d’opérations de sauvegarde INCRÉMENTIELLE, DIFFÉRENTIELLE ou ALL (qui inclut à la fois des opérations incrémentielles et différentielles).
L’indicateur « sauvegarde requise », appliqué aux opérations de sauvegarde INCREMENTAL, DIFFERENTIAL ou ALL, indique que l’enregistreur s’attend à ce qu’une copie de la version actuelle du jeu de fichiers soit disponible après la restauration de toute opération de sauvegarde. En règle générale, cela signifie que si un jeu de fichiers est marqué avec « sauvegarde requise », tous ses membres sont copiés sur le support de sauvegarde au cours d’une sauvegarde incrémentielle ou différentielle, quelle que soit l’heure à laquelle leur sauvegarde ou modification a eu lieu pour la dernière fois.
Par défaut, les jeux de fichiers sont ajoutés aux composants avec un type de sauvegarde de spécification de fichier VSS_FSBT_ALL_BACKUP_REQUIRED | VSS_FSBT_ALL_SNAPSHOT_REQUIRED. Par conséquent, à moins qu’un développeur writer décide de ne pas utiliser la valeur par défaut (en choisissant un autre type de sauvegarde de spécification de fichier, en utilisant des opérations de fichier partielles ou en utilisant des fichiers différentiels), les fichiers de la plupart des jeux de fichiers sont généralement copiés dans leur intégralité sur le support de sauvegarde.
À ce stade, le document de métadonnées de l’enregistreur est entièrement rempli avec la plupart des informations dont un demandeur a besoin pour démarrer une sauvegarde différentielle ou incrémentielle. La spécification d’ajout des informations de jeu de fichiers ou de niveau fichier pour prendre en charge la sauvegarde sera gérée pendant l’événement PrepareForBackup .
Gestion des événements PrepareForBackup pendant les sauvegardes incrémentielles et différentielles
Avant que le demandeur ne poursuive l’opération de sauvegarde réelle, les enregistreurs peuvent modifier la spécification d’une sauvegarde incrémentielle ou différentielle en modifiant le document des composants de sauvegarde du demandeur via l’interface IVssComponent .
Étant donné que les enregistreurs utilisent l’interface IVssComponent , ils effectuent généralement ces préparations lors de la gestion de l’événement PrepareForBackup .
Dans CVssWriter:OnPrepareBackup, les enregistreurs peuvent spécifier plus précisément comment certains fichiers doivent être évalués pour la sauvegarde, spécifier les mécanismes à utiliser pour les sauvegarder et éventuellement définir des tampons de sauvegarde.
-
Fichiers partiels
-
Si un demandeur les prend en charge, un writer peut choisir d’implémenter une sauvegarde incrémentielle ou différentielle à l’aide d’opérations de fichier partielles. (Les enregistreurs peuvent déterminer si un demandeur prend en charge les opérations de fichiers partiels en appelant CVssWriter::IsPartialFileSupportEnabled.)
Les enregistreurs utilisent IVssComponent::AddPartialFile pour indiquer les parties des fichiers sélectionnés à sauvegarder pendant l’opération incrémentielle ou différentielle. Les demandeurs doivent respecter cette spécification et doivent toujours sauvegarder les sections spécifiées des fichiers. (Pour plus d’informations sur les opérations de fichiers partiels, consultez Utilisation des fichiers partiels.)
À l’aide de IVssComponent::AddPartialFile, un writer peut ajouter un fichier à la sauvegarde qui n’a pas été précédemment ajouté à l’un de ses jeux de composants (par IVssCreateWriterMetadata::AddDatabaseFiles, IVssCreateWriterMetadata::AddDatabaseLogFiles ou IVssCreateWriterMetadata::AddFilesToFileGroup) en tant que fichier partiel. Tous les nouveaux fichiers ajoutés à la sauvegarde de cette manière doivent se trouver sur un volume qui est déjà en cours de copie fantôme pour cette sauvegarde.
Si un fichier est impliqué dans des opérations de fichier partielles, cela remplace tout type de sauvegarde de spécification de fichier, qui est ignoré.
-
Fichiers différentiels
-
Les enregistreurs qui prennent en charge un schéma de sauvegarde (VSS_BS_SCHEMA) modifié peuvent ajouter des fichiers différents à une sauvegarde incrémentielle ou différentielle.
Lors de la spécification d’un fichier différent, un writer utilise IVssComponent::AddDifferencedFileByLastModifyTime et spécifie un chemin d’accès, un nom de fichier et un indicateur récursif. Toutefois, ceux-ci ne doivent pas correspondre à un jeu de fichiers inclus dans un composant.
En fait, un writer peut ajouter un fichier qui n’a pas été ajouté précédemment à l’un de ses jeux de composants (par IVssCreateWriterMetadata::AddDatabaseFiles, IVssCreateWriterMetadata::AddDatabaseLogFiles ou IVssCreateWriterMetadata::AddFilesToFileGroup) à la sauvegarde en tant que fichier différent. Tous les nouveaux fichiers ajoutés à la sauvegarde de cette manière doivent se trouver sur un volume qui est déjà en cours de copie fantôme pour cette sauvegarde.
En règle générale, un writer spécifie également l’heure de la dernière modification lors de l’ajout d’un fichier différent, en fonction du mécanisme d’historique de l’enregistreur. Cette heure de dernière modification, si elle est spécifiée, doit toujours être utilisée par les demandeurs pour déterminer si un fichier doit être inclus dans une sauvegarde incrémentielle ou différentielle.
Un writer peut choisir de ne pas spécifier l’heure de la dernière modification lors de l’ajout d’un fichier différent à un jeu de sauvegarde incrémentielle ou différentielle. Si tel est le cas, les demandeurs sont libres d’utiliser leurs propres mécanismes (pour instance, les journaux des sauvegardes précédentes ou les informations du système de fichiers) pour déterminer si le fichier différent doit être inclus dans une sauvegarde incrémentielle ou différentielle.
Le type de sauvegarde de spécification de fichier de tout fichier différent est ignoré.
-
Tampons de sauvegarde
-
Les enregistreurs qui prennent en charge les tampons de sauvegarde (VSS_BS_TIMESTAMP) ont leur propre format privé pour stocker des informations sur la date de la dernière sauvegarde. Ces informations sont générées par l’enregistreur pendant la sauvegarde.
Le tampon de sauvegarde est stocké dans le document composants de sauvegarde sous la forme d’une chaîne par la méthode IVssComponent::SetBackupStamp . L’empreinte de sauvegarde s’applique à tous les jeux de fichiers du composant (ou de l’ensemble de composants) correspondant à la instance du composant IVssComponent.
Si un demandeur a accès au tampon de sauvegarde d’une sauvegarde précédente, il l’aura mis à la disposition de l’enregistreur en appelant IVssBackupComponents::SetPreviousBackupStamp.
Un writer peut ensuite examiner cet horodatage à l’aide de IVssComponent::GetPreviousBackupStamp.
Notez que le demandeur stocke et retourne simplement la chaîne contenant l’empreinte de sauvegarde. Il ne sait rien sur le format de la chaîne ni sur la façon de l’utiliser; seul l’enregistreur dispose de ces informations.
Un writer peut choisir de mettre à jour le tampon de sauvegarde actuel à l’aide de IVssComponent::SetBackupStamp après avoir appelé IVssComponent::GetPreviousBackupStamp, en enregistrant ainsi dans son propre format la date de l’opération de sauvegarde incrémentielle ou différentielle en cours.