Buscar este blog

viernes, 3 de enero de 2014

Reparar disco duro

comprobar y reparar discos duros con el comando CHKDSK mediante la línea de comandos en Windows


Chkdsk.exe es la interfaz de línea de comandos del programa que comprueba la integridad lógica de un sistema de archivos en Windows. Cuando CHKDSK encuentra incoherencias lógicas, emprende acciones para reparar los datos del sistema de archivos siempre que no esté en modo de solo lectura.

El código que realmente lleva a cabo la comprobación cuando CHKDSK se ejecuta en línea reside en las DLL de utilidades como Untfs.dll y Ufat.dll. Las rutinas de comprobación invocadas por Chkdsk.exe son las mismas que se invocan cuando se comprueba un volumen a través de la interfaz gráfica de usuario que proporciona el Explorador de Windows o el Administrador de discos. Por otro lado, cuando la ejecución de CHKDSK se programa para llevarse a cabo al reiniciar el sistema, el módulo binario que contiene el código de comprobación es Autochk.exe, que es una aplicación original de Windows que se ejecuta lo suficientemente pronto en la secuencia de inicio del sistema como para que no disfrute de la ventaja de la memoria virtual de otros servicios Win32. Autochk.exe genera el mismo tipo de salida de texto que las DLL de utilidades que invoca Chkdsk.exe. Sin embargo, además de mostrar esta salida en la pantalla durante el proceso de inicio, Autochk.exe también registra un evento en el registro de eventos de aplicación para el sistema que contendrá tanto texto como quepa en el búfer de datos del registro de eventos.

Puesto que Autochk.exe y el código de comprobación de las DLL de utilidades que usa Chkdsk.exe se basan en el mismo código fuente, se hará referencia a ambas genéricamente como "CHKDSK" en el resto de este artículo. Igualmente, como este artículo tiene que ver con los cambios en el comportamiento de CHKDSK con respecto a los volúmenes NTFS, se debe entender que, al decir "CHKDSK hace esto y esto", se pretende decir: "CHKDSK hace esto y esto cuando se ejecuta en un volumen NTFS".

Puesto que el uso de los modificadores /C e /I puede provocar que el resto del volumen se dañe incluso después de finalizar CHKDSK, su uso no se recomienda excepto en situaciones en las que el tiempo de inactividad del sistema deba ser mínimo. Estos modificadores están pensados para ser utilizados por usuarios con volúmenes excepcionalmente grandes y que requieran flexibilidad a la hora de administrar el tiempo de inactividad que se experimenta cuando CHKDSK se debe ejecutar en tales volúmenes.

Para saber cuándo podría ser apropiado usar estos modificadores, es importante tener un conocimiento básico de algunas de las estructuras de datos internas de NTFS, el tipo de daños que pueden causar, qué acciones emprende CHKDSK cuando comprueba un volumen y qué posibles consecuencias puede tener burlar los pasos de comprobación usuales de CHKDSK.

La actividad de CHKDSK se divide en tres "etapas" principales durante las que examina todos los "metadatos" en el volumen y una cuarta etapa opcional. Los metadatos son "datos acerca de los datos". Se trata de la sobrecarga del sistema de archivos, por decirlo así, que se emplea en realizar el seguimiento de toda la información referente a los archivos del volumen. Los metadatos indican qué unidades de asignación conforman los datos para un archivo determinado, cuáles están libres, cuáles contienen sectores erróneos, etcétera. El "contenido" de un archivo, por otro lado, se conoce como "datos de usuario". NTFS protege sus metadatos gracias al uso de un registro de transacciones. Los datos de usuario no se protegen de este modo.

