Trabajar con archivos parciales
A veces resulta útil realizar copias de seguridad y restaurar solo secciones de archivos. VSS proporciona mecanismos de archivos parciales , que, si los solicitantes lo admiten, permite a los escritores especificar copias de seguridad y restauraciones parciales de archivos.
Las operaciones parciales de archivos suelen ser de mayor uso para los escritores que mantienen archivos muy grandes, solo una pequeña fracción de las cuales cambian entre las operaciones de copia de seguridad. Este es el caso, con frecuencia resulta útil copiar solo esa sección que cambió a los medios de copia de seguridad. Por este motivo, las operaciones parciales de archivos suelen usarse, pero no exclusivamente, para admitir operaciones incrementales de copia de seguridad y restauración.
Si un escritor quiere implementar una operación de archivo parcial, usa CVssWriter::IsPartialFileSupportEnabled para determinar si el solicitante con el que está trabajando admite la operación.
Si el solicitante admite operaciones de archivo parciales y, si agrega el componente que administra el archivo (o el componente que define el conjunto de componentes que contiene el archivo) al documento componentes de copia de seguridad, un escritor indica qué secciones del archivo se guardarán (normalmente mientras se controla un evento PrepareForBackup o PostSnapshot ) llamando a IVssComponent::AddPartialFile.
Además de una ruta de acceso y un nombre de archivo, el escritor proporciona la información de metadatos opcionales del intervalo a IVssComponent::AddPartialFile.
La información del intervalo se proporciona como una cadena que contiene cualquiera de las siguientes opciones:
Pares de desplazamientos en el archivo de los que se va a realizar una copia de seguridad (en bytes) y la longitud de la sección de la que se va a realizar una copia de seguridad (en bytes), el desplazamiento y la longitud que se separan por dos puntos y cada par separados por una coma, por ejemplo, Offset1**:Length1,** Offset2**:**Length2.
Cada valor es un entero de 64 bits (en formato hexadecimal o decimal) que especifica un desplazamiento de bytes y una longitud en bytes, respectivamente.
Ruta de acceso completa, incluido el nombre de archivo, en el sistema actual de un archivo de rangos binarios que contiene lo siguiente:
- Número (expresado como un entero de 64 bits) de intervalos de archivos distintos contenidos en el archivo.
- Cada intervalo expresado como un par de enteros de 64 bits: el primer miembro del par que es el desplazamiento en el archivo del que se realiza una copia de seguridad (en bytes) y el segundo miembro es la longitud de los datos de los que se va a realizar una copia de seguridad (en bytes)
Si un escritor usa un archivo ranges para especificar una operación de archivo parcial, un solicitante debe garantizar que se realice una copia de seguridad de este archivo (incluso si el archivo no forma parte necesariamente del conjunto de copia de seguridad predeterminado) o que la información de intervalos se conserva en los medios de copia de seguridad de alguna otra manera. Si no se realiza una copia de seguridad de la información del archivo de rangos, la restauración del archivo de copia de seguridad parcial será imposible.
El escritor también puede agregar una cadena que contenga metadatos. Estos metadatos pueden tener un formato específico del escritor porque está pensado para permitir que el escritor valide las restauraciones futuras.
Con esta información, un solicitante auxiliar puede realizar una copia de seguridad parcial de archivos.
Por ejemplo, considere un archivo grande cuyo encabezado (bytes 64-512) contiene un recuento de registros y otra información actualizada con frecuencia, y cuyos datos más recientes se van a encontrar en los últimos 65536 bytes( bytes 0x1239E8577A a 0x1239E7577A.
Un escritor podría especificar una lista de intervalos como la cadena "64:448,0x1239E8577A:65536".
En la restauración y antes de realizar realmente una operación de restauración, un solicitante debe comprobar si algún archivo requiere compatibilidad parcial con archivos.
Para ello, el solicitante recorre primero en iteración los escritores con componentes almacenados en su documento de componentes de copia de seguridad mediante IVssBackupComponents::GetWriterComponentsCount e IVssBackupComponents::GetWriterComponents.
La interfaz IVssBackupComponents::GetWriterComponents se usa para devolver instancias de la interfaz IVssWriterComponentsExt , que proporcionan IVssWriterComponentsExt::GetComponent e IVssWriterComponentsExt::GetComponentCount, que permiten al solicitante obtener instancias de IVssComponent .
Esto permite a un solicitante obtener información sobre los archivos de copia de seguridad parciales para participar en una restauración mediante IVssComponent::GetPartialFileCount e IVssComponent::GetPartialFile para la instancia de IVssComponent correspondiente al componente que administra el archivo (o el componente que define el conjunto de componentes que contiene el archivo).
Si la operación de archivo parcial se controló mediante un archivo ranges, ese archivo se debe restaurar antes de copiar los datos de nuevo en el disco. Es posible que el solicitante necesite volver a copiar el archivo de rangos en una nueva ubicación en el disco. En este caso, indica que lo ha hecho a través de IVssBackupComponents::SetRangesFilePath.
A continuación, el solicitante continúa copiando datos en las ubicaciones adecuadas del destino de restauración ya en el disco.
Un escritor (mientras controla un evento PostRestore ), examinando IVssComponent::GetFileRestoreStatus para los archivos indicados por IVssComponent::GetPartialFile, determina si la operación de archivo parcial se realizó correctamente. El escritor siempre debe intentar comprobar la exactitud de esta restauración mediante la información de desplazamiento y los metadatos incluidos en el documento componentes de copia de seguridad.
Si el solicitante ha tenido que restaurar el archivo de rangos en una nueva ubicación, VSS actualizará esta información para que la ruta de acceso devuelta por IVssComponent::GetPartialFile sea correcta.