Confidencial de WindowsLa paradoja del sistema de archivos

Raymond Chen

Si echa un vistazo en su disco duro, probablemente advertirá que un considerable número de archivos del sistema operativo frecuentan el directorio raíz de la unidad de arranque. Si examina más atentamente esos archivos, es posible que perciba una cosa: boot.ini, NTLDR y NTDETECT.COM son archivos de arranque críticos, e hiberfil.sys es el archivo de hibernación. Todos son archivos implicados en las primeras etapas cruciales de arranque del sistema operativo o, en el caso de hiberfil.sys, de reanudación desde la hibernación, y deben estar en la raíz de la unidad de arranque. ¿Por qué no los puede mover a cualquier otra parte?

Mi colega Adrian Oney explicaba: para leer los archivos de arranque del disco, se necesita el controlador del sistema de archivos pero el controlador del sistema de archivos está en el disco, que no se puede leer hasta que no haber cargado el controlador del sistema de archivos. ¡Ah no, una situación sin salida!

El círculo vicioso se interrumpe si hay un controlador en miniatura del sistema de archivos integrado en los archivos de arranque críticos. Este controlador en miniatura sabe justo lo suficiente para localizar los archivos en el directorio raíz y cargarlos en memoria. A su vez, esos archivos pueden encaminar el sistema operativo para que, a continuación, el verdadero controlador del sistema de archivos se haga cargo y busque los archivos en lugares mucho más elaborados, como los subdirectorios.

  

La hibernación sigue una pauta parecida. Hibernar el sistema operativo significa volcar todo el contenido de la memoria en el archivo de hibernación; restaurarlo desde la hibernación trae consigo volver a "absorber" ese archivo en la memoria y fingir que nada ha sucedido. Y aquí estamos de nuevo con otro problema del huevo y la gallina: para cargar el archivo de hibernación, se necesita el controlador del sistema de archivos, pero el controlador del sistema de archivos está en el archivo de hibernación. Si se guarda el archivo de hibernación en el directorio raíz de la unidad de arranque, puede usar en su lugar el controlador en miniatura del sistema de archivos.

Los que habían usado las primeras versiones de MS-DOS® son plenamente conscientes de esta restricción de la ubicación de los archivos de arranque del sistema operativo. El antiguo comando SYS convertía un disquete viejo y aburrido en un disquete de arranque mágico. Sin embargo, si se ejecutaba en un disquete que ya contenía datos, había muchas posibilidades de que la conversión produjera un error porque las primeras versiones de MS-DOS requerían que los archivos de arranque ocuparan determinadas ubicaciones en el disquete para que el sector de arranque los encontrara. Las versiones posteriores de MS-DOS redujeron estos requisitos gracias mejoras en el cargador de arranque pero, incluso con la versión mejorada, los archivos del sistema deben continuar ubicados en el directorio raíz.

Un cliente preguntó: "¿puedo mover el archivo de hibernación a un subdirectorio?" A fin de cuentas, ¿por qué importa dónde esté el archivo? Las ACL del archivo serán las mismas indistintamente de su ubicación. Quería colocarlo en una unidad distinta de la unidad de arranque y se le había dicho que eso no era posible. Realmente no entendía la razón de esta restricción, así que intentó una última cosa: bueno, pues si al menos lo puedo mover a un subdirectorio, puedo crear un directorio y convertirlo en unión que señale hacia donde realmente quiero tener el archivo de hibernación. Bien, ¡he reubicado el archivo de hibernación!

Por supuesto, el controlador en miniatura del sistema de archivos no entiende de puntos de montaje, porque los puntos de montaje significan "hablar" con el servicio de administración del disco. Y, en el momento en que se arranca el sistema, el equipo ni tan siquiera ha cargado todavía el sistema operativo ni mucho menos algún elaborado servicio avanzado que sabe cómo volver a asignar letras de unidad a las rutas de acceso ARC; incluso si de algún modo se lograra ejecutar ese servicio, aún habría que encontrar los controladores de dispositivo para esos otros discos duros y cargar los correspondientes controladores del sistema de archivos.

Sólo es cuestión de tiempo y alguien pedirá una manera de colocar el archivo de hibernación en una unión DFS.

Raymond Chen The Old New Thing, y en su libro homónimo (Addison-Wesley, 2007) se trata la historia de Windows y la programación de Win32. Su nombre Web 2.0 es Raymond o quizás Chenster.

© 2008 Microsoft Corporation and CMP Media, LLC. Reservados todos los derechos; queda prohibida la reproducción parcial o total sin previa autorización.