Utilisation de fichiers partiels
Il est parfois utile de sauvegarder et de restaurer uniquement des sections de fichiers. VSS fournit des mécanismes de fichiers partiels , qui, si les demandeurs le prennent en charge, permet aux enregistreurs de spécifier des sauvegardes et des restaurations de fichiers partiels.
Les opérations de fichiers partiels sont souvent les plus utilisées pour les enregistreurs qui gèrent des fichiers très volumineux, dont seule une petite fraction change entre les opérations de sauvegarde. Dans ce cas, il est souvent utile de copier uniquement la section qui est passée au support de sauvegarde. Pour cette raison, les opérations de fichier partielles sont généralement, mais pas exclusivement, utilisées pour prendre en charge les opérations de sauvegarde et de restauration incrémentielles.
Si un enregistreur souhaite implémenter une opération de fichier partiel, il utilise CVssWriter::IsPartialFileSupportEnabled pour déterminer si le demandeur avec lequel il travaille prend en charge l’opération.
Si le demandeur prend en charge les opérations de fichier partielles et s’il ajoute le composant qui gère le fichier (ou le composant qui définit le jeu de composants qui contient le fichier) au document composants de sauvegarde, un enregistreur indique les sections du fichier à enregistrer (généralement lors de la gestion d’un événement PrepareForBackup ou PostSnapshot ) en appelant IVssComponent::AddPartialFile.
En plus d’un chemin d’accès et d’un nom de fichier, l’enregistreur fournit la plage et les informations de métadonnées facultatives à IVssComponent::AddPartialFile.
Les informations de plage sont fournies sous la forme d’une chaîne qui contient l’un des éléments suivants :
Paires de décalages dans le fichier à sauvegarder (en octets) et la longueur de la section à sauvegarder (en octets), le décalage et la longueur étant séparés par un signe deux-points, et chaque paire séparée par une virgule, par exemple Offset1**:Length1,** Offset2**:**Length2.
Chaque valeur est un entier 64 bits (au format hexadécimal ou décimal) spécifiant respectivement un décalage d’octet et une longueur en octets.
Chemin d’accès complet, y compris le nom de fichier, sur le système actuel d’un fichier de plages binaires contenant les éléments suivants :
- Nombre (exprimé sous forme d’entier 64 bits) de plages de fichiers distinctes contenues dans le fichier
- Chaque plage exprimée sous la forme d’une paire d’entiers 64 bits : le premier membre de la paire étant le décalage dans le fichier sauvegardé (en octets), et le deuxième membre étant la longueur des données à sauvegarder (en octets)
Si un enregistreur utilise un fichier de plages pour spécifier une opération de fichier partielle, un demandeur doit garantir que ce fichier est sauvegardé (même si le fichier ne fait pas nécessairement partie du jeu de sauvegarde par défaut) ou que les informations des plages sont conservées sur le support de sauvegarde d’une autre manière. Si les informations du fichier de plages ne sont pas sauvegardées, la restauration du fichier partiellement sauvegardé est impossible.
L’enregistreur peut également ajouter une chaîne contenant des métadonnées. Ces métadonnées peuvent être dans un format spécifique à l’enregistreur, car elles sont destinées à permettre à l’enregistreur de valider toutes les restaurations futures.
Avec ces informations, un demandeur de prise en charge peut effectuer une sauvegarde de fichier partielle.
Par exemple, considérez un fichier volumineux dont l’en-tête (octets 64-512) contient un nombre d’enregistrements et d’autres informations fréquemment mises à jour, et dont les données les plus récentes se trouvent dans les 65536 derniers octets du fichier, octets 0x1239E8577A à 0x1239E7577A.
Un enregistreur peut spécifier une liste de plages comme chaîne « 64:448,0x1239E8577A:65536 ».
Lors de la restauration, et avant d’effectuer une opération de restauration, un demandeur doit case activée pour voir si des fichiers nécessitent une prise en charge partielle des fichiers.
Pour ce faire, le demandeur itère d’abord sur les enregistreurs avec des composants stockés dans son document composants de sauvegarde à l’aide d’IVssBackupComponents::GetWriterComponentsCount et IVssBackupComponents::GetWriterComponents.
L’interface IVssBackupComponents::GetWriterComponents est ensuite utilisée pour retourner des instances de l’interface IVssWriterComponentsExt , qui fournissent IVssWriterComponentsExt::GetComponentsEt IVssWriterComponentsExt::GetComponentCount, qui permettent au demandeur d’obtenir des instances IVssComponent .
Cela permet à un demandeur d’obtenir des informations sur les fichiers partiellement sauvegardés pour participer à une restauration à l’aide de IVssComponent::GetPartialFileCount et IVssComponent::GetPartialFile pour le instance d’IVssComponent correspondant au composant qui gère le fichier (ou au composant qui définit l’ensemble de composants qui contient le fichier).
Si l’opération de fichier partiel a été contrôlée par un fichier de plages, ce fichier doit être restauré avant de copier les données sur le disque. Il peut arriver que le demandeur ait besoin de copier le fichier de plages vers un nouvel emplacement sur le disque. Dans ce cas, il indique qu’il l’a fait via IVssBackupComponents::SetRangesFilePath.
Le demandeur continue ensuite à copier les données dans les emplacements appropriés dans la destination de restauration déjà sur le disque.
Un enregistreur (lors de la gestion d’un événement PostRestore ), en examinant IVssComponent::GetFileRestoreStatus pour les fichiers indiqués par IVssComponent::GetPartialFile, détermine si l’opération de fichier partiel a réussi. L’enregistreur doit toujours tenter de vérifier l’exactitude de cette restauration à l’aide des informations de décalage et des métadonnées incluses dans le document Composants de sauvegarde.
Si le demandeur a dû restaurer le fichier de plages à un nouvel emplacement, VSS met à jour ces informations afin que le chemin retourné par IVssComponent::GetPartialFile soit correct.