GZ を XZ に変換

ここで GZ を XZ に変換できます。無料、アカウント不要です。ファイルを上の枠に落とせば、数秒で結果がダウンロードできる状態になります。 ファイルは暗号化されて当方のサーバーへ送られ、そこで変換され、処理が終わり次第削除されます

  • 処理される場所 当サイトのサーバー上です。この処理に必要なソフトウェアは、ブラウザーでは動かせません。
  • 可逆 何も捨てられません。XZはGZが持っていたものをそのまま保持します。
  • ファイルサイズの上限 1ファイルあたり25MBまで。無料、アカウント不要です。
  • 知っておきたいこと ファイルは 1 バイトも変わらずに出てきます。失われるのは、容れ物が中身として持っていたものではなく、中身について持っていたもの——パスワードや、形式によっては元のアクセス権と日時です。

一度に100ファイルまで。フォーマットが混ざっていても構いません。

たまった GZ の山を XZ に圧縮し直す動機

これから開くファイルを圧縮し直す人はいません。ここに来る人が見ているのは、すでに積み上がったもの——1 年分のローテーションされたログ、監査のために保管しているデータベースのダンプ、四半期に一度しか読まない研究データセット、誰も消していない CI の成果物です。gzip は書き出した当時は正しい選択でした。速く、どこにでもあり、ログローテーションの設定にすでに組み込まれていたからです。ですがファイルの後半生には向いていません。

gzip は書く瞬間と読む瞬間に最適化され、XZ はその間の何年もの期間に最適化されています。あわてて誰かが展開する予定があるなら、あるいはメモリーの少ない機器で開くなら、そのままにしておいてください。ほとんど読まれずに寒冷保管される予定なら、この変換はほぼタダで得をする話で、1 ファイルずつではなくフォルダーごとやる価値があります。

32 キロバイトと 6400 万バイトの差

1996 年に RFC 1952 として標準化された gzip は、DEFLATE を使い履歴窓は 32 KB です。100 万バイト目を圧縮しているとき、96 万 8000 バイト目までしか遡れません。それより前に出た繰り返しは、初めて見たかのようにまた圧縮されます。2009 年生まれの XZ は最大 64 MB の辞書を持ち、2000 倍遠くまで見渡せます。

この差が、ある入力では劇的に効き、別の入力ではまったく効かない理由です。1 年分のログは同じ 40 種類程度のメッセージテンプレートを何ギガバイトも繰り返し、gzip はそれを何千回も再発見しますが、XZ は 1 回学べば済みます。SQL のダンプは行ごとに列名を繰り返します。ソースツリーはライセンスヘッダーやインポート文、定型コードを何百ファイルにもわたって繰り返します。一方、写真や動画が入った GZ には長距離の繰り返しがありません。JPEG や H.264 が gzip に渡す前にすでに冗長性を取り除いているためで、どれほど強力な圧縮機でも存在しない構造は作れません。

強い圧縮機の代償

圧縮時間はわかりやすいコストですが、いちばん重要ではありません。あなたを待たせずに 1 回だけ払われるコストだからです。XZ は同じ作業でも gzip よりはるかに遅く、辞書が 2000 倍大きいことの直接の結果です。夜間バッチで一括圧縮するような用途なら、最適化する価値のある問題ではありません。

実際に効いてくるのは展開時のメモリーです。gzip は展開に 32 KB あれば足り、実質ゼロに等しいのに対し、XZ は圧縮時の辞書サイズに応じたバッファーが必要です。ノートパソコンやサーバーでは何も問題になりません。ルーターや小型組み込み機器、メモリー制限のあるコンテナー、制約の厳しいビルドエージェントでは、アーカイブが開けるかプロセスが強制終了されるかの分かれ目になります。展開する機械のほうを確認してください。圧縮する機械ではありません。

1 ファイルしかなくても TAR が出てくる理由

