Rol solicitante en la copia de seguridad de almacenes complejos

Al igual que con todas las operaciones importantes en VSS, las copias de seguridad incrementales y diferenciales requieren una estrecha cooperación entre los solicitantes y los escritores.

Tipo de copia de seguridad

La infraestructura proporciona compatibilidad especial con cinco tipos de copia de seguridad. A continuación se detalla la descripción de estos pasos:

  • Completo (VSS_BT_FULL). Se realizará una copia de seguridad de los archivos independientemente de su última fecha de copia de seguridad. El historial de copia de seguridad de cada archivo se actualizará y este tipo de copia de seguridad se puede usar como base de una copia de seguridad incremental o diferencial. Si hay archivos de registro, se pueden truncar como resultado de esta copia de seguridad.

    La restauración de una copia de seguridad completa solo requiere una sola imagen de copia de seguridad.

  • Diferencial (VSS_BT_DIFFERENTIAL). La API de VSS se usa para asegurarse de que solo se van a copiar los archivos que se han cambiado o agregado desde la última copia de seguridad completa a un medio de almacenamiento; se omite toda la información de copia de seguridad intermedia. Esto puede incluir archivos completos o intervalos específicos dentro de los archivos. Una copia de seguridad diferencial está asociada a una copia de seguridad completa y, por lo general, no se puede restaurar hasta que se haya restaurado la copia de seguridad completa. Si hay archivos de registro, normalmente no se truncarán como resultado de esta copia de seguridad.

    La restauración de una copia de seguridad diferencial requiere la imagen de copia de seguridad original y la imagen de copia de seguridad diferencial más reciente realizada desde la última copia de seguridad completa.

  • Incremental (VSS_BT_INCREMENTAL). La API de VSS se usa para asegurarse de que solo se copiarán los archivos que se han cambiado o agregado desde la última copia de seguridad completa o incremental en un medio de almacenamiento. Esto puede incluir archivos completos o intervalos específicos dentro de los archivos. Algunos escritores no permiten que las copias de seguridad incrementales se mezclen con copias de seguridad diferenciales. Si hay archivos de registro, se pueden truncar como resultado de esta copia de seguridad.

    La restauración de una copia de seguridad incremental requiere la imagen de copia de seguridad original y todas las imágenes de copia de seguridad incrementales realizadas desde la copia de seguridad inicial.

  • Copia de seguridad de registros (VSS_BT_LOG). Solo se realizará una copia de seguridad de los archivos de registro de un escritor (archivos agregados a un componente con el método IVssCreateWriterMetadata::AddDataBaseLogFiles y recuperado por una llamada a IVssWMComponent::GetDatabaseLogFile). Este tipo de copia de seguridad es específico de VSS. Las copias de seguridad de registros suelen realizarse con mucha frecuencia. Normalmente, el archivo de registro se truncará como resultado de esta copia de seguridad.

  • Copia de seguridad (VSS_BT_COPY). Al igual que el tipo de copia de seguridad VSS_BT_FULL, se realizará una copia de seguridad de los archivos independientemente de su última fecha de copia de seguridad. Sin embargo, el historial de copia de seguridad de cada archivo no se actualizará y este tipo de copia de seguridad no se puede usar como base de una copia de seguridad incremental o diferencial. Los archivos de registro nunca se deben truncar como resultado de una copia de seguridad de copia.

Compatibilidad parcial con archivos

Algunos escritores admiten la restauración de archivos a través de la sobrescritura de partes de los archivos que administran. Un solicitante se puede diseñar para aprovechar esto y, si es así, indica esto estableciendo la información en IVssBackupComponents::SetBackupState.

El solicitante especifica qué tipo de copia de seguridad se realiza a través del parámetro backupType de IVssBackupComponents::SetBackupState. Diferentes escritores admitirán diferentes tipos de copia de seguridad. Después de llamar a IVssBackupComponents::GatherWriterMetadata , el solicitante puede determinar qué tipos de copia de seguridad admite un escritor determinado llamando a IVssExamineWriterMetadata::GetBackupSchema. El valor devuelto es una máscara de bits que indica la compatibilidad con diferentes tipos de copia de seguridad. VSS_BS_DIFFERENTIAL indica compatibilidad con copias de seguridad diferenciales, VSS_BS_INCREMENTAL para copias de seguridad incrementales, VSS_BS_LOG para copias de seguridad de registros y VSS_BS_COPY para copias de seguridad de copia de seguridad; todos los escritores deben admitir copias de seguridad completas. Si un escritor no admite la combinación de copias de seguridad incrementales con copias de seguridad diferenciales, también se agregará la marca VSS_BS_EXCLUSIVE_INCREMENTAL_DIFFERENTIAL . Si el solicitante está realizando una copia de seguridad incremental o diferencial y un escritor determinado no admite ese tipo de copia de seguridad, se debe realizar una copia de seguridad completa en ese escritor.

