3 votos

¿Cómo saber qué archivos son total o parcialmente dentro de una banda de una imagen de disco de paquete escaso?

Tengo una imagen con un error en uno de sus bandas:

/Volumes/twoz/macbookpro08-centrim.sparsebundle/bands/3252

El sistema de archivos de la personalidad de la imagen es sensible a mayúsculas en el Diario HFS+.

Pregunta

En el HFS Plus nivel:

  • ¿cómo puedo saber que archivos son completamente o en parte, dentro de ese grupo?

Nombres y rutas de acceso de archivos será ideal.

De fondo

El error es detectado por ZFS y es permanente (no he escogido la redundancia de la piscina). Archivo de sistema twoz está montado por ZEVO.

En la root del paquete probablemente hay nada que nos ayudan a:

sh-3.2$ sudo ls -ahl /Volumes/twoz/macbookpro08-centrim.sparsebundle
total 8952
drwx------@ 3 root  wheel    10B  3 Mar 19:38 .
drwxr-xr-x  7 root  wheel     7B  9 Dec 17:16 ..
-rw-r--r--  1 root  wheel   499B 30 Dec 12:20 Info.bckup
-rw-r--r--  1 root  wheel   499B 30 Dec 12:20 Info.plist
drwx------  2 root  wheel    26K  3 Mar 08:16 bands
-rw-r--r--  1 root  wheel   445B  3 Mar 06:48 com.apple.TimeMachine.MachineID.bckup
-rw-r--r--  1 root  wheel   445B  3 Mar 06:48 com.apple.TimeMachine.MachineID.plist
-rw-r--r--  1 root  wheel   1.4K  3 Mar 08:20 com.apple.TimeMachine.Results.plist
-rw-r--r--  1 root  wheel    11K  3 Mar 08:20 com.apple.TimeMachine.SnapshotHistory.plist
-rwx------  1 root  wheel     0B  9 Dec 17:16 token
sh-3.2$ sudo defaults read /Volumes/twoz/macbookpro08-centrim.sparsebundle/Info
{
    CFBundleInfoDictionaryVersion = "6.0";
    "band-size" = 8388608;
    "bundle-backingstore-version" = 1;
    "diskimage-bundle-type" = "com.apple.diskimage.sparsebundle";
    size = 821820674048;
}

Espero que el bands directorio de contener nada salvo las bandas.

Un experimento con cat

sudo cat /Volumes/twoz/macbookpro08-centrim.sparsebundle/bands/3252

El resultado es que la mayoría de datos binarios y como era de esperar, un error de e/S parece impedir la realización de los comandos de modo que abortados.

Intercalados con datos binarios, el contenido es legible para humanos. Algunos de los que el contenido de lectura que es casi seguro que dentro de un archivo (xulrunner) que sufrió un error de e/S cuando hice el intento de restaurar los datos de la imagen de disco.

Yo preferiría un enfoque más directo – que no implica intentar leer todos los datos del volumen.


Se preguntan si una autoridad respuesta a esta pregunta va a implicar el conocimiento de la imagen de disco conductor privado o marco. En OS X 10.8.2 por ejemplo:

sh-3.2$ hdiutil info
framework       : 344
driver          : 10.7v344

/System/Library/PrivateFrameworks/DiskImages.framework

2voto

Jay Puntos 41

Suponiendo que usted puede adjuntar el sparsebundle, usted debería ser capaz de hacer esto mediante fileXray, que es de $79 por una licencia de uso personal y encontrar en http://filexray.com

fileXray es capaz de "revertir el mapa volumen de almacenamiento" que significa que se puede "determinar qué archivo de un bloque o desplazamiento de bytes en un volumen pertenece." La opción relevante es --who_owns_byte, se explica en la página 172 de la documentación, que se puede encontrar en http:// filexray.com / fileXray.pdf (enlace roto porque no me deja publicar más de dos enlaces).

Ahora de acuerdo a la página 54 de la documentación, "es importante tener en cuenta que un dispositivo de volcado debe ser "bruto", es decir, no deben requerir a cualquier transformaciones adicionales como la descompresión o el descifrado. En otras palabras, para un archivo de imagen de disco para ser utilizados directamente por fileXray, la imagen no debe estar comprimidos, cifrados o escasa. fileXray rechazará una imagen." Sin embargo, va a decir, "Si usted tiene una imagen que es comprimido, cifrado, o dispersas, o bien convertirlo usando el Mac OS X hdiutil programa de línea de comandos, o simplemente conecte (opcionalmente sin montaje) con hdiutil y uso fileXray en la resultante de dispositivo de bloque en lugar del archivo de la imagen."

Así que una vez que el sparsebundle adjunto o montado, la pregunta es ¿qué desplazamiento de bytes para proporcionar a la --who_owns_byte opción.

Apple ofrece "rutinas para manipular una escasa paquete", en http://www.opensource.apple.com/source/hfs/hfs-191/CopyHFSMeta/SparseBundle.c

Basado en que el código, podemos ver en la rutina doSparseRead que el bandName de la primera banda para un determinado desplazamiento es el bandNum como un número hexadecimal. En particular, asprintf(&bandName, "%s/bandas/%x", ctx->ruta de acceso, bandNum).

El bandNum es el desplazamiento / tamaño de bloque, ya que off_t bandNum = (offset + nread) / tamaño de bloque y nread empieza en el 0, que se trunca el resultado de la división, por lo que el desplazamiento debe ser bandNum * tamaño de bloque o bandNum * tamaño de bloque + tamaño de bloque. Tenga en cuenta que el tamaño de los bloques es el bandSize, desde off_t blockSize = ctx->bandSize;

Mirando doSparseWrite parece dar la misma respuesta, ya que off_t bandNum = (offset + escrito) / tamaño de bloque; por escrito en la que se inicializa en 0 y asprintf(&bandName, "%s/bandas/%x", ctx->ruta de acceso, bandNum);

Sería genial si alguien con acceso a fileXray podría intentar esto.

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X