どちらの形式も 1 本のストリームだけを圧縮するので、ディレクトリという概念を知りません。実際には .gz のほとんどが .tar.gz であり、名前とフォルダーを持つ TAR に gzip をかぶせたものです。この変換は両方の層を外したあと、両方を作り直します——中身を新しい TAR にまとめ、それを xz で圧縮します。

知っておくべきなのは、元が tarball ではなかった場合です。単なる access.log.gz は 1 個の普通のファイルですが、再構築するとやはり TAR で包まれるので、出てくるのは access.log を含む tarball です。tar xJf で展開すれば問題なく、unxz を使おうとすると output.tar というファイルが出てきて戸惑うことになります。単独の圧縮ストリームを前提にしたツールを使うなら、この点を織り込んでおいてください。

gzip が覚えている名前と、XZ が覚えない名前

gzip ストリームは元のファイル名をヘッダーに持てます。Unix で dump.gz を展開すると拡張子に何も書いていなくても dump.sql が返ってくるのはこのためです。XZ にはこの項目がなく、データがどこから来たかについては何も保存しません。

これはこの変換機で実際に起きたバグの原因でもありました。gzip は名前を保存し xz は保存しないため、内側の tarball は GZ からならそれらしい名前で、XZ からなら抽出処理が決めた名前で出てきます。修正では名前から推測するのではなく tar かどうかを中身から強制的に判定するようにしました。使う側にとっての教訓はもっと単純です。ダウンロードしたファイルに付ける拡張子だけが、以後ずっと残るラベルになります。something.tar.xz と、意味を持たせて名付けてください。

gzip ストリームと xz ストリームの整合性検査

どちらの形式も自己検証を持っており、この変換を無人で走らせても安全な理由の 1 つです。gzip ストリームは末尾に CRC-32 と展開後の長さを持ち、XZ ストリームは既定で CRC-64 の検査を展開データ全体に対して持ちます。どちらも、途中で切れたダウンロードやビットの反転があれば、黙って短いファイルを返すのではなくエラーになります。

どちらにもできないのは、どのファイルが壊れているかを教えることです。この層にはファイルという概念がないからです。ZIP や 7Z はエントリーごとにチェックサムを持ち、40 個中 1 個だけが壊れていると報告できますが、圧縮ストリームは「ストリーム全体が壊れている」としか言えません。一部が傷んでも残りを復旧したいなら、ストリーム圧縮はそもそも向いていない入れ物です。

圧縮し直す gzip アーカイブが送られる場所

この変換は端末の中では動きません。このサイトの多くの機能はファイルを手元に置いたまま処理しますが、アーカイブの再構築は 7-Zip と xz という本物のプログラムを必要とする例外です。ファイルは暗号化された通信でコンテナーへ送られ、そのコンテナーには外向きのインターネット接続はありません。

ジョブごとにメモリー上の一時領域が割り当てられ、成功しても失敗しても終了時に削除されます。60 秒を超えて動いているものは強制終了されます。壊れた形式のアーカイブは失敗するより無限ループに陥ることのほうが多いためです。無料枠は 1 ファイルあたり 25 MB で、ログのアーカイブなら十分な量のテキストですが、データセットには現実的な上限です。

同じ gzip 入力に XZ と BZ2 のどちらを選ぶか

「gzip では縮みが足りない」に対するもう 1 つの伝統的な答えが BZ2 ですが、ほとんどのテキストでは現在 XZ に圧縮率でも展開速度でも劣ります。この形式がレガシー扱いされているのはそのためです。唯一の利点は、メモリーの話の裏返しです。bzip2 は最大 900 KB のブロック単位で動くので、展開に大きなメモリーを必要としません。

つまり選択の軸は圧縮率ではありません。展開する機械が普通のコンピューターなら XZ を、そうでなければ——古い機器、制約のあるコンテナー、xz が本当に入っていないシステムなら——BZ2 を選んでください。圧縮率だけで BZ2 を選ぶのは、もう長らく正しくない 2005 年ごろの判断です。

フォルダー全体を変換する前に効果を測る