Stamps de copia de seguridad

Las copias de seguridad incrementales y diferenciales siempre están vinculadas a una copia de seguridad anterior. Hay dos maneras de vincular copias de seguridad. En el caso de almacenes de datos simples, el solicitante puede realizar un seguimiento de la correlación entre las copias de seguridad. Sin embargo, para almacenes de datos más complejos, el escritor deberá mantener su propia marca de tiempo con la copia de seguridad; esta marca de tiempo puede realizar un seguimiento de la posición del registro, la información del punto de control, etc. El solicitante puede determinar si un escritor determinado necesita almacenar su propia marca de tiempo comprobando el bit de VSS_BS_TIMESTAMPED en el valor devuelto por IVssExamineWriterMetadata::GetBackupSchema.

Los escritores que almacenan una marca de tiempo en una copia de seguridad agregarán la marca de tiempo durante el procesamiento de IVssBackupComponents::P repareForBackup o al procesar IVssBackupComponents::D oSnapshotSet. El solicitante puede obtener esta marca de tiempo llamando a IVssComponent::GetBackupStamp. Al realizar una copia de seguridad incremental o diferencial, el solicitante debe vincular la copia de seguridad actual a alguna copia de seguridad anterior. Para ello, se obtiene la marca de tiempo de la copia de seguridad anterior de un componente específico y se pasa a la función IVssBackupComponents::SetPreviousBackupStamp ; Esto debe realizarse para cada componente del que se ha realizado una copia de seguridad en la copia de seguridad anterior.

Copia de seguridad de archivos

Copia de seguridad de archivos notificados por writer

Cada especificación de archivo que un escritor agrega a sus metadatos durante la fase GatherWriterMetadata contiene una máscara de tipo de copia de seguridad que especifica cuándo se debe realizar una copia de seguridad del archivo. El solicitante determina qué es esta máscara llamando a IVssWMFiledesc::GetBackupTypeMask. Los valores de esta máscara se usan para determinar en qué tipos de copia de seguridad se debe realizar una copia de seguridad de los tipos de copia de seguridad de la especificación de archivo. La máscara puede contener uno o varios de los siguientes valores de bits:

VSS_FSBT_FULL_BACKUP_REQUIRED

Necesario para copias de seguridad completas.

VSS_FSBT_DIFFERENTIAL_BACKUP_REQUIRED

Necesario para copias de seguridad diferenciales.

VSS_FSBT_INCREMENTAL_BACKUP_REQUIRED

Necesario para copias de seguridad incrementales.

VSS_FSBT_LOG_BACKUP_REQUIRED

Se requiere para las copias de seguridad de registros.

VSS_FSBT_ALL_BACKUP_REQUIRED

Necesario para todos los tipos de copia de seguridad; este es el valor predeterminado.

Esta especificación invalida la especificación de selectividad del componente. Por ejemplo, considere un componente cuyos archivos están marcados con VSS_FSBT_LOG_BACKUP_REQUIRED pero no con VSS_FSBT_FULL_BACKUP_REQUIRED. Supongamos que este componente no se puede seleccionar para la copia de seguridad (bSelectable era false cuando se llamó a IVssCreateWriterMetadata::AddComponent ). En el caso de una copia de seguridad de registros, esto significa que siempre se debe realizar una copia de seguridad de todos los archivos de este componente. Sin embargo, en el caso de una copia de seguridad completa, no es necesario realizar una copia de seguridad de ninguno de los archivos, a pesar de que la selectividad del componente implica que se debe realizar una copia de seguridad.

Copia de seguridad por hora de última modificación