Durante su primera etapa, CHKDSK muestra un mensaje en la pantalla que indica que está comprobando los archivos y muestra un contador de porcentaje de 0 a 100 para indicar el tanto por ciento del proceso completado. Durante esta fase, CHKDSK examina cada segmento de registro de archivo (FRS) en la tabla de archivos maestra (MFT) del volumen. Cada archivo y directorio de un volumen NTFS se identifica de forma exclusiva mediante un FRS concreto en la MFT y el porcentaje que CHKDSK muestra durante esta fase se refiere al tanto por ciento de la MFT que se ha comprobado. Durante esta etapa, CHKDSK examina cada FRS para comprobar su coherencia interna y genera dos mapas de bits, uno que representa qué FRS se usan y el otro los clústeres del volumen que se están utilizando. Al final de esta fase, CHKDSK sabe qué espacio se está usando y qué espacio está disponible tanto en la MFT como en el volumen como un todo. NTFS realiza el seguimiento de esta información en mapas de bits propios que se almacenan en el disco, lo que permite a CHKDSK comparar sus resultados con los mapas de bits de NTFS almacenados. Si hay discrepancias, se señalan en la salida de CHKDSK. Por ejemplo, si se encuentra que se ha dañado un FRS que se estaba utilizando, los clústeres del disco asociados anteriormente con ese FRS se terminarán marcando como disponibles en el mapa de bits de CHKDSK, pero se marcarán para indicar que "están utilizándose" de acuerdo con el mapa de bits de NTFS.

Durante su segunda etapa, CHKDSK muestra un mensaje en la pantalla que indica que está comprobando los índices y muestra un contador de porcentaje de 0 a 100 para indicar el proceso que lleva completado esta segunda vez. Durante esta fase, CHKDSK examina cada uno de los índices del volumen. Los índices son, esencialmente, directorios NTFS y el porcentaje de proceso completado que muestra CHKDSK durante esta fase se refiere al número total de directorios en el volumen que tienen que comprobarse. Durante esta etapa, CHKDSK examina la coherencia interna de cada directorio del volumen y que al menos un directorio haga referencia a cada archivo y directorio representados por un FRS en la MFT. También confirma que todos los archivos o subdirectorios a los que se hace referencia en cada directorio existan realmente como un FRS válido en la MFT y comprueba si hay referencias circulares en los directorios. Finalmente, confirma que las diversas marcas de tiempo y la información del tamaño de archivo asociada con los archivos estén actualizadas en las listas de directorios correspondientes a esos archivos. Al final de esta fase, CHKDSK ha comprobado que no existen archivos "huérfanos" y que todas las listas de directorios contienen archivos válidos. Un archivo huérfano es aquel para el que existe un FRS válido pero que no aparece en ningún directorio. Cuando se encuentra un archivo huérfano, suele poder restaurarse a su directorio adecuado, siempre que ese directorio siga existiendo. Si el directorio que debería contener el archivo ya no existe, CHKDSK creará un directorio en el directorio raíz y colocará allí el archivo. Si las listas de directorios hacen referencia a FRS que ya no se usan o que se usan pero no se corresponden con el archivo que aparece en el directorio, la entrada del directorio simplemente se quita.

Durante su tercera etapa, CHKDSK muestra un mensaje en la pantalla que indica que está comprobando los descriptores de seguridad y muestra un contador de porcentaje de 0 a 100 para indicar el proceso completado una tercera vez. Durante esta fase, CHKDSK examina cada uno de los descriptores de seguridad asociados con cada archivo y directorio del volumen. Los descriptores de seguridad contienen información relativa al propietario del archivo o directorio y el permiso NTFS e información de auditoría para el archivo o directorio. El porcentaje en este caso se corresponde con el número de archivos y directorios del volumen. CHKDSK comprueba que cada estructura de descriptores de seguridad esté bien formada y sea coherente internamente. No comprueba que los usuarios o grupos enumerados existan realmente o que los permisos se hayan concedido de forma apropiada.

