破損したZipファイルを復元する方法
Recovering Corrupt Zip Files
Zipファイルが破損して開けないとき、どうすればいいのでしょうか。この記事では、破損したZipファイルを復元するための実践的なテクニックを紹介します。CRCエラーやヘッダー破損など、よくある問題の原因を解説し、ファイル修復ツールや手動での修復方法をステップバイステップで説明します。データ復旧の専門知識がなくても試せる方法から、より高度な修復テクニックまで、状況に応じた最適なアプローチを学べます。
破損したZipファイルは、正しいツールと知識があれば、多くの場合復元可能です。
HNでの議論
35- dotancohen
最近、特にひどいケースがありました。顧客が約1GBのプロジェクトファイルを送ってきたのですが、それは壊れていて、すでにSteamで公開されているゲームのもので、彼らは何ヶ月もそれに取り組んでいたのです。彼らは、すべてのバックアップも壊れていると言いました...案の定、WinRARの修復ツールは、何も含まれていない1GBのZIPファイルを生成しました。
30年にわたって、主要なOSや一部のマイナーなOS、ファイルシステム、信頼性の低い転送プロトコル、信頼性の低いメディア上でZIPファイルを作成・保存してきた経験から、この会社が破損したZIPファイルで抱える膨大な問題の数々は、フォーマットや顧客の悪い習慣とは無関係だと思います。彼らのソフトウェアが単に悪いZIPファイルを生成しているのではないでしょうか。
- CrendKing
ちょうどテストしてみました。7-Zipは、著者の復元ツールが行うこととまったく同じことをすでに実行しています。ファイルの末尾のメタデータを削除しても、無害な「Unexepcet end of data」という警告を出しながらも、ファイルを開いて抽出できます。さらに、最後のファイルの実際のコンテンツを削除しても、ディレクトリ構造は表示されますが、最後のファイルのデータを抽出することはできません。
- cmovq
> おそらく驚くべきことに、ZIPファイルは、ZIPファイルの内容を一覧表示する中央ディレクトリをファイルの末尾に配置します。
これはアーカイブファイルでは非常に一般的です。これにより、アーカイブの末尾にファイルを簡単に追加(ディレクトリを上書き)して、更新されたディレクトリを続けて書き込むことができます。ディレクトリが先頭にあると、ディレクトリを拡張するためにアーカイブ全体を書き直す必要があります。
- Dan42
これはソフトウェアの探索とエッジケースに関する興味深い話ですが、次の点について疑問に思いました。
> 非圧縮サイズやCRC-32は無視してかまいません。
実行中のcrc32を計算すれば、非圧縮サイズに加えてその値をチェックでき、8バイトの精度が得られます。また、データを展開しながら進めば、非圧縮サイズもチェックでき、12バイトの精度が得られます。それで、ZIP内のファイルの実際の境界を常に見つけられることを保証するのに十分ではないでしょうか。
- shortercode
ZIPファイルは、機能し、広く使用され、多くの奇妙な設計上の決定を持つものの例です。その一部は単なる歴史であり、他はそれほどではありません。しかし、顧客や友人にとってそれらを置き換えるのは難しいでしょう。
それらにはいくつかの素晴らしい利点があります。アーカイブ全体を解凍せずにアーカイブから直接読み取れること、ファイルごとのチェックサム、圧縮の恩恵を受けない部分の圧縮をスキップできることなどです。また、ファイルを変更せずに大量の任意のデータをファイルに詰め込むこともできます。これは...ちょっと変で、時には便利かもしれません。
厄介な点は、32ビット整数をあらゆる場所で使用しているため、大きなファイルをサポートするためにハックに依存していることです。真のストリーミング解凍をサポートできません。実装はかなり異なる場合があり、互換性も異なります。また、人々が実際には使用しない、古くて奇妙な機能も多数あります。ZIPファイルを複数の部分に分割できる機能や、いくつかの古代の圧縮技術などです。