La información de especificación de archivo especificada en la fase IVssBackupComponents::GatherWriterMetadata no proporciona al solicitante información sobre lo que ha cambiado desde la última copia de seguridad. Una manera de que un escritor indique los cambios en el solicitante es mediante el mecanismo de archivo diferente. Un escritor puede especificar que se debe realizar una copia de seguridad de determinados archivos de un componente solo si se han modificado desde un momento determinado; el escritor puede especificar estos archivos en IVssBackupComponents::P repareForBackup o en IVssBackupComponents::D oSnapshotSet. Un solicitante puede determinar estos archivos llamando a IVssComponent::GetDifferencedFilesCount e IVssComponent::GetDifferencedFile. Si la especificación del archivo coincide con un conjunto en IVssBackupComponents::GatherWriterMetadata (que actualmente es válido en función de la máscara de tipo de copia de seguridad), la información de archivo diferenciada invalida la información anterior; es decir, los archivos que coinciden con esa especificación de archivo ahora solo se realizan copias de seguridad si se han modificado desde la hora especificada. La hora de última modificación se comunica mediante una estructura FILETIME . Si el valor de esta estructura es cero, esto implica que la hora de última modificación debe determinarse en función del registro del solicitante de la hora de la última copia de seguridad.

Copia de seguridad parcial de archivos

Otra manera de que un escritor indique los cambios en el solicitante es mediante el mecanismo de archivo parcial. Un escritor puede especificar intervalos de bytes dentro de los archivos de componentes de los que se debe realizar una copia de seguridad; el escritor puede especificar estos intervalos de archivos en IVssBackupComponents::P repareForBackup o en IVssBackupComponents::D oSnapshotSet. Un solicitante puede determinar estos archivos llamando a IVssComponent::GetPartialFileCount e IVssComponent::GetPartialFile. IVssComponent::GetPartialFile devolverá una ruta de acceso y un nombre de archivo que apunte al archivo, y una cadena de intervalos que indica lo que se debe hacer en el archivo. Al igual que con los archivos diferenciados, si la ruta de acceso y el nombre de archivo coinciden con una especificación de archivo establecida por el escritor en IVssBackupComponents::GatherWriterMetadata, la información de archivo parcial invalida la configuración anterior. La cadena de rangos puede tener dos formatos: puede especificar los intervalos directamente o puede especificar un archivo que contenga información de intervalos. Si especifica rangos directamente, la sintaxis es una lista separada por comas del desplazamiento de formulario1:length1, offset2:length2, donde cada desplazamiento y longitud es un entero de 64 bits sin signo. Si especifica un archivo ranges, la cadena de intervalos debe establecerse en File= filename, donde filename es la ruta de acceso completa al archivo ranges. El archivo ranges es un archivo binario con formato de lista de enteros de 64 bits sin signo. El primer entero indica cuántos intervalos se representan en el archivo. Cada par subsiguiente de enteros representa el desplazamiento y la longitud de un intervalo. El solicitante también debe tener cuidado para realizar copias de seguridad y restaurar este archivo de intervalos.

Reglas de especificación de archivos

Las especificaciones de archivo agregadas a través del archivo diferencial y los mecanismos de archivo parcial modificarán las especificaciones de archivo establecidas en IVssBackupComponents::GatherWriterMetadata o agregarán archivos completamente nuevos. Si se modifican las especificaciones de archivos establecidas en IVssBackupComponents::GatherWriterMetadata mediante el mecanismo de archivo parcial, un solicitante puede esperar que la especificación del archivo coincida exactamente con una de las especificaciones de archivo establecidas en el componente en IVssBackupComponents::GatherWriterMetadata. La especificación del archivo no se superponerá parcialmente a otra especificación de archivo y no coincidirá con ninguna otra de los componentes de ese escritor. Sin embargo, las especificaciones de archivo agregadas mediante el mecanismo de archivo parcial pueden superponerse parcialmente a otra especificación de archivo. Cuando esto es true, la especificación de archivo o de archivo parcial invalida el conjunto de especificaciones en IVssBackupComponents::GatherWriterMetadata. Las especificaciones generales de archivo pueden tener un valor de ubicación alternativa (devuelto por IVssWMFiledesc::GetAlternateLocation) que indica un lugar alternativo para obtener el archivo en tiempo de copia de seguridad. Si las especificaciones de archivo establecidas a través de los mecanismos de archivo parcial o de archivo diferencial coinciden con una especificación de archivos existente que tiene una ubicación alternativa, los datos se deben recoger desde esta ubicación alternativa. Si las especificaciones de archivo establecidas a través de los mecanismos de archivo parcial o de archivo diferencial no coinciden con ninguna especificación existente para el componente, estos intervalos de archivos ahora se deben agregar a la copia de seguridad. El solicitante puede esperar que solo se agreguen archivos en volúmenes que ya se hayan incluido en el conjunto de instantáneas mediante uno de estos mecanismos.

Copia de seguridad sin instantáneas