La cuarta etapa de CHKDSK solo se ejecuta si se usa el modificador /R. /R se utiliza para buscar sectores erróneos en el espacio libre del volumen. Cuando se usa /R, CHKDSK intenta leer cada sector del volumen para confirmar que el sector puede usarse. Los sectores asociados con los metadatos se leen durante el curso natural de la ejecución de CHKDSK incluso si no se utiliza /R. Los sectores asociados con los datos de usuario se leen durante fases anteriores de CHKDSK siempre que se especifique /R. Cuando se encuentra un sector ilegible, NTFS agrega el clúster que lo contiene a su lista de clústeres erróneos y, si se estaba usando, asigna un clúster nuevo para que haga el trabajo del anterior. Si se utiliza un controlador de disco con tolerancia a errores, los datos se recuperan y se escriben en el clúster recién asignado. De lo contrario, el nuevo clúster se rellena con un patrón de 0xFF bytes. Cuando NTFS encuentra sectores ilegibles durante el curso de una operación normal, también volverá a asignarlos de la misma forma. Por lo tanto, el modificador /R no suele ser esencial, pero se puede utilizar como un mecanismo útil para examinar todo el volumen si se sospecha que el disco tiene sectores erróneos.

Los párrafos anteriores solo ofrecen información a grandes rasgos de lo que CHKDSK va a hacer en realidad para comprobar la integridad de un volumen NTFS. Hay muchas comprobaciones concretas que se efectúan durante cada etapa y varias comprobaciones rápidas entre las etapas que no se han mencionado. En cambio, se trata simplemente de una introducción de las facetas más importantes de la actividad de CHKDSK que sirve como fundamento para la siguiente explicación relativa al tiempo necesario para ejecutar CHKDSK y a los efectos de los nuevos modificadores proporcionados en el Service Pack 4.

Durante la primera y tercera fases de CHKDSK, el indicador porcentual de proceso completado avanza con relativa fluidez. Puede haber algunas desigualdades en la velocidad a la que estas fases avanzan. Los FRS que no se usan requieren menos tiempo para procesarse que las que sí se utilizan. Los descriptores de seguridad mayores tardan más en procesarse que los pequeños, etcétera. Pero, en conjunto, el porcentaje mostrado es una representación bastante precisa del tiempo real requerido para cada fase.

Lo mismo no se cumple necesariamente en la segunda fase de CHKDSK. La cantidad de tiempo requerido para procesar un directorio está estrechamente vinculada al número de archivos o subdirectorios incluidos en él. Pero el porcentaje que se muestra durante esta fase corresponde al número de directorios que se van a examinar, independientemente del hecho de que algunos podrían tardar mucho más en procesarse que otros. Por ejemplo, en un volumen con muchos directorios pequeños y uno muy grande, el porcentaje que indica lo que se lleva hecho podría progresar rápidamente del 0 al 10 por ciento y, después, parecer que se queda parado durante un largo período antes de progresar rápidamente del 10 al 100 por ciento. Por lo tanto, a menos que sepa con certeza que los directorios de un volumen son bastante uniformes con respecto al número de archivos que contienen, el "porcentaje completado" durante esta fase no se puede considerar una representación confiable del tiempo restante real de esta fase.

Para empeorar las cosas cuando se está en mitad de una ejecución inesperada de CHKDSK, la segunda fase de su proceso suele ser la que más tarda.

Por ahora, debe quedar claro que hay numerosos factores implicados en el estado de un volumen que desempeñan un papel importante en el tiempo en que CHKDSK tardará en ejecutarse. Una fórmula para predecir el tiempo requerido para ejecutar CHKDSK en un volumen dado debería tener en cuenta factores como el número de archivos y directorios, el grado de fragmentación del volumen en general y la tabla de archivos maestra en particular, si los archivos tienen nombres largos y nombres con formato 8.3 y qué cantidad de datos tiene que repararse realmente. Y eso por no hablar de cuestiones de hardware como la cantidad de memoria del sistema, la velocidad de la CPU, la velocidad del disco o discos, etcétera.

