Rôle demandeur dans les sauvegardes incrémentielles et différentielles VSS

Pour prendre en charge une opération de sauvegarde incrémentielle ou différentielle , un demandeur doit effectuer les opérations suivantes :

  1. Déterminez le degré de prise en charge de l’enregistreur disponible (à l’aide de IVssBackupComponents::GetWriterMetadata pour accéder aux informations dans les documents de métadonnées de l’enregistreur), en particulier, déterminez le schéma de sauvegarde pris en charge (VSS_BACKUP_SCHEMA).
  2. Définissez un état de sauvegarde approprié.
  3. Obtenez des spécifications au niveau du fichier et du jeu de fichiers pour une sauvegarde incrémentielle ou différentielle.
  4. Effectuez la sauvegarde.

Détermination de la prise en charge et de la configuration incrémentielles et différentielles par le demandeur

Un demandeur doit obtenir des informations sur la prise en charge de l’enregistreur avant de sélectionner des composants à inclure dans une sauvegarde incrémentielle ou différentielle ou de définir son propre état.

Détermination de la prise en charge de writer

Un demandeur détermine si un writer donné prend en charge les sauvegardes incrémentielles ou différentielles VSS en récupérant le masque de schéma de sauvegarde de l’enregistreur à l’aide de la méthode IVssExamineWriterMetadata::GetBackupSchema .

Le masque de schéma de sauvegarde d’un enregistreur prenant en charge les techniques incrémentielles ou différentielles VSS contient des VSS_BS_INCREMENTAL ou des VSS_BS_DIFFERENTIAL, ou les deux. Les auteurs peuvent également indiquer des restrictions sur leur participation avec l’indicateur VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL . (Pour plus d’informations sur les schémas de sauvegarde, consultez VSS_BACKUP_SCHEMA).

Définition de l’état de sauvegarde du demandeur

Un demandeur indique qu’une sauvegarde est une sauvegarde incrémentielle ou différentielle en définissant un type de sauvegarde sur VSS_BT_INCREMENTAL ou VSS_BT_DIFFERENTIAL à l’aide de la méthode IVssBackupComponents::SetBackupState avant de générer un événement PrepareForBackup .

La méthode IVssBackupComponents::SetBackupState est également utilisée pour indiquer si le demandeur fournit une prise en charge partielle des fichiers, qui est fréquemment utilisée pour implémenter certaines opérations de sauvegarde et de restauration incrémentielles.

Obtention des spécifications de l’enregistreur pour les sauvegardes incrémentielles et différentielles

Les informations de spécification de sauvegarde de fichiers au niveau du jeu de fichiers (VSS_FILE_SPEC_BACKUP_TYPE) contenues dans le document de métadonnées writer de chaque enregistreur sont disponibles pour examen après le retour réussi de IVssBackupComponents::GatherWriterMetadata.

Toutefois, un writer peut ajouter des fichiers différents ou demander une prise en charge partielle des fichiers jusqu’à ce qu’il gère correctement l’événement PostSnapshot .

Les spécifications de prise en charge des fichiers différents et partiels peuvent remplacer le type de sauvegarde de la spécification de fichier. Les demandeurs peuvent donc différer une analyse complète de toutes les spécifications de l’enregistreur sur les sauvegardes incrémentielles et différentielles jusqu’à ce que le retour réussi de IVssBackupComponents::P repareForBackup.

Obtention d’informations sur la spécification de sauvegarde de fichiers

Les informations de spécification de sauvegarde de fichiers au niveau du jeu de fichiers (VSS_FILE_SPEC_BACKUP_TYPE) sont contenues dans le document de métadonnées writer de chaque enregistreur et peuvent être examinées immédiatement après le retour réussi de IVssBackupComponents::GatherWriterMetadata.

Les demandeurs doivent obtenir des masques de spécification de sauvegarde de fichiers (VSS_FILE_SPEC_BACKUP_TYPE) pour chaque jeu de fichiers de chacun des composants d’un enregistreur à inclure dans la sauvegarde incrémentielle ou différentielle, que le composant ait été inclus explicitement ou implicitement .

Un demandeur peut déterminer quel document de métadonnées writer doit être interrogé à l’aide de IVssBackupComponents::GetWriterComponentsCount et IVssBackupComponents::GetWriterComponents. La instance de l’interface IVssWriterComponentsExt retournée par IVssBackupComponents::GetWriterComponents fournit des informations de writer via la méthode IVssWriterComponentsExt::GetWriterInfo.

Le demandeur obtient des informations de composant via des instances de l’interface IVssWMComponent correspondant à un composant inclus géré par un writer donné à l’aide de IVssExamineWriterMetadata::GetComponent.

Les informations sur les jeux de fichiers gérés par le composant correspondant à l’interface IVssWMComponent sont obtenues par les appels à IVssWMComponent::GetFile, IVssWMComponent::GetDatabaseFile ou IVssWMComponent::GetDatabaseLogFile (le cas échéant).

