ガイド

RAR と 7z、アーカイブが壊れたとき

RAR は、自身のサイズまでのその場の損傷を癒すリカバリレコードを持てます。7z は何も持たず、ディレクトリを最後に書き込むため、末尾が切り詰められるとしばしば致命的です——そして、リカバリレコードを使う修復は有料機能で、オープンソースのツールで再現できるものはありません。

RAR に組み込まれた安全網:リカバリレコード

問題が起きたときの RAR と 7z の唯一の本質的な違いは、RAR が自前の修理キット を持てることです。アーカイブを作成するとき、WinRAR はリカバリレコードを追加できます:後でアーカイブの壊れた部分を 再構築することだけを役目とする、余分な冗長データです。現代の RAR5 形式では、 その冗長性に Reed-Solomon 誤り訂正を使います。CD や QR コード を守るのと同じ系統の数学です。

目安は単純です:リカバリレコードは、おおよそ自身のサイズまでのその場の損傷を 修復します。3% のリカバリレコードを追加すれば、アーカイブのおよそ 3% 相当の 壊れたバイトを癒せます。これは、ストレージがファイルの長さを変えずにひと帯の バイトを反転・上書きするというよくある障害に理想的です:壊れたバイトはその場に 留まり、レコードが正しい値を供給し、WinRAR がアーカイブをその場で組み直します。

RAR のリカバリレコードは、おおよそ自身のサイズまでのその場の損傷を癒します——ファイルの長さを変えずにバイトを反転・上書きする破損です。

問題は、それができないことのほうです。リカバリレコードが直せるのは、 位置に留まる損傷だけです。挿入や削除には無力です:バイトが 追加・削除されると、その地点より後のすべてのバイトがずれ、レコードの位置合わせが 崩れ、訂正は失敗します。損傷がレコードの容量を超える場合や、そもそもリカバリ レコードなしでアーカイブが作成された場合——これが既定です——にも役に立ちません。 世に出回る RAR ファイルの多くには、頼れるレコードがありません。

7z には安全網がなく、そのレイアウトが事態を悪化させる

7z はよく圧縮し、しばしば RAR よりも優秀ですが、リカバリレコードを まったく持ちません。組み込みの冗長性オプションが存在しないので、壊れた バイトはどれもバックアップのないバイトです。それだけでも 7z はより脆くなりますが、 そのファイルレイアウトが問題をさらに悪化させます。

7z アーカイブは、すべてのファイル・そのサイズ・データの場所を列挙するヘッダーで あるディレクトリを、ファイルの末尾に書き込みます。 書き込みには効率的ですが、それはつまり、アーカイブを読み解くために必要な地図が、 ディスク上で最後に置かれるということです。現実で最もよくある破損——中断されたり 切り詰められたりしたダウンロード——は、まず末尾を奪います。7z の末尾を失うと、 しばしばディレクトリを失い、ディレクトリがなければ、圧縮データの大半がそこに 無傷で残っていても、アーカイブをそもそも読み解くのが難しくなります。

7z はディレクトリを末尾に保持するため、切り詰められたダウンロードは、生き残ったエントリを読むために必要な地図を、まさにそれを狙ったように取り除きがちです。

これは RAR のリカバリレコードの裏返しです:冗長性がないだけでなく、最もよくある 単一の破損が最も重要な部分を直撃する構造なのです。それで 7z が悪い形式になる わけではなく——その圧縮は本物の利点です——しかし、壊れた 7z は、壊れた RAR よりも組み込みの選択肢が少ないことを意味します。

サルベージ抽出はどちらの形式でも効く

修復が選択肢にないとき——RAR にリカバリレコードがない、7z にディレクトリが ない——それでもサルベージは残ります。どちらの形式も、各ファイルの圧縮データを 識別可能な単位として格納するので、アーカイブ全体が開かなくても、ツールは アーカイブを走査し、データが無傷のエントリを見つけ、それらを個別に解凍できます。

実際にはそれは部分的な復旧を意味します:オール・オア・ナッシングではなく 「44 個中 38 個のファイルを抽出」といった具合です。損傷した領域を持つ アーカイブは、その前に格納されたファイルと、しばしばその後にあってデータが 損傷の先できれいに始まるファイルを差し出します。壊れた ZIP が部分的に復旧できる のと同じ原理で、ディレクトリを失った 7z にとってはたいていこれが現実的な結末です: エントリは今もそこにあり、一つずつ切り出されるのを待っています。この ZIP 版に ついては、壊れた ZIP を修復する と、Windows 特有の「compressed folder is invalid」エラーをご覧ください。

サルベージが尽きるところ:ソリッドと暗号化アーカイブ

サルベージには厳然たる限界があり、そのうちの2つがほとんどの結末を決めます。

ソリッドアーカイブは損傷より後をすべて失う

RAR も 7z もソリッドにできます:後のファイルが前のデータを 再利用できるよう、ファイル群を1つの連続したストリームとして圧縮し、それが圧縮率を 高めます。その代償として、解凍は厳密に逐次的になります——あるファイルに到達する には、その前のすべてをデコードします。破損がストリームを中断させると、デコーダーは 不良地点より先に進めないため、損傷よりのすべてのファイルは、そのバイトが 物理的にディスク上にあっても到達不能になります。損傷より前のファイルは今も 取り出せますが、その下流にあるものはすべて取り残されます。非ソリッドのアーカイブは、 各ファイルが単独で成り立つため、これを避けられます。

