Cómo identificar y reparar archivos con bloques de disco dañados / inaccesibles

9

Tengo una Macbook Pro de finales de 2011 que ejecuta Mavericks 10.9.2. Su único HDD es una unidad de 750GB, formateada con Bootcamp. Todavía funciona razonablemente bien, pero al ejecutar un pase de desfragmentación, he identificado que hay un montón de archivos que se niegan a ser movidos por el desfragmentador (iDefrag).

iDefrag informa un código de error POSIX de 5 cuando accede a los archivos. Elegir uno al azar e intentar copiar el archivo a otra ubicación en el shell también informa un error, lo que me hace pensar que el problema es real y con el disco / FS. La salida de cp es:

cp: unity_nophysx.nexe: Input/output error

Hasta donde yo sé, el código de error 5 es 'acceso denegado', pero el proceso de desfragmentación se ejecuta como administrador y ejecutar cp usando sudo en el archivo sospechoso no hace ninguna diferencia.

Disk Utility, fsck y Apple Hardware Test afirman que el disco está bien. No se informaron errores SMART, y aunque hubo algunos errores de permisos, no estaban con los archivos de los que iDefrag se queja, y Disk Utility afirma haberlos solucionado sin queja.

Tal vez hay un centenar o más de archivos dañados, pero aún una fracción muy pequeña de la unidad. Por lo que puedo decir, no se ven afectados los archivos del sistema o los datos cruciales. Si bien sería bueno recuperar los datos, no me importa reinstalar o hacer copias de seguridad. En este punto, no sé si realmente se está muriendo la unidad, solo algunos sectores defectuosos debido a que la unidad se está moviendo mientras se escribe, o alguna otra corrupción menor que se puede solucionar. Estoy asumiendo el peor de los casos, y lo más probable es que tenga que obtener un HDD un poco más grande y clonar el disco existente para evitar tener que reconstruir el sistema.

Mi pregunta es realmente cómo hago para marcar esos archivos rotos como quebrados correctamente y arreglarlos o purgarlos , para que un clon del disco tenga éxito y no se atasque en archivos / bloques a los que no puede acceder. Disk Utility no está viendo el problema, y ​​no conozco ninguna línea de comando o herramientas de terceros que hagan el trabajo. No quiero descartar todo el disco y comenzar desde cero, ya que la unidad parece saludable, por lo que estoy buscando herramientas de reparación / diagnóstico.

MrCranky
fuente
Le aconsejo que lea esta discusión similar bastante detallada sobre SuperUser: superuser.com/q/148227 .
dan
Probé, desafortunadamente en un disco sano :), volitans-software.com/smart_utility.php . Parece una herramienta bastante simple y seria. Puede probarlo y, sobre todo, verificar el contador de "sectores reasignados".
dan

Respuestas:

8

Si se enfrenta a un sistema de archivos en buen estado en el nivel de su estructura y desea encontrar archivos que tengan bloques defectuosos en el disco, así es como procedería:

  1. Hacer una copia de seguridad completa de su disco con Time Machineo Carbon Copy Cloner

    Comprueba esta copia de seguridad.

  2. Ejecute el siguiente comando pesado y arriesgado (en caso de que tenga bloques defectuosos fuera de la estructura de su sistema de archivos) (asegúrese de que se cita {} para que funcionen los nombres de archivo que contienen espacios):

    find / -type f -print -exec dd if="{}" of=/dev/null bs=1m \;
    

Este findcomando pesado imprimirá para cualquier archivo sin formato su nombre (por lo tanto, no lo leerá, sino solo su entrada de directorio) y luego continuará haciendo una lectura completa y rápida de todos sus bloques de datos.

Al hiting el primer archivo que contiene los bloques dañados, esto findhará que el kernel para iniciar sesión read erroren /var/log/system.log, y tampoco se ralentizará o llevar el sistema a un paro total. Esto dependerá principalmente de la capacidad del disco duro para reubicar los bloques defectuosos encontrados en su grupo interno dedicado a esta tarea de reparación habitual. Este archivo que contiene bloques defectuosos será el apellido impreso por find.

¡Escriba este nombre de archivo en una hoja de papel! Digamos que este nombre de archivo es:

/.DocumentRevisions-V100/.cs/ChunkStorage/0/0/0/9

En este punto, puede tener la posibilidad de matar findrápidamente al presionar ctrl+ C. Si matarlo está fallando, simplemente bloquea tu Mac.

Al reiniciar su Mac, verifique directamente el archivo que contiene bloques defectuosos:

dd if='/.DocumentRevisions-V100/.cs/ChunkStorage/0/0/0/9' of=/dev/null bs=1m

Si el comando termina correctamente, el error fue lo suficientemente ligero como para que su disco pueda leer este archivo y reasignar los bloques defectuosos.

  • Si el comando no termina, no podrá matarlo normalmente, sus datos se perderán por completo y tendrá que bloquear su Mac una vez más.

En este último caso, debe considerar reemplazar su disco y trabajar desde sus últimas copias de seguridad. Algunos otros archivos también pueden contener bloques defectuosos y pueden haber permanecido sin ser detectados desde hace mucho tiempo, siempre y cuando no los haya leído.

El núcleo no disparará un error de lectura en un bloque que nunca leyó.

dan
fuente
Ajá, este es absolutamente el tipo de truco que esperaba. El primer paso con el script find / dd toca todos los archivos / bloques en el disco, y efectivamente encuentro un montón de archivos que dan "Error de entrada / salida", y simplemente puedo enviar el registro del comando a un archivo y luego grep para descubrir qué archivos son duff. Parece que el comando dd no es suficiente para desencadenar ningún tipo de reparación automática (ni siquiera sabía que OS X lo hizo), pero al menos me da una forma confiable de identificar los archivos.
MrCranky
En el lado positivo, cuando el sistema operativo intenta leer los archivos con estos bloques defectuosos, no se cuelga ni cuelga horriblemente. Veo una May 10 20:42:15 ICE kernel[0]: disk0s2: I/O error.ventana emergente en los registros, pero no tengo idea de qué archivo lo activó. Pero luego el comando se ejecuta muy felizmente.
MrCranky
Su núcleo no se cuelga con el BBFH porque su disco todavía tiene suficientes bloques disponibles dentro de su grupo para reparar bloques defectuosos. ddno soluciona nada, este propósito del comando es copiar datos y convertirlos lo más rápido posible. El disco aún puede reparar errores leves. Esté atento, el precio de un disco no es nada comparado con su trabajo.
dan
Mmm, sí, supuse que: dd simplemente era una herramienta tonta para extraer todos los datos de un archivo y ponerlos en otro lugar (en nuestro caso, en el aire). Lo que realmente importa es que se lea cada bloque asociado con el archivo. Lo que no entiendo es lo que esperas que haga OS X en ese caso. Claramente, el núcleo no puede leer estos bloques defectuosos, pero ¿crees que el disco sí puede y puede solucionarlos? Si no puede sacar los datos del bloque defectuoso original, ¿cómo va a cambiarlo a otro lado?
MrCranky
Excelente pregunta El disco realizará automáticamente reintentos en los bloques de lectura. Cada vez que la posición de la cabeza está mecánicamente en una posición diferente. Si uno de estos intentos es exitoso, los datos se copian en uno de los bloques disponibles para reparar los bloques defectuosos. El bloque incorrecto se marca como incorrecto y nunca se volverá a utilizar. Por otro lado, si todos los reintentos fallan, los datos no se guardan y, después de mucho tiempo, el disco marcará el bloque como incorrecto y asignará uno nuevo vacío al disco visible. El kernel informará un error de disco irrecuperable.
dan
4

Reinicie en modo de usuario único manteniendo presionado el signo Command+ Sdurante el inicio. Cuando vea un mensaje (debe ser similar root #o similar), escriba fsck -fy presione Return. Esta es la herramienta de verificación de coherencia del sistema de archivos incorporada de Mac y le permite encontrar y reparar errores con el sistema de archivos de inicio. Ejecute este comando hasta que no vea **The volume [volume name] was modified.**o la herramienta falle tres veces seguidas.

Si la herramienta falla, puede ser indicativo de un problema mayor (pero no podría decirte qué sin ver el resultado de la herramienta). En cualquier caso, asegúrese de haber hecho una copia de seguridad de todo lo que pueda antes de ejecutar cualquier herramienta de disco. Cuando haya terminado, escriba rebooten el indicador y presione Intro para reiniciar su computadora (¡lo adivinó!).

Para obtener información adicional, puede encontrar las páginas del manual de fsck aquí .

Mate
fuente
Interesante, pero se parece mucho a fsck, incluso con -f y en modo de usuario único, está haciendo exactamente lo que hizo Disk Utility. Al igual que Disk Utility, no encuentra nada y piensa que el disco está bien. Supongo que está escaneando los registros del sistema de archivos, pero creo que mi problema está en el nivel de bloque, es decir, el sistema de archivos está bien estructurado, pero no se puede acceder a los datos reales dentro de los archivos cuando se trata de leer / copiarlos / desfragmentarlos.
MrCranky
1
→ MrCranky: ¡cierto! fsck& Disk Utilityestán verificando la integridad de la estructura del sistema de archivos. Leen los bloques de disco asignados a la estructura del sistema de archivos. No están hechos para verificar la integridad de los bloques de datos. Por lo tanto, pueden ejecutarse en un disco con bloques defectuosos sin generar ningún error de lectura. Si desea verificar su disco, incluso los bloques que pueden estar defectuosos pero que en realidad no se utilizan, simplemente use una herramienta básica como dd if=/dev/disk0 of=/dev/null ibs=1ky dentro de otra ventana de shell tail -f /var/log/system.log. Esto es gratis, extremo y no te ocultará ningún error.
dan
2

Recomiendo encarecidamente DiskWarrior para reconstruir catálogos de discos y para escanear en busca de archivos potencialmente dañados .

Durante la reconstrucción del catálogo, también puede informarle si experimenta un retraso debido al mal funcionamiento del disco.

Adán
fuente
No soy reacio a comprar una herramienta para ayudar, pero sin prueba y sin garantía de que esté diseñada para encontrar el tipo de errores que estoy experimentando, necesitaría muchas más recomendaciones para respaldar la suya antes de ser preparado para soltar $ 100 en una herramienta.
MrCranky
-1 No solo una respuesta, sino una mezcla de comentario y respuesta.
Max Ried
2

A partir de la respuesta de Buscar, puedes hacer esto automáticamente usando una línea de comando bastante pesada.

sudo find / -type f -print0  | xargs -0 -I{} dd if='{}' of=/dev/null bs=1m 2>&1 | grep 'error' >>badfiles.txt  & 
  • sudo: modo administrador
  • find -print0: ruta absoluta
  • xargs -0 -I {}: sustituto {} en el siguiente comando
  • dd 2> & 1: redirige el error std a stdout
  • tubería stdout a grep buscando error de cadena
  • Agregue resultados a un archivo de lista. ( Nota : Esto debería estar en un medio externo si cree que su unidad interna no funciona bien)
Awiebe
fuente
1

Como usted dice, ni siquiera está claro si esos archivos están dañados, al menos su Mac no lo cree así.

Cada sistema operativo crea archivos inmóviles que son necesarios para sus operaciones (puntos de restauración, archivos actualmente activos, etc.). Algunos defrags los mostrarán, otros no.

El hecho de que no pueda acceder o moverlos no significa que estén dañados.

Normalmente, los Mac son muy buenos para cuidar de ellos mismos.

El mantenimiento de Apple se realiza mediante: abra la Terminal y escriba:

sudo periodic daily weekly monthly 

seguido de Volver, ingrese su contraseña de administrador y OS X se encargará de las cosas por usted.

Busque en la consola los informes sobre aquellos si está interesado.

Mientras está en la consola, busque (busque) cualquier error de E / S que indique que su disco está comenzando a tener problemas, para complementar la Utilidad de Discos y los hallazgos de fsck.

En ocasiones uso una herramienta gratuita llamada OnyX para tareas de mantenimiento adicionales. Está hecho por franceses y como comida es simplemente genial :)

OnyX es una utilidad multifunción para OS X que le permite verificar el disco de inicio y la estructura de sus archivos del sistema, ejecutar tareas diversas de mantenimiento del sistema, configurar algunos parámetros ocultos del Finder, Dock, QuickTime, Safari, Mail, iTunes , ventana de inicio de sesión, Spotlight y muchas de las aplicaciones de Apple, para eliminar cachés, eliminar una cierta cantidad de archivos y carpetas que pueden volverse engorrosos, y más.

Dicho todo esto, no cuestiono su decisión de utilizar el desfragmentador (iDefrag) ya que no lo sé, sino que le ofrezco soluciones alternativas.

Ruskes
fuente
El uso del desfragmentador no es el problema, soy perfectamente consciente de lo que OS X hace y no hace a ese respecto. Los archivos definitivamente no estaban en uso, estos eran archivos de datos para una aplicación que no estaba activa, y de hecho la aplicación ahora no se puede mover.
MrCranky
En Onyx - de nuevo está haciendo poco más que la utilidad de disco hace - comprobar el estado SMART del disco y luego ejecutando el estilo fsck de diagnóstico (que, como hemos establecido piensa que no hay nada malo)
MrCranky
Para ser claros, para cualquiera que haya leído esta respuesta, los archivos definitivamente estaban dañados, y la Mac lo sabía, porque no se me permitía leer de ellos (copiarlos, lo que sea). Eso no fue porque fueran archivos del sistema, o en uso en ese momento, era cierto incluso para los archivos de datos del usuario. El mantenimiento periódico no ayudó con el problema, nuevamente porque fsckparece que solo se preocupa por los problemas del sistema de archivos, no bloquea los problemas de accesibilidad. La consola mostró errores solo cuando intenté copiar / leer manualmente los datos de uno de estos archivos rotos, no fue de ayuda encontrarlos.
MrCranky
0

Por irracional que parezca, antes de hacer cualquier cosa, debe duplicar todos sus datos en un buen disco conocido. Si el arranque desde el instalador y la copia de los datos falla, existe una utilidad de línea de comandos llamada 'dd' que puede realizar duplicaciones de bajo nivel y de una manera mucho más intransigente.

 man dd

para obtener más información sobre dd, incluido el uso y la sintaxis adecuada.


Otra votación para la publicación de Matt, iniciar el modo de usuario único y ejecutar

 fsck -fy 

una y otra vez hasta que fsck deja de informar errores.


Un voto para la publicación de Adam, DiskWarrior es una aplicación fácil de usar pero muy poderosa que informará fallas del disco duro, verificará los archivos individuales en busca de errores y los reparará si es posible, y reconstruirá y optimizará las estructuras de directorios.


Otra posible solución que puede parecer poco razonable, pero a menudo es un último intento de recuperar datos con una gran cantidad de evidencia annacdótica para el éxito, es extraer el disco, protegerlo de la humedad usando un par de capas de bolsas de congelador y colocarlo en su congelador para 30-45 minutos Luego, mientras la unidad está fría, monte la unidad en un puerto USB externo y use otro sistema temporal para intentar nuevamente copiar los datos dañados a otra unidad. En general, esto se usa si hay un problema de hardware y la unidad falla. Si puede duplicar toda la unidad con sus datos intactos, esto es ideal, ya que a menudo una repartición y reformateo le dará a la unidad una nueva vida útil.

chillin
fuente
Como he dicho, fsck no informa ningún error. El disco aún no está temperamental o no informa errores aleatorios, y la lista de archivos que están dañados no parece estar creciendo, por lo que no creo que esté cerca de la etapa de 'congelación para una última extracción de emergencia'. También estoy muy bien respaldado a nivel de archivo / carpeta, y no me preocupa perder datos, como dije en la pregunta. Es bueno escuchar otro voto para DiskWarrior sin embargo.
MrCranky
@ MrCranky: Creo que se refiere a algo publicado antes de actualizar su pregunta; Estaba reforzando la idea de fsck para cualquiera que encuentre esta página buscando una solución a síntomas similares. Con respecto a todo lo que publiqué sobre el fallo del HDD, nunca está de más ser exhaustivo, nuevamente, para los demás y no necesariamente para usted personalmente. He visto una buena cantidad de fallas en el disco duro. A menudo no hay indicios de falla, incluso con tecnología SMART, hasta que ya no pueda acceder a los datos de ninguna manera. Si le importan los datos, le recomiendo que obtenga una nueva unidad y haga una copia de seguridad de sus datos.
Chillin
Ciertamente no estoy en desacuerdo con la recomendación de copia de seguridad, pero el espíritu del formato de Preguntas y Respuestas es responder a la pregunta que se plantea, no una pregunta genérica de "cómo soluciono un disco roto" (de las cuales hay muchas). Mucho antes de editarlo para agregarlo fscka la lista de "cosas que piensan que el disco está bien", respondí a la respuesta mencionando fsckdescontar su utilidad. fscky Disk Utility realizan la misma función, y es operar en las estructuras del sistema de archivos, no en el nivel de bloque. Intenté ser bastante específico de que este es un problema de bloque, no un problema del sistema de archivos.
MrCranky
0

Para un solo archivo que no se puede leer en su totalidad debido a un error de lectura del disco, puede usar la ddutilidad para duplicar el archivo en un volumen externo, sustituyendo los bytes NUL por los bloques que no se pueden leer. Se recomienda duplicar a un volumen diferente (por ejemplo, "Disco USB" en el ejemplo a continuación).

Ejemplo:

dd if=/path/to/damaged/file of=/Volumes/USB\ Disk/file bs=512 conv=noerror,sync

Al usar bloques de 512 bytes, se recuperará el número máximo de bloques legibles.

La recuperación puede llevar mucho tiempo, ya que el núcleo se bloqueará durante algún tiempo en cada lectura fallida.

bleater
fuente