Ces appels peuvent retourner des instances de l’interface IVssWMFiledesc pour chacun des jeux de fichiers d’un composant.

Le type de sauvegarde de spécification de fichier d’un jeu de fichiers est obtenu en appelant IVssWMFiledesc::GetBackupTypeMask.

Obtention d’informations sur les fichiers partiels et les fichiers différentiels

Un demandeur obtient des informations de fichier partiel et de fichier différent via l’interface IVssComponent .

Un demandeur peut itérer sur tous les enregistreurs inclus dans une sauvegarde à l’aide de IVssBackupComponents::GetWriterComponentsCount et IVssBackupComponents::GetWriterComponents.

La instance d’une interface IVssWriterComponentsExt retournée par IVssBackupComponents::GetWriterComponents permet d’accéder à toutes les instances de l’interface IVssComponent correspondant aux composants explicitement inclus d’un writer donné via les méthodes IVssWriterComponentsExt::GetComponentsExt::GetComponentCount.

Un demandeur doit passer par toutes les instances d’IVssComponent pour tous les enregistreurs dont le schéma prend en charge la sauvegarde incrémentielle ou différentielle, c’est-à-dire les enregistreurs dont le masque de schéma de sauvegarde, tel que retourné par IVssExamineWriterMetadata::GetBackupSchema, inclut VSS_BS_INCREMENTAL lorsque le type de sauvegarde est VSS_BT_INCREMENTAL, ou VSS_BS_DIFFERENTIAL lorsque le type de sauvegarde est VSS_BS_DIFFERENTIAL.

Les informations de fichier partielles sont obtenues en appelant IVssComponent::GetPartialFileCount et IVssComponent::GetPartialFile (voir Utilisation de fichiers partiels).

Pour les enregistreurs qui prennent en charge les opérations de sauvegarde sur la base des dernières données de modification d’un fichier (les enregistreurs dont le masque de schéma de sauvegarde, tel que retourné par IVssExamineWriterMetadata::GetBackupSchema, inclut VSS_BS_LAST_MODIFY), les informations de fichier différentielles sont obtenues en appelant IVssComponent::GetDifferencedFilesCount et IVssComponent::GetDifferencedFile.

Notez que les fichiers différentiels peuvent être de nouveaux fichiers, c’est-à-dire des fichiers qui ne sont membres d’aucun jeu de fichiers actuellement dans le document de métadonnées writer d’un rédacteur donné.

Les demandeurs ne doivent pas trouver les fichiers inclus à la fois pour les opérations de fichiers partiels et comme fichiers différentiels. Si un demandeur rencontre une telle circonstance, il doit retourner et consigner une erreur d’enregistreur.

Un demandeur peut toujours choisir de poursuivre la sauvegarde des fichiers de l’enregistreur problématique, mais dans ce cas, doit le faire en fonction de la spécification trouvée dans les informations de fichier différent.

Implémentation de sauvegardes incrémentielles ou différentielles

Avant d’implémenter une sauvegarde, les demandeurs doivent disposer d’informations sur les enregistreurs qui prennent en charge une sauvegarde incrémentielle ou différentielle , toutes les opérations de fichier partielles demandées, tous les fichiers différents et le type de sauvegarde de spécification de fichier de tous les autres fichiers.

Enregistreurs non pris en charge

Les enregistreurs dont le schéma ne prend pas en charge la sauvegarde incrémentielle ou différentielle (les enregistreurs dont le masque de schéma de sauvegarde, tel que retourné par IVssExamineWriterMetadata::GetBackupSchema, inclut VSS_BS_INCREMENTAL lorsque le type de sauvegarde est VSS_BT_INCREMENTAL ou n’inclut pas VSS_BS_DIFFERENTIAL lorsque le type de sauvegarde est VSS_BS_DIFFERENTIAL) ne peuvent pas fournir de prise en charge directe à une opération de sauvegarde incrémentielle ou différentielle.

Cela ne signifie pas nécessairement que les données des enregistreurs ne seront pas impliquées dans une opération de sauvegarde incrémentielle ou différentielle. Toutefois, le choix de ce qu’il faut faire est à la discrétion du demandeur. Le demandeur peut effectuer l’une des opérations suivantes :

  • Ne sauvegardez aucun fichier appartenant aux enregistreurs non pris en charge (indiquez clairement cela à l’utilisateur)
  • Sauvegarder tous les fichiers des enregistreurs non pris en charge
  • Effectuez une sauvegarde incrémentielle à l’aide des données du système de fichiers et des journaux d’historique du demandeur.

La dernière alternative doit être utilisée avec beaucoup de précaution, et seulement si le demandeur comprend si les rédacteurs impliqués peuvent prendre en charge la sauvegarde incrémentielle ou différentielle et la restauration des données indépendamment du mécanisme VSS.

Rédacteurs de prise en charge