暗号化アーカイブは、まずパスワードが要る

アーカイブが暗号化されている場合、パスワードなしでは何一つ起こりません。 サルベージもリカバリレコードによる修復も、読み取れるデータに対して働くもので、 暗号化されたエントリは復号されるまで読めません。リカバリレコードは暗号化された バイトをその場で修復でき、サルベージはエントリを識別できますが、そのいずれを あなたのファイルへ戻すにも、パスワードが必要です。暗号化を迂回できる修復ツールは ありません——それこそが暗号化の目的です。

ブラウザツールが、リカバリレコード修復ではなくサルベージを行う理由

ここに、たいていの「RAR をオンラインで修復」ページがぼかしている正直な一線が あります。Reed-Solomon のリカバリレコードを実際に適用すること——壊れた RAR を その場で癒す操作——は有料版 WinRAR の機能です。それを再現する オープンソースのライブラリはありません。ですから、ブラウザツールや無料 ユーティリティが RAR を「修復する」と言うとき、実際にやっているのは、ほぼ すべての場合、サルベージです:アーカイブを読み、データが生き残ったエントリを 取り出すのです。

この区別は、期待値を設定するうえで重要です。あなたの RAR にリカバリレコードが あり、その容量の範囲内でのその場の損傷なら、WinRAR 自身の「Repair archive」こそが 本当に再構築できるツールであり、まず試す価値があります。リカバリレコードがない 場合や、損傷が切り詰め・挿入・削除である場合は、修復は誰にも提供できず、サルベージ が現実的な道になります——それはまさに、ブラウザベースのツールが、アーカイブを あなたのマシンから出すことなく行えることです。

つまり実践的な順序はこうです:リカバリレコード付きの RAR なら、WinRAR にその 修復を試させる。そうでなければ、RAR でも 7z でも、サルベージ抽出に手を伸ばし、 無傷のエントリを復旧する。どちらの手法も、ファイルにないデータを捏造することは ありません。どちらも、あるものから最大限を引き出すだけです。

よくある質問

壊れたアーカイブの復旧には、RAR と 7z のどちらが向いていますか?

損傷を生き延びるという点では、RAR に分があります。RAR5 アーカイブは Reed-Solomon のリカバリレコードを持つことができ、限られた量のその場の損傷を自動的に修復するからです。7z に同等のものはありません:冗長性を一切保存せず、ディレクトリをファイルのいちばん最後に書き込むため、途中で切れたダウンロードはしばしばアーカイブ全体を道連れにします。純粋な圧縮率では 7z がしばしば勝りますが、それは破損を生き延びることとは別の問いです。

RAR のリカバリレコードとは何で、どれくらい直せますか?

WinRAR がアーカイブ作成時に追加できる任意の冗長データで、RAR5 では Reed-Solomon 誤り訂正を使います。反転したり上書きされたりしたバイト、つまりその場の損傷を、レコード自身のサイズとおおよそ同じ量まで修復します:3% のリカバリレコードなら、およそ 3% 相当の損傷を癒せます。ファイルの長さを変えない破損には強力ですが、後続のすべてのバイトの位置をずらしてしまう挿入や削除には無力です。

壊れた 7z アーカイブからファイルを復旧できますか?

ときには、修復ではなくサルベージによって可能です。破損が途中にあるなら、各エントリの圧縮データはそれ単独でデコードできるため、損傷した領域より前に格納されたエントリはツールがしばしば取り出せます。7z を壊すのは、すべてのエントリを列挙するディレクトリが存在するファイルの末尾を失うこと、あるいは連鎖したデータが最初の不良バイトでデコードを止めてしまうソリッドアーカイブであることです。どちらの場合も、頼れるリカバリレコードはありません。

ソリッドアーカイブでは、なぜ損傷より後がすべて失われるのですか?

ソリッドアーカイブでは、後のファイルが前のデータを参照できるよう、ファイル群が1つの連続したストリームとして圧縮され、それが圧縮率を高めます。その代償として、解凍は逐次的になります:あるファイルに到達するには、その前のすべてをデコードしなければなりません。破損がストリームを中断させると、デコーダーはそこを越えられないため、損傷地点より後のすべてのファイルは、そのバイトが物理的に存在していても到達不能になります。損傷より前のファイルは、たいてい今も取り出せます。

ブラウザベースのツールは RAR のリカバリレコードを使って修復しますか?

いいえ。そう主張するものは疑ってかかる価値があります。Reed-Solomon のリカバリレコードを実際に適用してアーカイブを修復するのは有料版 WinRAR の機能で、これを再現するオープンソースのライブラリはありません。ブラウザやオープンソースのツールが行うのはサルベージです:無傷のエントリを取り出し、生き残ったものをデコードします。それは本当に役立ちますが、リカバリレコードによる修復とは別の操作であり、ありのままにそう呼ぶのが誠実です。

関連記事:ファイルをオンライン修復ツールにアップロードしても安全か?