Identificador del artículo : FS-FBS-20060427-I01
Última verificación : 29 de noviembre de 2011
Versión : 1.1

Archivado (copia de seguridad) de archivos abiertos y bloqueados

El artículo aborda cuestiones relacionadas con el llamado el problema del archivado (copia de seguridad) de archivos abiertos. Explica que son los archivos abiertos, los motivos por los que algunos archivos pueden estar bloqueados y muestra cómo se implementa este bloqueo. Finalmente, se proponen dos mecanismos diferentes para solucionar el problema de archivado de archivos abiertos.


Bloqueo de archivos por parte del sistema operativo

Los mecanismos de bloqueo de archivos (en inglés, file locking) son utilizados en todos los sistemas operativos multitareas. En algunos, los bloqueos de archivos son obligatorios (por ejemplo, Microsoft Windows) y en otros, es opcional (por ejemplo, UNIX).

Más abajo, nos centraremos en los casos en los que los bloqueos son obligatorios (en inglés, mandatory locking), debido a que solamente en estas situaciones aparece el problema con el archivado de archivos abiertos.

Todo aquel que alguna vez ha tenido que realizar una copia de seguridad de archivos importantes han tenido que enfrentarse alguna vez con este hecho: el archivo que necesita ser respaldado se omite mientras se realiza la copia de seguridad, o aparece un error que informa que el sistema no puede acceder al archivo porque este está siendo utilizado por otro proceso.

Dibujo 1 Error al copiar un archivo bloqueado

Dibujo 1 Error al copiar un archivo "system" bloqueado"


Si tu también te has topado con un problema similar o tienes intención de archivar una base de datos, los archivos de sistema u otros archivos utilizados por otras aplicaciones, cuyo acceso está bloqueado por el sistema operativo, debería familiarizarse con el texto a continuación. Unos momentos empleados en la lectura del artículo, le serán útiles y tarde o temprano podrá aplicar la información obtenida en la práctica.



Permisos de acceso y modos de uso compartido

Cada proceso que abra un archivo debe especificar un modo de acceso (en inglés, access mode) del que precisa y el modo de uso compartido. Mediante la especificación del modo de acceso, el proceso informa al sistema operativo con que objetivo se abre el archivo. Existen tres tipos distintos de modo de acceso: para lectura, para escritura y para lectura y escritura. Si el proceso dado abre el archivo solamente para leer su contenido, este se abre con permisos solo de lectura. Si se quiere modificar el contenido del archivo, este se abre con permisos de escritura o de lectura y escritura.

Modo de accesoDescripción
Apertura de lecturaSe permite solamente la lectura del archivo
Apertura de escrituraSe permite solamente la escritura del archivo
Apertura de lectura y escrituraSe permite tanto leer y escribir el archivo

Tabla 1. Modos de acceso a un archivo


El segundo parámetro, que debe ser definido por el proceso que quiere acceder al archivo, es el modo de uso compartido (en inglés, sharing mode). Gracias al modo de uso compartido, el sistema operativo sabrá si la siguiente aplicación (proceso), que intenta acceder al archivo, debe poder hacerlo o denegárselo. Existen cuatro modos distintos de uso compartido: sin permisos, permiso para lectura, permiso para escritura, permiso sin limitaciones. Gracias a los modos de uso compartido, los procesos (con la ayuda del sistema operativo) bloquean el acceso a los archivos, a los cuales accedieron primero.

Modo de uso compartidoOpis
Sin permiso de comparticiónOtras aplicaciones no pueden acceder al archivo
Permiso denegando lecturaOtras aplicaciones solo pueden acceder al archivo para escribir
Permiso denegando escrituraOtras aplicaciones solo pueden acceder al archivo para leerlo
Permiso sin limitacionesOtas aplicaciones pueden acceder al archivo sin ningun tipo de restricciones

Tabla 2. Modos de uso compartido


El mecanismo de bloqueo de archivos no se debe confundir con las políticas de seguridad y los permisos otorgados por el administrador del sistema a los usuarios o los atributos de los archivos.

En este artículo, nos interesa el caso en el que un proceso abre un archivo con permiso exclusivo (en inglés, exclusive mode), por lo que bloquea completamente el acceso a otros procesos, impidiendo la lectura o copia del archivo. No contemplaremos la situación, en la que no es posible la escritura o la eliminación del archivo, ya que no estos problemas no están relacionados con el proceso de archivado de datos.



¿Quién y por qué bloquea los archivos?

Los mecanismos de bloqueo de archivos (en inglés, file locking) sirven para proteger datos y su estructura. El acceso a archivos puede estar bloqueado (con la ayuda del sistema operativo) por parte de un proceso, que consiguió el acceso mediante la apertura o creación del archivo. Los mecanismos de bloqueo permiten realizar la operación de escritura o lectura de datos de forma atómica. Este tipo de tareas, requieren que el recurso (un archivo o una parte del mismo) sea indivisible por un período determinado. Esto quiere decir que solo un proceso puede acceder a un tipo dado a la vez.

Imaginemos esta situación: Un proceso A escribe los resultados de un cálculo en varios lugares del archivo o cambia varios registros en una base de datos. Un proceso B, al mismo tiempo, lee el mismo archivo. Los datos leídos por el proceso B pueden ser incoherentes y, muy probablemente, sean inútiles.

Para evitar la posibilidad de lectura (por ejemplo, para la realización de copias de seguridad) de los datos, que no son consistentes desde el punto de vista de una aplicación determinada (por ejemplo, un sistema de base de datos), los archivos se bloquean en modo exclusivo sin permisos de lectura por otros procesos.