Un demandeur doit traiter (dans l’ordre) tous les fichiers différentiels d’un writer, gérer toutes les demandes de fichiers partielles , puis sauvegarder les fichiers restants en fonction de leur type de sauvegarde de spécification de fichier (VSS_FILE_SPEC_BACKUP_TYPE).

  1. Sauvegarde de fichiers différentiels :

    Pour les enregistreurs qui prennent en charge les opérations de sauvegarde sur la base des données de la dernière modification (les enregistreurs dont le masque de schéma de sauvegarde, tel que retourné par IVssExamineWriterMetadata::GetBackupSchema, inclut VSS_BS_LAST_MODIFY), un demandeur utilise le chemin d’accès, la spécification de fichier et les informations d’indicateur de récursivité retournées par IVssComponent::GetDifferencedFile pour générer une liste de fichiers en tant que candidats à la sauvegarde ou à la restauration incrémentielles.

    IVssComponent::GetDifferencedFile peut également retourner une heure de dernière modification (exprimée sous la forme d’une structure FILETIME ).

    Si l’heure de la dernière modification fournie par l’enregistreur est différente de zéro, le demandeur l’utilise comme base (plutôt que les informations du système de fichiers ou les données stockées du demandeur) pour déterminer si le fichier doit être inclus dans la sauvegarde incrémentielle ou différentielle .

    Par instance, si l’heure de la dernière modification d’un fichier retournée par l’enregistreur était :

    • Après la dernière sauvegarde complète, le fichier doit être inclus dans les sauvegardes incrémentielles et différentielles.
    • Après la dernière sauvegarde complète, mais avant la dernière sauvegarde incrémentielle, le fichier doit être inclus dans les opérations de sauvegarde incrémentielle, mais pas dans les sauvegardes différentielles.

    Si l’heure de la dernière modification fournie par l’enregistreur est égale à zéro, le demandeur doit utiliser les informations du système de fichiers et ses propres données stockées pour déterminer l’heure de modification du fichier différent.

  2. Utilisation d’opérations de fichier partielles :

    Si un writer a demandé qu’un fichier soit sauvegardé à l’aide d’une opération de fichier partiel, le demandeur utilise les informations de décalage de fichier pour enregistrer les segments de fichier indiqués sur le support de sauvegarde. (Voir Utilisation de fichiers partiels pour plus d’informations sur les opérations de fichiers partiels).

    Comme indiqué ci-dessus, un writer ne doit pas désigner un fichier à la fois comme fichier différent et comme participant à une opération de fichier partiel. Si un demandeur rencontre une telle circonstance, il doit retourner et consigner une erreur d’enregistreur.

    Un demandeur peut toujours choisir de poursuivre la sauvegarde des fichiers de l’enregistreur problématique, mais dans ce cas, doit le faire en fonction de la spécification trouvée dans les informations de fichier différent.

  3. Utilisation du type de sauvegarde de spécification de fichier :

    Après avoir traité tous les fichiers différents et les opérations de fichiers partiels, le demandeur traite maintenant tous les fichiers restants dans son jeu de sauvegarde sur la base de leur type de sauvegarde de spécification de fichier (VSS_FILE_SPEC_BACKUP_TYPE).

    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 qu’un demandeur doit copier des données à partir d’un cliché instantané lors de l’exécution d’opérations de sauvegarde INCREMENTAL, DIFFERENTIAL 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 », un demandeur copie tous ses membres sur le support de sauvegarde au cours d’une sauvegarde incrémentielle ou différentielle, quelle que soit la date de la dernière modification ou de la sauvegarde.

    Par défaut, les jeux de fichiers sont ajoutés aux composants avec un type de sauvegarde de spécification de fichier de VSS_FSBT_ALL_BACKUP_REQUIRED | VSS_FSBT_ALL_SNAPSHOT_REQUIRED. Par conséquent, à moins qu’un writer ne définisse explicitement le type de sauvegarde de la spécification de fichier, les demandeurs doivent copier ces fichiers non gérés par des opérations de fichier partielles ou les fichiers différentiels désignés dans la plupart des jeux de fichiers sont généralement copiés dans leur intégralité sur le support de sauvegarde.

Tampons de sauvegarde

Les enregistreurs qui prennent en charge les tampons de sauvegarde (VSS_BS_TIMESTAMP) peuvent choisir de générer des informations de tampon de sauvegarde à utiliser pour prendre en charge les futures opérations de sauvegarde et de restauration incrémentielles et différentielles.

Le format et les informations contenues dans les chaînes contenant des informations d’empreinte de sauvegarde sont privés à l’enregistreur qui les génère ; le demandeur ne sait pas comment traiter ces informations.

Les rédacteurs de prise en charge stockent le tampon de sauvegarde dans le document composants de sauvegarde sous forme de chaîne à l’aide de la méthode IVssComponent::SetBackupStamp .

Le rôle du demandeur dans la gestion des informations de tampon de sauvegarde est (le cas échéant) de les mettre à la disposition de l’enregistreur en appelant IVssBackupComponents::SetPreviousBackupStamp dans une opération de sauvegarde ou de restauration ultérieure.