En lugar de intentar predecir cuánto tardará CHKDSK en ejecutarse en un volumen determinado de una plataforma de hardware concreta, basta con decir que puede tardar desde varios segundos hasta varios días, según la situación específica. A menos que se use /R , en una plataforma de hardware determinada la cuestión principal es el número de archivos y directorios en lugar del tamaño absoluto del volumen. Es decir, en un volumen de 50 GB con uno o dos archivos de base de datos grandes, CHKDSK solo tardará segundos en ejecutarse siempre que no se especifique el modificador /R. Si se especifica /R, CHKDSK tendrá que leer y comprobar cada sector del volumen, y eso claramente agrega tiempo en los volúmenes grandes. Por otro lado, CHKDSK puede tardar horas en ejecutarse en un volumen relativamente pequeño si tiene cientos de miles o millones de archivos pequeños, tanto si se especifica /R como si no.

La mejor forma de predecir cuánto tardará CHKDSK en ejecutarse en un volumen dado es hacer una ejecución de prueba en modo de solo lectura durante un período de poco uso del sistema. Sin embargo, tenga cuidado al emplear esta técnica, por tres motivos:
  • El comando CHKDSK en modo de solo lectura dejará de ejecutarse antes de completar las tres fases si encuentra errores en las fases anteriores y es propenso a informar de errores falsos cuando se ejecuta en este modo. Es decir, CHKDSK puede indicar que un disco está dañado incluso aunque no se hayan producido daños reales. Esto puede ocurrir si da la casualidad de que NTFS modifica áreas del disco en nombre de alguna actividad de programas que CHKDSK esté examinando al mismo tiempo. Para comprobar correctamente un volumen, este debe estar en estado estático y el único modo de garantizar ese estado es bloquear el volumen. CHKDSK solo bloquea el volumen cuando se especifican los modificadores /F o /R (que implica "F"). Por tanto, puede que tenga que ejecutar CHKDSK más de una vez para conseguir que complete todas las etapas en modo de solo lectura.
  • La carga del sistema y si CHKDSK se ejecuta en línea o durante la secuencia de inicio de Windows NT pueden afectar al tiempo necesario para ejecutar CHKDSK. CHKDSK utiliza mucho tanto la CPU como el disco. El factor que llegue a convertirse en el cuello de botella dependerá del escenario concreto de hardware, pero si se va a usar mucho la CPU o va a haber muchas operaciones de entrada y salida de disco a la vez que se ejecuta CHKDSK en modo de solo lectura, los tiempos se desvirtuarán (al alza). Además, Autochk.exe se ejecuta en un entorno diferente al de Chkdsk.exe. Aunque la ejecución de CHKDSK a través de Autochk.exe permite que CHKDSK use de forma exclusiva los recursos de CPU y E/S, también le priva de la ventaja de utilizar la memoria virtual. Por lo tanto, aunque normalmente sería de esperar que Autochk.exe se ejecutara más rápidamente que Chkdsk.exe, en los sistemas con cantidades relativamente bajas de RAM puede ocurrir que Autochk.exe tarde más en ejecutarse que Chkdsk.EXE.
  • Reparar los daños hace que se tarde más en ejecutar el proceso. Un comando CHKDSK en modo de solo lectura puede finalizar solo si no se encuentran daños significativos. Si un disco sufre únicamente daños poco importantes, el tiempo necesario para corregir los problemas será ligeramente mayor del requerido para ejecutar CHKDSK en modo de solo lectura. Pero si los daños son más significativos, por ejemplo, provocados por un problema grave de los cabezales o un fallo serio del hardware, el tiempo necesario para ejecutar CHKDSK puede aumentar en proporción al número de archivos dañados. En casos extremos, este tiempo podría duplicarse.

Introducción a los modificadores /C e /I

El modificador /C indica a CHKDSK que omita las comprobaciones que detectan ciclos en la estructura de directorios. Los ciclos son una forma muy poco común de daño que hace que un subdirectorio se tenga a sí mismo como antecesor. El uso del modificador /C puede acelerar la ejecución de CHKDSK en aproximadamente entre un 1 y un 2 por ciento. El uso de /C también puede dejar "bucles" de directorios en un volumen NTFS. Estos bucles pueden ser inaccesibles desde el resto del árbol de directorios y podrían provocar que varios archivos quedaran huérfanos, en el sentido de que no podrían ser vistos por las aplicaciones Win32, incluidas las de copia de seguridad.

