2 votes

Pourquoi certains (mais pas tous) fichiers zip supérieurs à ~3.7GB ne parviennent-ils pas à être extraits ?

J'ai affaire à un grand nombre de fichiers zip (films DCP pour un festival du film) entre 4GB et 40GB qui me sont envoyés par diverses personnes qui utilisent divers programmes pour compresser le dossier qu'ils envoient. Il y a généralement 5 à 10 fichiers par dossier et 1 à 5 fichiers dépassent 3,7 Go.

Certaines de ces archives peuvent être extraites sans problème, mais pour d'autres, j'obtiens les erreurs suivantes :

  • en essayant d'extraire avec 7z :

    7z e ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV.zip 
    
    7-Zip [64] 16.02 : Copyright (c) 1999-2016 Igor Pavlov : 2016-05-21
    p7zip Version 16.02 (locale=en_US.UTF-8,Utf16=on,HugeFiles=on,64 bits,8 CPUs Intel(R) Core(TM) i7-6700 CPU @ 3.40GHz (506E3),ASM,AES-NI)
    
    Scanning the drive for archives:
    1 file, 8033862438 bytes (7662 MiB)
    
    Extracting archive: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV.zip
    ERROR: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV.zip
    Can not open the file as archive
    
    Can't open as archive: 1
    Files: 0
    Size:       0
    Compressed: 0
  • en essayant d'extraire avec unzip :

    unzip ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV.zip 
    Archive:  ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV.zip
    warning [ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV.zip]:  4294967296 extra bytes at beginning or within zipfile
      (attempting to process anyway)
    file #1:  bad zipfile offset (local header sig):  4294967296
      (attempting to re-compensate)
       creating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/
      inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ASSETMAP.xml  
      inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_cpl.xml  
      inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_pkl.xml  
      inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_Reel_1_j2c.mxf  
      error:  invalid compressed data to inflate
    file #6:  bad zipfile offset (local header sig):  3671207290
      (attempting to re-compensate)
      inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_Reel_1_pcm.mxf  
      inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/VOLINDEX.xml 
  • en essayant de le sauver (sous MacOS) :

    zip -FF ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV.zip --out ore.zip
    Fix archive (-FF) - salvage what can
     Found end record (EOCDR) - says expect single disk archive
    Scanning for entries...
     copying: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/  (0 bytes)
     copying: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ASSETMAP.xml  (588 bytes)
     copying: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_cpl.xml  (631 bytes)
     copying: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_pkl.xml  (613 bytes)
     copying: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_Reel_1_j2c.mxf 
            zip warning: no end of stream entry found: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_Reel_1_j2c.mxf
            zip warning: rewinding and scanning for later entries
  • après le sauvetage (MacOS) :

    unzip ore.zip 
    Archive:  ore.zip
    warning [ore.zip]:  4294967296 extra bytes at beginning or within zipfile
      (attempting to process anyway)
    file #1:  bad zipfile offset (local header sig):  4294967296
      (attempting to re-compensate)
       creating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/
      inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ASSETMAP.xml  
      inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_cpl.xml  
      inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_pkl.xml  
    file #5:  bad zipfile offset (local header sig):  2432
      (attempting to re-compensate)
    file #5:  bad zipfile offset (local header sig):  2432
      inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV_Reel_1_pcm.mxf  
      inflating: ORE_SHR-1-30_F_XX-XX_AT-XX_20_2K_XX_20190312_FF_SMPTE_OV/VOLINDEX.xml 

    Pour l'instant, je n'ai réussi à extraire l'archive qu'avec 7z sous Windows10. .

    Je comprends...

    Headers-Error
    Warning: 32-Bit overflow in headers

    ...mais l'utilisation de 7z sous Windows10 est la seule façon d'extraire l'archive - malgré l'erreur d'en-tête/alerte

    J'utilise un ordinateur Linux, mais j'ai également essayé d'utiliser "unzip" sur un MacOS et je veux pouvoir extraire l'archive à cet endroit au lieu d'aller sur l'ordinateur Windows à chaque fois que cela se produit.

    • Pourquoi le même fichier fonctionne-t-il avec 7z Windows10 mais pas avec 7z sur MacOS ou 7z sur Linux ?
    • Comment puis-je extraire l'archive sur une machine Linux ?

    Informations complémentaires :

  • Tous sont des environnements 64 bits. Sur le système Linux, j'utilise ext4 et sur MacOS, je ne sais pas pour l'instant (pas d'accès pendant les deux semaines à venir), mais je suppose que c'est le système de fichiers natif de MacOS, s'il existe.

  • Un de mes collègues a pu extraire plusieurs des archives qui ne fonctionnaient pas sur ma machine sous MacOS par un simple "clic droit" -> "extraire ici" - mais il n'a aucune idée du programme qu'il utilise - il sait juste qu'il est sur un ordinateur Apple.

1voto

GuyPaddock Points 575

Si le fichier ZIP fait plus de 4 Go et a été créé par OneDrive ou Windows, vous pouvez également essayer un utilitaire conçu pour réparer les en-têtes :
https://github.com/pmqs/Fix-OneDrive-Zip

Apparemment, il y a un désaccord sur la façon de traiter l'en-tête "file count" pour les fichiers Zip64. Les produits Microsoft s'attendent à ce que l'en-tête "file count" soit à 0 alors que d'autres systèmes s'attendent à ce qu'il soit à 1. Les nouvelles versions de 7-zip pour Windows (versions 19+) gèrent bien ce problème, mais Linux ne dispose que d'un ancien port POSIX, p7zip, qui est la version 16 de 2016, et qui n'a pas de moyen de gérer ce problème. L'utilitaire mentionné ci-dessus est un script basé sur Perl qui modifie les informations d'en-tête afin que le nombre de fichiers passe de 0 à 1, de sorte que les utilitaires puissent gérer les fichiers.

Si vous êtes curieux, quelqu'un a fait une plongée en profondeur sur la question ici :
https://www.bitsgalore.org/2020/03/11/does-microsoft-onedrive-export-large-ZIP-files-that-are-corrupt

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X