Operaciones atómicas, como leer o escribir una parte de datos (transacción), suelen tardar muy poco tiempo, pero el bloqueo que se realiza sobre el archivo impidiendo el acceso al archivo, en muchos de los casos, no solo está activo durante las operaciones atómicas, sino desde el momento en que se abre el archivo hasta que el proceso lo cierra.
Dibujo 2 Archivo abierto y bloqueado por un proceso del sistema

Dibujo 2 Archivo abierto y bloqueado

Este esquema es utilizado en la mayoría de casos por aplicaciones de bases de datos, las cuales, según las suposiciones hechas durante el diseño, serán los únicos "propietarios" del archivo de la base de datos y solamente ellos deberían tener el acceso a él. La lectura del archivo de bases de datos al mismo tiempo por otra aplicación no es, desde el punto de vista del sistema operativo de la base de datos dado, necesario incluso para el simultáneo acceso a la base por varios usuarios. Adicionalmente, la apertura del archivo por otro proceso podría interrumpir el funcionamiento del motor de la base de datos, impidiendo, por ejemplo, la realización de transacciones en su tiempo previsto. Por eso, y con el fin de simplificar la implementación, se suele utilizar bloqueos de archivos, que están activos prácticamente todo el tiempo, evitando así que las aplicaciones de copia de seguridad realicen el archivado.

Normalmente, los archivos de sistema se encuentran bloqueados (por ejemplo, archivos de registro del sistema en los sistemas de la familia Windows NT), bases de datos (Lotus Notes, Oracle, Microsoft SQL Server, Microsoft Access, MySQL, PostgreSQL), archivos de sistemas de correo electrónico y archivos de programas gráficos.



Archivado de archivos bloqueado mediante Ferro Backup System

Ferro Backup System, desde su versión 2.4, permite el archivado de archivos bloqueados o en uso por otras aplicaciones. La opción Open File Manager está disponible en la versión estándar (también en la versión de prueba).

Durante el archivado, existen dos posibles situaciones, en las que Open File Manager es lanzado por el módulo de ejecución de tareas FBS Worker:
En el primer caso, Open File Manager será activado, en caso de que el archivo sea abierto de forma normal (mediante funciones del sistema) y el intento salga fallido después de n/2 pruebas. El parámetro n es el número de intentos de apertura del archivo y se establece en el módulo central de configuración de FBS Server.

El segundo caso, ocurre muchas veces con archivos de bases de datos y hojas de cálculo. Un programa de base de datos o de hoja de cálculo puede, durante la escritura del archivo, bloquear en modo exclusivo una parte de este. Cualquier programa de copia de seguridad puede abrir este archivo en modo de lectura. El problema aparecerá en el momento en el que se intente abrir la parte bloqueada - la operación será detenida y el sistema generará una excepción informándole, que la parte especificada del archivo se encuentra bloqueada por otro proceso. En estos casos, FBS Worker accede de nuevo al archivo, pero esta vez, a través de Open File Manager y sin ningún problema copia todo el contenido del archivo.

Sabemos ya cómo y cuándo el OFM está activado. En lo que sigue del artículo trataremos el flujo de trabajo del administrador de archivos abiertos.



Open File Manager - copia de seguridad de archivos abiertos

En caso de encontrarnos con un archivo bloqueado, el archivado de datos se produce omitiendo el sistema operativo. Open File Manager obtiene el acceso directo al disco duro, omitiendo de este modo los bloqueos impuestos por el sistema operativo. De este modo puede leer toda la información almacenada en el disco independientemente de otras aplicaciones y el propio sistema operativo.

Un clúster, es la unidad de datos más pequeña que está disponible en el nivel del sistema de archivos. Cada archivo ocupa un número de clúster determinado en el disco, el cual depende del tamaño del archivo y tamaño de un clúster. El tamaño de un clúster es fijo y se establece en el momento del formateo de una partición (FAT) o un volumen (NTFS). El archivo puede ser almacenado en grupos consecutivos de clústeres o puede ser fragmentado y sus partes individuales se pueden almacenar en diferentes lugares en el disco. La información sobre cuál de los clústeres ocupa cada archivo está almacenada en la tabla de asignación. Para los sistemas FAT , esta tabla se denomina File Allocation Table, y para NTFS, Master File Table. Para leer un archivo se debe primero leer la información sobre el archivo en la tabla de asignación, que en caso de sistemas FAT y NTFS, son completamente distintas. Open File Manager soporta los dos sistemas de archivos, que además pueden estar en distintas versiones: FAT 12, FAT 16, FAT 32, NTFS 4.0, NTFS 5.0, NTFS 5.1.


Dibujo 3 Disco duro fragmentado en volúmenes NTFS y FAT

Dibujo 3 Disco duro fragmentado en volúmenes NTFS y FAT

El acceso a tan bajo nivel por parte del Open File Manager consiste en la lectura de las tablas de asignación, leyendo de ellas la dirección virtual y lógica de los clústeres que apuntan a fragmentos de un archivo específico y leyendo los datos almacenados en estos clústeres. OFM emplea técnicas adicionales para evitar que se lean datos inconsistentes. Si el archivo es leído por OFM, significa que es coherente. Para el caso de las bases de datos, este será el estado posterior a la transacción.



Comparación de Volume Shadow Copy Service (VSS) y Ferro Backup System OFM

En sistemas Windows XP y Windows 2003 se implementó el servicio de copias de volúmenes en segundo plano (Volume Shadow Copy Service). Este servicio permite, por ejemplo, el archivado de archivos bloqueados. Permite la apertura y copia de archivos en cualquier momento. Lamentablemente, el uso de VSS es bastante limitado, por lo que no se podrá usar en muchas ocasiones.
Dibujo 4 Diagrama de flujo del servicio Volume Shadow Copy (VSS)

Dibujo 4 Diagrama de flujo del servicio Volume Shadow Copy (VSS)