El modificador /I indica a CHKDSK que omita las comprobaciones que comparan las entradas de directorio de los FRS correspondientes. Por lo tanto, aunque las entradas de directorio se siguen comprobando para garantizar que son coherentes consigo mismas, no son necesariamente coherentes con los datos almacenados en sus correspondientes FRS ni siquiera después de que CHKDSK se haya ejecutado con este modificador. El uso del modificador /I suele provocar la reducción del tiempo que CHKDSK tarda en ejecutarse entre un 50 y un 70 por ciento. Para calcular con qué mayor velocidad se consigue ejecutar CHKDSK exactamente con este modificador se tendrán que tener en cuenta factores como la proporción de archivos y directorios, además de la velocidad relativa de la E/S de disco con respecto a la velocidad de la CPU y, por lo tanto, es difícil de predecir de antemano. El uso del modificador /I puede provocar que queden entradas de directorio que se refieran a FRS incorrectos o que haya FRS a los que no se haga referencia en ninguna entrada de directorio. El último caso es otra forma de horfandad. El archivo representado por el FRS puede estar intacto en todos los aspectos excepto en el hecho de que sea invisible para todas las aplicaciones Win32, incluidas las de copia de seguridad. En el caso anterior, los archivos parece que existen; incluso las aplicaciones encuentran errores al intentar tener acceso a ellos.

Cuando se detectan daños en un disco de un volumen, se pueden elegir tres opciones básicas:

  • No hacer nada. En un servidor esencial que tiene que estar en funcionamiento 24 horas al día, esta suele ser la elección por necesidad. La desventaja es que ese daño relativamente poco importante puede comportarse como una "bola de nieve" y adquirir importancia si no se repara lo antes posible una vez detectado. Por lo tanto, esta opción solo debería considerarse cuando mantener un sistema activo es más importante que la integridad de los datos almacenados en el volumen dañado debido a que todos los datos del volumen dañado deberían considerarse "en peligro" hasta que se ejecute CHKDSK.
  • Ejecutar un CHKDSK completo. Esta opción repara todos los datos del sistema de archivos y restaura los datos de los usuarios que puedan recuperarse mediante un proceso automático. La desventaja de esta opción es que la ejecución de un CHKDSK completo puede requerir varias horas de tiempo de inactividad de un servidor crucial en un momento inoportuno.
  • Ejecutar un CHKDSK abreviado con alguna combinación de los modificadores /C y /I. Esta opción repara los tipos de daños que pueden comportarse como una "bola de nieve" y convertirse en problemas mayores en menos tiempo del que requeriría la ejecución de un comando CHKDSK completo, pero no repara todos los daños. Sigue siendo necesario ejecutar un CHKDSK completo más adelante para garantizar que todos los datos que se puedan recuperar se han recuperado.
Hay que hacer notar que NTFS no garantiza la integridad de los datos de usuario cuando se producen daños en un disco, ni siquiera aunque se ejecute un CHKDSK completo inmediatamente después de detectarse los daños. En consecuencia, puede haber archivos que CHKDSK no pueda recuperar. Además, los archivos que se recuperan pueden estar dañados internamente incluso después de ejecutar CHKDSK. Por lo tanto, sigue siendo muy importante que se protejan los datos esenciales realizando copias de seguridad periódicas o mediante otra metodología de recuperación ante desastres.

Nota: es un artículo de "PUBLICACIÓN RÁPIDA" creado directamente por la organización de soporte técnico de Microsoft. La información aquí contenida se proporciona como está, como respuesta a problemas que han surgido. Como consecuencia de la rapidez con la que lo hemos puesto disponible, los materiales podrían incluir errores tipográficos y pueden ser revisados en cualquier momento sin previo aviso. Vea las  para otras consideraciones

No hay comentarios: