Recientemente he sufrido una cantidad enloquecedoramente pequeña pero bastante importante de daño en un disco duro en un host ESXi que afecta a un par de máquinas virtuales. Hay un archivo que me gustaría mucho recuperar y, por supuesto, de alguna manera quedó fuera de mi copia de seguridad habitual. Las copias más recientes tienen 6 meses. Resulta que necesito eso ... oops.
Detalles:
1) He usado ddrescue (herramienta IMPRESIONANTE) dentro de un ISO de arranque Parted Magic para recuperar el 99.98% de la unidad de VM en cuestión. Desafortunadamente, los errores parecen ser casi por completo de escrituras RECIENTES de archivos ... así que, por supuesto, son exactamente los sectores que más necesito recuperar.
2) ¡La unidad da errores de E / S en lecturas de sectores defectuosos, pero ocasionalmente TIENE ÉXITO al leer un sector previamente defectuoso! Entonces, la recuperación aún es posible. Un poco más que eso tendrá algún tipo de mal funcionamiento importante y hará girar la unidad hacia abajo y hacia arriba. Ah, y aproximadamente 1/4 de esos spin-ups no volverán a subir. (Se requiere un ciclo de energía duro, el apagado no funcionará) Por último, casi todas las lecturas de sectores defectuosos vienen con un agradable sonido de clic audible.
3) El disco VM importante tiene formato NTFS.
4) Puedo (normalmente) montar el volumen NTFS dañado de solo lectura, y puedo (un poco menos frecuente) navegar a la carpeta que contiene el archivo que necesito. Sin embargo, el archivo en cuestión parece dar siempre un error de IO cuando hago un 'ls' de la carpeta. Los otros archivos en la carpeta no dan un error IO.
5) He intentado usar ntfsinfo / etc ... que suena exactamente como lo que necesito ... pero no abrirá la partición en absoluto. (Frustrante, ya que 'montar' generalmente lo hará)
6) El archivo es un archivo XLS de la era Excel 2003, por lo que no estoy seguro de poder encontrar ninguna cadena para buscar la imagen de disco sin procesar. (¿Posiblemente partes de la versión anterior de 6 meses?)
Realmente me gustaría usar algo como las instalaciones de debugfs. Sin embargo, de las páginas del manual parece que las herramientas ntfs podrían hacer el trabajo si solo pudieran hacerse para abrir la partición. En particular, me pregunto si los errores de IO podrían estar exclusivamente dentro de los metadatos del archivo, y si el registro del directorio podría restaurarse lo suficientemente bien como para copiar el contenido del archivo. Como último recurso, cualquier contenido parcial de archivo que pueda recuperar sería genial.
He escrito módulos de kernel (relativamente simples) antes, por lo que podría compilar un módulo NTFS especial con más información de depuración habilitada (o agregada). (El archivo vale al menos unos días de retoques para intentar recuperar ... además, estoy aprendiendo cosas interesantes en el proceso)
Cualquier puntero?
EDITAR:
Más información de error de unidad:
El / var / log / messages muestra muchos errores NTFS-fs, por supuesto ... pero finalmente me molesté en traducir el mensaje de código de detección no manejado que generalmente obtengo: clave de detección 0x3, ASC = 0x11, ASCQ = 0x4. (que parece traducirse a ERROR DE LECTURA NO RECUPERADA - ERROR AUTOMÁTICO).
Cuando la unidad gira hacia abajo, veo el mensaje "scsi0: * BusLogic BT-958 Initialized". No estoy seguro de si es el controlador SCSI de Linux, el controlador ESXi o la unidad en sí la que decide girar la unidad hacia abajo. Si fue el controlador de Linux, entonces tal vez podría modificar el controlador para evitar girar hacia abajo. Todo este asunto de ddrescue se vuelve enormemente más doloroso por estos spindowns que requieren un ciclo de energía.
EDIT2:
usando el mensaje de registro "end_request: error de E / S, dev sda, sector 7238859" justo después de 'ls' el directorio que contiene el archivo en cuestión, he dirigido mi operación ddrescue a ese sector. Actualmente planeo arriesgarme y ESCRIBIR ese sector nuevamente en el disco en vivo si esto tiene éxito. Tal vez pueda reconstruir lentamente mi camino al archivo en cuestión de esta manera. Aún así, la mayoría de los sectores defectuosos recuperables se recuperan en menos de 20 reintentos ... este es más de 150 hasta ahora ... * suspiro *
EDITAR3:
El error de sector de 'ls' en el archivo que necesito no es del todo cooperativo (más de 1000 intentos durante la noche y sin suerte). Espero que solo sean metadatos cuando haces un 'ls'? :)
Tengo la mayor parte de una copia ddrescue, pero eso no se monta (o se monta sin archivos). La unidad dañada se monta correctamente la mayor parte del tiempo ... ¿tal vez los errores de E / S en la unidad de montaje dañada se caigan al espejo que funciona?
** EDITAR4: **
Me he rendido por ahora, a la espera de nuevas sugerencias. Quité el disco y reconstruí la caja. Seguiré conduciendo por si surge algo.
ddrescue
u otra herramienta similar para copiar tantos sectores como sea posible. No realice ninguna recuperación a nivel del sistema de archivos del disco dañado, hágalo desde la copia.