0 votos

¿Los archivos ZIP conservan todas las características de HFS+ cuando se crean con el comando Compress de Finder?

¿Es una buena idea hacer una copia de seguridad de un directorio en un sistema de archivos HFS+ utilizando la función de compresión del Finder, y luego copiando el archivo ZIP a un disco duro FAT32, o a Dropbox, etc.? ¿O eso podría causar la corrupción de datos o la pérdida de datos?

Por ejemplo, si comprimo mi biblioteca de iTunes, y los enlaces simbólicos se sustituyen por otra copia del archivo, eso es un cambio en la semántica. Si mi disco duro se estropea, y restauro una copia de la biblioteca de iTunes a partir de una copia de seguridad, es posible que iTunes no funcione correctamente debido a esto. Por ejemplo, cambiar el contenido de un archivo no afectará al otro. Borrar el archivo al que se apunta significa que ya no se puede leer el contenido de ese archivo a través del enlace simbólico, lo que de nuevo es diferente si el enlace simbólico se sustituye por una copia de ese archivo. iTunes puede bloquearse dada una biblioteca corrupta, o corromper aún más la biblioteca, lo que significa que la copia de seguridad no ha cumplido su propósito.

¿Está garantizado que todos los directorios válidos se comprimen a ZIP sin errores, y se expanden a una copia idéntica del directorio original, sin ninguna pérdida de información o cambios semánticos? Más concretamente, ¿los archivos ZIP son compatibles con todas las características de HFS+?

  1. Symlinks
  2. Enlaces duros (incluso a directorios, que son compatibles con HFS+)
  3. Alias
  4. Atributos ampliados
  5. Horquillas de recursos
  6. ACLs
  7. Permisos Unix
  8. Todos los nombres de ruta válidos en HFS+. En otras palabras, ¿soporta ZIP todos los caracteres que son válidos para usar en un nombre de ruta? ¿Soporta ZIP el nombre de ruta más largo que se puede crear en HFS+, o hay un límite de longitud de ruta inferior en el formato ZIP?
  9. ¿Hay un límite de tamaño de archivo de 4 GB?

... y así sucesivamente.

Me preocupa la posibilidad de que se produzcan cambios silenciosos, que provoquen una pérdida o corrupción de datos silenciosa sin que yo me dé cuenta hasta que sea demasiado tarde.

Esta es una pregunta sobre el formato ZIP, y también sobre el comando Compress del Finder. Porque aunque el formato ZIP soporte algo, si la implementación del Finder no lo hace, no sirve de nada.

1voto

CousinCocaine Puntos 3615

No hay crédito para mí. He tomado esto literalmente del usuario NSGod : https://superuser.com/a/222590

Mi propia adición, un poco obvia:

  • el sistema de archivos de destino debe admitir enlaces simbólicos, enlaces duros, etc., de lo contrario no funcionará
  • puede utilizar el zip en la línea de comandos y preservar estos tipos de archivo manualmente con zip --symlinks -r foo.zip foo/

¿Cómo estás creando el archivo .zip en OS X? (Usando una herramienta de línea de comandos, y si es así, cuál, o usando Archive Utility, etc.)

¿Qué sistema operativo está ejecutando el ordenador de destino (donde se descomprimirá el archivo) y qué método está utilizando para descomprimir el archivo allí?

En primer lugar, en OS X, los enlaces simbólicos son básicamente archivos de texto plano con alguna información "Mac" adicional que permite a OS X saber que debe tratar el archivo como un enlace simbólico. Esta información extra de Mac es un tipo de archivo especial, un código de creador y la información de la bandera del Finder, que se almacena no en el archivo en sí, sino en el directorio del disco HFS+.

En OS X, cuando se crea un archivo .zip, no hay espacio en el flujo del zip para esta información extra de Mac, así que, en cierto sentido, el enlace simbólico se almacena dentro del archivo zip como un archivo simple. Que alguien en otro Mac pueda descomprimir el archivo y que éste represente adecuadamente la estructura original parece depender de quién o qué utilice para descomprimirlo.

Por ejemplo, hace un mes más o menos una empresa lanzó un juego a través de Steam, el software de distribución de juegos de Valve. El paquete de aplicaciones del juego incluía la librería Cg de NVIDIA en forma de framework, que internamente utiliza enlaces simbólicos. Originalmente hubo un problema con Steam que no restauraba correctamente la información necesaria de Mac en Trine.app como se menciona en este hilo: http://forums.steampowered.com/forums/showthread.php?t=1556083

La imagen de abajo muestra 2 copias diferentes del Cg.framework, una que había instalado por separado desde el sitio web de NVIDIA (imagen superior), y la imagen inferior muestra lo que se recibió con el juego:

alt text

Observe que todos los elementos coinciden, pero lo que deberían ser enlaces simbólicos son archivos de datos simples.

Después de mirar con detenimiento el registro FSCatalogInfo de ambos artículos, me quedó claro cuál era el problema:

alt text

Notarás en la imagen superior que el principio de la estructura finderInfo tiene los siguientes valores:

0x736C6E6B = 'slnk'
0x72686170 = 'rhap'

Estos valores se definen en /usr/include/hfs/hfs_format.h:

/*
 *  File type and creator for symbolic links
*/
enum {
    kSymLinkFileType  = 0x736C6E6B, /* 'slnk' */
    kSymLinkCreator   = 0x72686170  /* 'rhap' */
};

El valor del 9º byte, 0x80, corresponde al kIsAlias bandera del finderInfo.finderFlags . Ese valor está definido en /System/Library/Frameworks/CoreServices.framework/.../CarbonCore.framework/.../Headers/Finder.h:

enum {
    kIsAlias                      = 0x8000 /* Files only */
};

Parece que la función de descompresión incorporada a OS X (Archive Utility) está programada para buscar posibles archivos en el archivo que se está descomprimiendo que representen enlaces simbólicos, y para establecer la información de manera apropiada. Creo que /usr/bin/ditto (cuando se utiliza por su capacidad de archivar ficheros) también se encarga de esto por ti. No estoy seguro de si zip o unzip hacer.

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