試験運用中なLinux備忘録・旧記事

はてなダイアリーで公開していた2007年5月-2015年3月の記事を保存しています。

XZ圧縮されたファイルの扱いについて(前半)

以前「LZMA圧縮されたファイルの扱いについて」でLZMA圧縮されたファイルの操作に関してを扱ったが、LZMA圧縮されたファイルを扱うためのパッケージが「LZMA Utils」から「XZ Utils」という名前になっていて、これまでのLZMA形式向けのコマンド群に加えて新しいXZ形式向けのコマンド群が追加されており、LZMA形式を扱うコマンドはXZ Utils内のコマンドxzへのシンボリックリンクになっている(過去の互換性のためだが、ディストリによっては以前のLZMA Utilsがそのまま用いられている場合がある)。
LZMA Utilsの後継としてXZ Utilsが、LZMA形式を置き換えるものとしてXZ形式がそれぞれ存在するため、今後はLZMA形式よりもXZ形式を用いることが推奨される。実際、GNUの一部ソフトウェアの配布にはLZMA形式が用いられたことがある*1が、その後(LZMA形式が用いられなかったもの*2も含め)XZ形式が用いられるようになっている。

LZMA形式とXZ形式

いずれも(bzipやbzip2と同様)1つのファイルを圧縮/伸長するもので、複数のファイルやディレクトリをまとめるにはtarボールを併用する。その場合、出力ファイルには「.tar.xz」もしくは「.txz」の拡張子を付ける。
「.lzma」の拡張子が付くLZMA形式と「.xz」の拡張子が付くXZ形式は別物で、形式に互換性はない。ただし、XZ UtilsからLZMA形式のファイルは読み込める。
XZ形式はLZMA形式と同様、gzipやbzip2といった形式に近い扱いができるようになっているが、tarとの連携など、より扱いやすいものとなっている。
圧縮/伸長に関する特徴はLZMAアルゴリズムを用いたLZMA形式や7z形式と同様で、以下はMandriva LinuxRPMパッケージの説明より。実際にどうかは試して調べてみるしかないので、参考程度。

  • 平均的な圧縮率はgzipと比べて30%、bzip2と比べて15%改善される*3
  • 伸長速度はgzipより遅くなるがbzip2よりは2-5倍高速
  • 圧縮率を最高にしたときの圧縮は遅く、bzip2の4-12倍の時間がかかるが、伸長時間には影響せず、高速な圧縮モードではbzip2より高速

圧縮率の高さを示す例としては、サーバ上の一覧で確認したものだが

  • coreutils-8.2.tar.gzが「10M」なのに対しcoreutils-8.2.tar.xzが「4.2M」
  • glibc-2.11.tar.gzが「20M」でglibc-2.11.tar.bz2が「15M」なのに対し、glibc-2.11.tar.xzは「9.7M」

といったものがある(いずれも対象はプログラムのソースコード)。
XZ形式の詳細は
http://tukaani.org/xz/format.html
に載っている。

圧縮と伸長の操作例

適当なデータを用意して圧縮と伸長を行う作業の例。

(データのサンプルとしてカーネルのビルド設定をテキストに出力)
$ zcat /proc/config.gz > config.txt
(ファイルサイズを確認・サイズは使用するカーネルによって異なる)
$ stat -c "%s" config.txt
102289

(圧縮・元ファイルは削除される)
$ xz config.txt
(種類確認)
$ file config.txt.xz
config.txt.xz: xz compressed data
(サイズ確認)
$ stat -c "%s" config.txt.xz
23424
(伸長・圧縮ファイルは削除される)
$ unxz config.txt.xz

(「XZ圧縮されたファイルの扱いについて(後半)」に続く)

関連記事:

関連URL:

使用したバージョン:

  • XZ Utils 4.999.9beta
  • file 5.03

*1:例:coreutils

*2:例:glibc

*3:もちろん対象のファイルに依存し、既に圧縮されている類の形式では縮みにくい