Es posible que no sea necesario realizar una copia de seguridad de determinados tipos de archivos fuera de un volumen de instantáneas. Por ejemplo, esto suele ser cierto en los archivos de registro de base de datos. Dado que los archivos de registro crecen de forma monotónica y un escritor puede especificar exactamente qué partes del archivo se van a realizar copias de seguridad mediante archivos parciales, a menudo será posible realizar una copia de seguridad del volumen original. Como optimización, un escritor puede marcar qué archivos requieren instantáneas para diferentes tipos de copia de seguridad mediante la máscara de tipo de copia de seguridad. El valor devuelto de IVssWMFiledesc::GetBackupTypeMask puede contener uno o varios de los siguientes valores de bits:

VSS_FSBT_FULL_SNAPSHOT_REQUIRED

Instantánea necesaria para copias de seguridad completas.

VSS_FSBT_DIFFERENTIAL_SNAPSHOT_REQUIRED

Instantánea necesaria para copias de seguridad diferenciales.

VSS_FSBT_INCREMENTAL_SNAPSHOT_REQUIRED

Instantánea necesaria para las copias de seguridad incrementales.

VSS_FSBT_LOG_SNAPSHOT_REQUIRED

Instantánea necesaria para las copias de seguridad de registros.

VSS_FSBT_ALL_SNAPSHOT_REQUIRED

Instantánea necesaria para todos los tipos de copia de seguridad; este es el valor predeterminado.

Si un volumen específico contiene solo componentes que no requieren una instantánea para esta copia de seguridad, el solicitante puede omitir el paso de creación de una instantánea para este volumen. Todos los datos de este volumen se pueden copiar en los medios de copia de seguridad directamente desde el volumen original.

Restaurar archivos

Restauraciones secuenciales

Una vez que el solicitante haya terminado de realizar una operación de restauración, envía el evento PostRestore a todos los escritores. Por lo general, los escritores controlan este evento realizando operaciones de recuperación u otras operaciones posteriores a la restauración. Sin embargo, la restauración de las copias de seguridad incrementales suele ocurrir como una secuencia de operaciones de restauración, una por copia de seguridad incremental. El solicitante debe informar al escritor de que dicha restauración está en curso para evitar que se produzcan operaciones de recuperación u otras operaciones no deseadas hasta que la restauración se realice por completo. Esto se hace llamando a IVssBackupComponents::SetAdditionalRestores. Este método se llama por componente e indica al escritor que vienen más restauraciones para ese componente. Para la restauración final en la secuencia, la marca de restauraciones adicionales debe establecerse en false (su valor predeterminado), lo que indica que esta es la última restauración de la secuencia para ese componente.

Nuevos destinos

Si es compatible con el escritor, el solicitante puede restaurar archivos de datos en una ubicación distinta de la ubicación en tiempo de copia de seguridad original. El solicitante puede comprobar esta compatibilidad llamando a IVssExamineWriterMetadata::GetBackupSchema. El bit de VSS_BS_WRITER_SUPPORTS_NEW_TARGET se establecerá si el escritor admite este comportamiento. El solicitante informa al escritor de la nueva ubicación llamando a IVssBackupComponents::AddNewTarget para cada especificación de archivo reubicada. El solicitante también puede decidir restaurar un archivo de intervalos específico a otra ubicación. El solicitante informa al escritor de este cambio llamando a IVssBackupComponents::SetRangesFilePath.

Destinos dirigidos

En escenarios de restauración complicados, es posible que un escritor quiera asignar intervalos de un archivo de copia de seguridad a distintos intervalos del mismo archivo o diferente. Esto se puede hacer mediante el mecanismo de destino dirigido. El solicitante puede determinar después de la fase IVssBackupComponents::P reRestore de que este mecanismo se usa para un componente llamando a IVssComponent::GetRestoreTarget y comprobando una devolución de VSS_RT_DIRECTED. El solicitante puede obtener todas estas restauraciones redirigidas llamando a IVssComponent::GetDirectedTargetCount e IVssComponent::GetDirectedTarget. IVssComponent::GetDirectedTarget devolverá una ruta de acceso completa a un archivo de origen en la copia de seguridad y una ruta de acceso completa a un archivo de destino en el que se restaurará. También devuelve una lista de rangos para cada uno de estos archivos. A continuación, el solicitante es responsable de restaurar los intervalos especificados en el archivo de origen a los intervalos asignados en el archivo de destino. El formato de la cadena de rangos es el mismo que en IVssComponent::GetPartialFile.