まず 1 ファイルだけ試して 2 つのサイズを見比べてください。どんな経験則よりも、代表的な 1 ファイルのほうが残り全部の結果を正確に教えてくれます。答えを決めるのは形式ではなく中身だからです。ログアーカイブを半分にする同じ変換が、写真フォルダーにはまったく効きません。最初の 1 ファイルがほとんど変わらないなら、そこで止めてください。データに長距離の重複がなく、どんな圧縮機を使っても見つからないということです。

サイズだけでなく一覧も確認してください。結果に tar tJf をかけ、元の GZ のエントリー数とパスを突き合わせます。特にトップレベルに注意してください。あるディレクトリの中から作られたアーカイブと、その親から作られたアーカイブでは、すべてのパスの先頭フォルダーが 1 つずれます。この違いは何ヶ月も経ってから、誰も変換のことを覚えていないころにスクリプトを壊します。一覧が一致し、サイズが期待どおりになったら、元のファイルの役目は終わっています。

GZ を XZ に変換する手順

  1. お手元の GZ ファイル をこのページに落とすか、押してファイルを選んでください。
  2. 変換先に XZ を選び、変換を開始します。
  3. できあがった XZ ファイル をダウンロードします。

GZ と XZ——何が変わるか

GZとXZの比較
GZXZ
正式名称Gzip アーカイブXZ アーカイブ
拡張子.gz, .tgz.xz
メディアタイプapplication/gzipapplication/x-xz
圧縮方式可逆 — 何も捨てない可逆 — 何も捨てない
最初の公開19922009
仕様RFC 1952
ライセンスオープン標準オープン標準
現在の位置づけ現行現行
ブラウザで開けるか対応なし対応なし
代わりに検討される形式BZ2, ZIPBZ2, 7Z

残るもの

失われるものはありません。GZ も XZ も中身を劣化なしに保持します。この変換が変えるのは包み方であって品質ではないので、劣化が積み重なる心配をせずに何度でも繰り返せます。

結果を開く

7-ZipとKekaは GZ と XZ のどちらも読めるので、別のプログラムを開かずに、結果を元のファイルと並べて確かめられます。

ファイルサイズと品質

XZ が一度に扱う範囲は 8 MB、GZ は 32 KB です。繰り返しがこの幅の中に収まっていて初めて、それを圧縮で畳めます。圧縮率の差はそこから来ます。そして余分にかかる計算時間も、同じところへ消えます。

どちらの形式が何のためのものか

GZ は 1992 年に登場しました。 RFC 1952 で規定されています。ファイルが、それを書いた道具より長く生きなければならないなら、この一点には値打ちがあります。

XZ は 2009 年から使われています。xz、7-Zip、Kekaがこの形式を読めます。

GZ は 1992 年、XZ は 2009 年に登場しました。人に渡すならたいてい古いほうが安全で、新しいほうは同じ仕事をより少ないバイト数で片づけます。

GZ から XZ:よくある質問

GZ ファイル はどこかにアップロードされますか。

はい。この変換には、ブラウザーの中では動かないソフトウェアが必要です。ファイルは暗号化されて当方のサーバーへ送られ、処理が終わり次第削除されます。結果のファイルも 60 分後に削除されます。

GZ から XZ への変換は無料ですか。

はい。25 MB までのファイルなら 1 日 100 回まで無料です。この変換だけは当方が費用を負担するサーバーで動くため、ここに上限があります。それ以外に制限はなく、透かしはどの場合も入りません。

GZ を XZ に変換すると品質は落ちますか。

いいえ。XZ は同じ内容を何も捨てずに保持できるので、結果は品質の点で元のファイルと同じです。 ファイルは 1 バイトも変わらずに出てきます。失われるのは、容れ物が中身として持っていたものではなく、中身について持っていたもの——パスワードや、形式によっては元のアクセス権と日時です。

GZ から XZ への変換は可逆ですか。

失われるものはありません。GZ も XZ も中身を劣化なしに保持します。この変換が変えるのは包み方であって品質ではないので、劣化が積み重なる心配をせずに何度でも繰り返せます。

これらのフォーマットについて