martes, febrero 27, 2007

Cómo funciona Restaurar sistema [Parte I]

En este artículo (será de los últimos o quizá el último que dedique a Windows XP) comentaré cómo funciona internamente una herramienta bastante útil: Restaurar sistema. Además de ofrecer detalles sobre su diseño, incluiré las causas de los mensajes de error y comportamientos anómalos más frecuentes que me he ido encontrando al analizar problemas de usuarios. Si asimila este artículo de dos partes, comprenderá mucho mejor cómo funciona todo y podrá abordar la resolución de problemas con altas garantías de éxito.

En la primera parte del artículo explicaré cómo funciona el controlador en modo núcleo de Restaurar Sistema: Sr.sys. Este controlador, presente en \WINDOWS\system32\drivers, se encarga básicamente de monitorizar los accesos de entrada y salida que se produzcan en el volumen. Lo hace interceptando llamadas de tipo IoCallDriver. El comportamiento del controlador Sr.sys viene determinado por el contenido de la clave de Registro HKEY_CLASSES_ROOT\SYSTEM\CurrentControlSet\Services\Sr\Parameters.

Inicialización del controlador

Al tratarse de un controlador de arranque, se inicializa en una etapa temprana de la carga de Windows. Nada más terminar de inicializarse, se "adhiere" a todos los volúmenes montados por el sistema operativo. Esta es la causa por la que, si dispone de un arranque dual con Windows Vista, observe que pierde todos los puntos de restauración si arranca Windows XP. Seguidamente, crea un directorio llamado "System Volume Information\_restore{GUID}" (si no existiera) en la raíz del disco. Lo crea de tipo oculto, de sistema y por defecto sólo le otorga permisos al usuario SYSTEM. En él se generan unos cuantos archivos, entre los que destacan:

  • _driver.cfg: Contiene el número del punto de restauración actual, número de secuencia del LOG y otra información relacionada.
  • _filelist.cfg: Este fichero es una copia del fichero Filelist.xml presente en el directorio %SystemRoot%\system32\restore\.

¿Qué monitoriza exactamente el controlador?

Básicamente monitoriza todo fichero "interesante". Por interesante se entiende lo siguiente:

  • Que el archivo o carpeta no esté presente en la lista de exclusiones de _filelist.cfg.
  • Que igualmente no esté incluido en una caché interna de Restaurar sistema.
La caché interna a la que se refiere el segundo punto es una tabla hash que "recuerda" las operaciones que se han realizado sobre los archivos y evita monitorizar aquéllas que se repitan. Con esto se minimiza el número de operaciones de copia de archivos.

Una vez que Sr.sys ha determinado que el fichero debe ser respaldado antes de proceder con la operación que se quiere realizar (por ejemplo, eliminarlo), crea una copia del mismo en el directorio System Volume Information\_restore{GUID}\RPX. La copia tiene la forma "AXXXXXXX.ext", donde "X" son números y "ext" es la extensión original del fichero. El subdirectorio Snapshot contiene copias del estado del Registro en el momento de la creación del punto de restauración. Los archivos guardados mantienen sus DACLs, atributos, streams, etc. y a la vez son comprimidos para evitar su fragmentación. Si por algún motivo los ACLs de algún fichero no cupieran en el correspondiente registro (que es de pocos KBs), se creará un fichero de la forma SXXXXXXX.acl y se incluirá una entrada en el LOG apuntando a dicho fichero.

El fichero Change.log

Este fichero es una parte extremadamente importante a la hora de restaurar el equipo de manera satisfactoria. Cuando se realiza una operación de entrada/salida "interesante", además de guardarse una copia del fichero en cuestión (como ya he comentado), se escribe en un fichero Change.log todos los detalles de la operación que se ha realizado. Nótese que, en el caso de que se hayan modificado directorios, no se realiza copia física de respaldo de los mismos, sólo se registra en Change.log la operación que se haya completado.

Para que este fichero sea manejable por el sistema operativo, el sistema lo divide en varios "trozos". Windows finaliza un trozo cuando ocurre alguno de estos eventos:

  • Se ha apagado el equipo.
  • Por algún motivo se ha deshabilitado el volumen en cuestión.
  • Se ha desactivado Restaurar sistema en ese volumen.
  • El archivo ocupa más de 1 MB de tamaño.
Los trozos se diferencian por sufijos numéricos. Así existirían Change.log.1, Change.log.2, etc., siendo el más reciente el de sufijo más alto.

Esta es la funcionalidad básica del controlador de Restaurar sistema en modo núcleo, Sr.sys. En el siguiente artículo me detendré en la parte en modo usuario así como en lo que ocurre "por lo bajo" cuando el usuario pide restaurar su sistema a un punto anterior. Obviamente aclararé por qué ocurren las temidas "restauraciones incompletas", que impiden revertir de manera satisfactoria el estado del sistema.

4 comentarios:

Lumio dijo...

Quiero restaurar mi sistema, pero tengo dudas sobre si perderé archivo y programas ya intalados.
¡Ah! lo quiero restaura a cuatro meses atrás.

Anónimo dijo...

buena idea, yo quiero restaurarlo 1 semana atrás, pero me es imposible. Cómo se hace????? Siempre me pone la hora y fecha actual y NO QUIERO!!:'(

Artmoz

Anónimo dijo...

Por favor ayuda quiero restaurar mi sistema al 09 de septiembre y no puedo

Unknown dijo...

Hola, no se si atenderas mi llamada, ya que veo que esto lo publicaste hace bastante tiempo,pero ante mi duda leo verdaderas barbaridades por internet, que solo de pensarlo, creo que a mas de uno que se habra atrevido a llevarlo a cabo le habra destrozado el sistema.
bueno, pues ahi va: desde que compre mi ordenador con win7 no he podido hacer nunca una restauracion de sitema a un punto anterior. todo el proceso se inicia y parece ir todo de perlas, pero cuando se abre finalmente el sistema arroja una ventana con elmensaje de que " no se pudo extraer la copia original del directorio desde el punto de restauracion". esto ocurre desde que lo compre. pense que esto me sucedia a mi por alguna cosa estraña que hubiese ocurrido al configurar el sistema por primera vez, pero apenas hace unas semanas en casa entro otro nuevo ordenador con win8, hice un punto de restauracion precio a cualquier instalacion de software, y por precaucion hice un restaurar sistema con el fin de comprobar que todo estaba ok, y ¡¡sorpresa!!, ocurrio exactamente lo mismo, en un ordenador completamente virgen en cuanto a usuario se refiere.
en el primer ordenador intente entrar como usuario system, a traves de la utilizacion de net user administrador /active:yes, y realizando la restauracion desde ahi mismo, y nada, lo mismo, lo cual me da que pensar que quizas no es un tema de permisos sino alguna otra cosa mas de fondo. ¿que me sugieres?
muchas gracias y te ruego que si me contestas lo hagas de un modo no excesivamente tecnico, pues aunque tengo algunos conocimientos, no voy tan rodada como tu. gracias.