Problema de compresión de archivos NTFS

Problema de compresión de archivos NTFS

Tengo varios cientos de archivos de fotos que se movieron inadvertidamente desde una unidad externa comprimida y formateada con Windows NTFS a una segunda unidad externa formateada por Mac OS X. El movimiento se realizó bajo el sistema operativo Mac OS X. Desafortunadamente, el proceso de movimiento de archivos se completó sin que el sistema de archivos de Windows "descomprimiera" todos los archivos originales.

¿Alguien conoce algún servicio de recuperación, aplicación o método de conversión manual que me permita recuperar estos archivos de fotos, todos los cuales ahora se consideran archivos JPG y RAW "dañados"? Cualquier ayuda o sugerencia que pueda ofrecer será muy apreciada.

Respuesta1

La compresión NTFS se indica mediante una marca en los metadatos del archivo, que se almacena en la tabla maestra de archivos (MFT). Configurarlo directamente es difícil, porque generalmente cuando cambia ese indicador, el controlador del sistema de archivos comprimirá o descomprimirá el archivo por usted. Probablemente podría agregar este indicador manualmente (es solo un bit en los atributos del archivo DWORD), pero piratear directamente el MFT probablemente no sea el mejor enfoque. En su lugar, intente lo siguiente:

  1. En un volumen NTFS (podría ser una unidad flash, si la formatea con NTFS), cree uno (o varios) archivos comprimidos (usando Windows). Por el bien de estas instrucciones, llamaremos a estos archivos rescue1, rescue2, etc.
  2. Conecte la unidad NTFS a su sistema Mac (sin descomprimir primero los archivos). Monte el volumen de lectura/escritura. Digamos que está montado en /mount/ntfs(en realidad, no uso OS X lo suficiente como para memorizar dónde monta los volúmenes externos).
  3. Usando una herramienta que copia archivoscontenido, como la utilidad de línea de comandos dd, copie el contenido de sus archivos comprimidos sin metadatos en el contenido de los archivos comprimidos en el volumen NTFS. El comando sería algo así como dd if=/path/to/bad/file of=/mount/ntfs/rescue1 bs=4M.
  4. Vuelva a conectar la unidad a Windows y vea si los archivos comprimidos se pueden abrir correctamente ahora. Si pueden, puede hacer que Windows los descomprima de forma segura (ya sea en el lugar o copiándolos en una unidad que no admita la compresión, como una unidad flash FAT32).
  5. Si este enfoque funciona, puede utilizarlo para rescatar todos sus cientos de archivos. Simplemente cree tantos archivos comprimidos en la unidad NTFS como necesite, asígneles el nombre que le parezca mejor (podrían ser los nombres originales) y copie el contenido desde la Mac.

Tenga en cuenta que no es necesario comprimir todo el volumen NTFS; eso solo hace que todos los directorios hereden el indicador "Comprimido" y cada archivo lo herede del directorio del archivo. Aunque no estaría de más hacerlo.

Sin embargo, recomiendo utilizar un volumen NTFS con copia de seguridad o descartable; Si el controlador NTFS de OS X es tan malo, puede dañar el MFT cuando intenta escribir en un volumen de Windows.

Enfoque alternativo más complicado, si lo anterior no funciona:

  1. Crea un montón de archivos comprimidos en Windows. La parte difícil es que deben coincidir con los tamaños de los archivos defectuosos. Si desea rescatar un archivo que tiene un tamaño de 30913 bytes, necesitará sucomprimidoEl archivo NTFS tendrá ese tamaño después de la compresión. Seré honesto; No estoy seguro de cómo arreglar eso. Como mínimo, haga que los archivos de rescateal menosel tamaño (en disco) como los archivos que necesitan ser rescatados. Lo mejor es hacer que el tamaño coincida dentro de 4k, ya que ese es el tamaño predeterminado de un clúster NTFS (los fragmentos de asignación utilizados para los datos de archivos).
  2. Utilice la fsutilutilidad en Windows para obtener elextensionesde los archivos de rescate. Las extensiones son los desplazamientos reales en el volumen donde se almacenan los datos del archivo en la partición.
    • El comando es fsutil file queryextents <filename>y, según la ubicación, es posible que deba ejecutarlo como administrador.
    • La salida del comando se parece a esto: VCN: 0x0 Clusters: 0x2 LCN: 0x48000. Lo que eso dice es que el archivo ocupa dos grupos,número de grupo lógico0x48000 (que tiene un desplazamiento de 4096*0x48000=1207959552) al desplazamiento de volumen 0x48001, que es un espacio total de 8k (2 x 4k/clúster). En la práctica, el final de esto suele ser el espacio no utilizado.
    • Puede haber varias líneas de salida (esto sucede cuando un archivo está fragmentado; es poco probable que suceda en un volumen recién formateado si ajusta el tamaño de cada archivo antes de crear el siguiente). El primer valor (elnúmero de clúster virtual) en las líneas siguientes no será cero, será el desplazamiento (en grupos) dentro del archivo donde comienza esa extensión (por ejemplo, si es 0x3, eso significa que la extensión comienza 12k en el archivo).
  3. Desconecte la unidad y conéctese a OS X.nosuba el volumen esta vez. En su lugar, busque el identificador de volumen correcto. En Linux, esto sería algo así como /dev/sdb1. (Segunda unidad -> sdb1, primera partición -> sdb1).
  4. Usando dd, copie directamente en el volumen sin formato desde sus archivos mal comprimidos.
    • Por ejemplo, digamos que su archivo tiene dos extensiones:
      • VCN: 0x0 Clusters: 0x15 LCN: 0x13c
      • VCN: 0x15 Clusters: 0x3f6 LCN: 0xab20
    • Utilizaría los siguientes comandos para ddconfigurar los nombres de los archivos según sea necesario. Ver elpágina de manual ddpara obtener más información, pero por ahora tenga en cuenta que todos los parámetros ddestán convenientemente en múltiplos del tamaño del bloque ( bsparam) pero que los valores hexadecimales se han convertido a decimal (no estoy seguro si ddpueden manejar hexadecimal correctamente; algunos programas tipo dd pueden, pero no todos ):
      • dd if=/path/to/bad/file of=/dev/sdb1 bs=4K count=21 seek=316
      • dd if=/bath/to/bad/file of=/dev/sdb1 bs=4k count=1014 seek=337 skip=21
  5. Una vez que haya copiado los datos del archivo en la partición sin formato, debería poder conectar la unidad a Windows y leer los archivos comprimidos (rescatados). Si los tamaños de los archivos no coinciden exactamente, es posible que haya un poco de basura al final de los archivos, pero con suerte eso no será un problema.

El otro enfoque (posiblemente más fácil, inclusomuchomás fácil) es encontrar la rutina ntfs-3gque maneja la descompresión NTFS. Ejecute esa rutina en los archivos directamente. Alternativamente, vea si puede encontrar una copia de la ntfsdiskeditutilidad (parece haber sido descontinuada) y vea si puede usarla para configurar manualmente el bit "Comprimido" en el archivo después de copiarlos (como archivos sin comprimir) a un volumen NTFS.

información relacionada