tar
がテープアーカイブ用に作られたことは知っていますが、今日では、ファイルを集約し、同じ論理ファイルフォーマット内で圧縮を行うアーカイブファイルフォーマットがあります
Questions:
集約と圧縮を同じデータ構造で行うファイル形式を使用する場合と比較して、
tar
をgzip
やbzip2
にカプセル化したtar
を使用する場合、 集約/圧縮/解凍の段階でパフォーマンスのペナルティがありますか?比較される圧縮機の実行時間が同じであると仮定してください(例: gzip と Deflate は似ています)tar
ファイル形式には、.7z
や.zip
のような他のファイル形式にはない機能があるのでしょうか?tar
はそのような古いファイル形式であり、より新しいファイル形式が今日存在しているのに、なぜtar
(gzip
,bzip2
, あるいは新しいxz
にカプセル化されているかどうかにかかわらず)が今日でもGNU/Linux, Android, BSD, その他のUNIXオペレーティングシステムで、ファイル転送、プログラムのソースやバイナリのダウンロード、時にはパッケージマネージャ形式としてさえも、これほど広く使われているのでしょうか?
210 MarcusJ 2013-03-14
その1.パフォーマンス
ここでは、2つの別々のワークフローと、それらが何をするかを比較しています
ディスク上のファイル blah.tar.gz
は、例えば 1 GB の gzip 圧縮されたデータで、非圧縮時には 2 GB を占有します (圧縮率は 50% です)
アーカイビングと圧縮を別々にやるとしたら、これを作る方法は
tar cf blah.tar files ...
これは、圧縮されていない形式のfiles ...
の単なる集合体であるblah.tar
になります
そうすれば、あなたは
gzip blah.tar
これは、ディスクからblah.tar
の内容を読み込み、gzip圧縮アルゴリズムで圧縮し、blah.tar.gz
に内容を書き込んだ後、blah.tar
ファイルのリンクを解除(削除)します
さあ、解凍しましょう!
Way 1
どっちにしてもblah.tar.gz
があるだろ
逃げることにしたんですね
gunzip blah.tar.gz
This will
blah.tar.gz
の1GBの圧縮データ内容を読み込みます- 圧縮されたデータをメモリ内の
gzip
デコンプレッサを通して処理する - メモリバッファが「1ブロック」分のデータで一杯になったら、ディスク上のファイル
blah.tar
に圧縮されていないデータを書き込んで、圧縮されたデータがすべて読み込まれるまで繰り返します - ファイル
blah.tar.gz
のリンクを解除(削除)する
さて、ディスク上にblah.tar
がありますが、これは圧縮されていませんが、その中に一つ以上のファイルが含まれており、データ構造のオーバーヘッドは非常に少ないです。ファイルサイズはおそらく、すべてのファイルデータの合計よりも数バイト大きいでしょう
You run:
tar xvf blah.tar
This will
- ファイルのパーミッション、ファイル名、ディレクトリなどの情報を含む、
blah.tar
およびtar
ファイルフォーマットのデータ構造の2GBの非圧縮データコンテンツを読み込みます - 2 GB のデータとメタデータをディスクに書き込みます。これには次のような作業が含まれます:データ構造/メタデータ情報を変換して、適切なディスク上に新しいファイルやディレクトリを作成したり、既存のファイルやディレクトリを新しいデータ内容で書き換えたりします
今回の作業でディスクから読み込んだデータの合計は、1GB(gunzipの場合)+2GB(tarの場合)=3GBでした
今回の作業でディスクに書き込んだデータの合計は、2GB(gunzip用)+2GB(tar用)+メタデータ用の数バイト=約4GBでした
Way 2
どっちにしてもblah.tar.gz
があるだろ
逃げることにしたんですね
tar xvzf blah.tar.gz
This will
blah.tar.gz
の1GBの圧縮データ内容を1ブロックずつメモリに読み込みます- 圧縮されたデータをメモリ内の
gzip
デコンプレッサを通して処理する - メモリバッファが一杯になると、メモリ内のデータを
tar
ファイルフォーマットパーサにパイプし、メタデータなどの情報と圧縮されていないファイルデータを読み込みます tar
ファイルパーサでメモリバッファが一杯になると、ファイルやディレクトリを作成して、圧縮されていないデータをディスクに書き込みます
今回の処理でディスクから読み込んだデータの合計は、1GBの圧縮データでした、期間
今回の作業でディスクに書き込んだデータの合計は、非圧縮データ2GB+メタデータ用の数バイト=約2GBでした
お気づきのように、ウェイ2のディスクI/Oの量は、圧縮率の違いを調整して、例えば、Zip
や7-Zipプログラムによって実行されるディスクI/Oと同じです
圧縮率が気になる場合は、Xz
圧縮機を使ってtar
をカプセル化すれば、LZMA2’ed TAR アーカイブができます。)
第2部:特徴
tar
は、ファイルのメタデータの中にUnixのパーミッションを格納しており、あらゆる種類の異なるパーミッションやシンボリックリンクなどでディレクトリをパッキングすることに成功したことで非常によく知られており、テストされています。ファイルの束を一つのファイルやストリームにグロブする必要があるかもしれませんが、 必ずしも圧縮する必要はありません(圧縮は便利でよく使われますが)
第3部:互換性
多くのツールはソースまたはバイナリ形式で .tar.gz や .tar.bz2 として配布されていますが、これは「最低公約数」のファイル形式であるためです。Android ファームウェアでさえ、これらのツールにアクセスすることができます
最新のディストリビューションを実行しているオーディエンスを対象とした新しいプロジェクトは、.tar.xz (Xz (LZMA) 圧縮形式を使用しており、gzip や bzip2 よりも圧縮率が高くなっています) や .7z など、より最新の形式で配布しているかもしれません
音楽がOpusのような新しいフォーマットでオンラインのダウンロードストアから販売されていないことや、WebMのようなビデオが販売されていないのと同じ理由で、.7zがより頻繁に使用されているのを見かけることはありません。古いシステムや非常に基本的なシステムを実行している人との互換性があります
178 allquixotic 2013-03-14
これは Stack Overflow で回答されています
bzip と gzip はファイルのグループではなく、単一のファイルに対して動作します。古くからある zip (および pkzip) はファイルのグループに対して動作し、 アーカイブの概念が組み込まれています
nixの哲学は、特定の仕事を非常にうまくこなす小さなツールで、一緒に連鎖させることができるというものです。そのため、ここには特定のタスクを持つ2つのツールがあり、それらがうまく組み合わされるように設計されています。また、tarを使ってファイルをグループ化し、圧縮ツール(bzip、gzipなど)を選択できるということです
多くのツールはソースまたはバイナリ形式で .tar.gz や .tar.bz2 として配布されていますが、これは「最低公約数」のファイル形式であるためです。Android ファームウェアでさえ、これらのツールにアクセスすることができます
最新のディストリビューションを実行しているオーディエンスを対象とした新しいプロジェクトは、.tar.xz
(Xz (LZMA) 圧縮形式を使用しており、gzip や bzip2 よりも圧縮率が高い) や .7z のように、より最新の形式で配布することができるかもしれません。7z は、ZIP や RAR のファイルフォーマットに似ており、複数のファイルを一つのファイルにカプセル化するためのレイアウトを指定して圧縮しています
OpusやWebMのような新しいフォーマットで音楽がオンラインダウンロードストアから販売されていないのと同じ理由で、.7zが使われているのをもっと頻繁に見ることはありません。古いシステムや非常に基本的なシステムを実行している人との互換性が重要です
101 community wiki 2020-06-12
Tar は、Unix ファイルシステムのすべてを知っている豊富な操作と修飾子のセットを持っています。Unix のパーミッション、ファイルに関連する様々な時間、ハードリンク、ソフトリンク (そしてシンボリックリンクがファイルシステムのグラフに周期をもたらす可能性) を知っており、これらのデータを管理するためにいくつかの異なる方法を指定することができます
抽出したデータをファイルのアクセス時間を保存したいですか?Tar はそれができます。パーミッションを保存したいですか?Tarはそれができます
シンボリックリンクをシンボリックリンクとして保存したいのでしょうか?Tar はデフォルトでそれを行っています。代わりにターゲットをコピーしたいですか?Tar はそれができます
ハードリンクされたデータが一度しか保存されないようにしたい(正しいことをするために)?Tar はそれを実現します
疎なファイルをうまく扱いたいですか?Tarはそれができます
非圧縮データが欲しい(なぜ?Tarならそれができます。gzipで圧縮する?Tarならできます。bzip2で圧縮する?Tarならできる。任意の外部圧縮プログラムで圧縮するには?Tar はそれができます
生のデバイスに書き込みやリカバリをしたいですか?Tar のフォーマットはそれをうまく処理します
既存のアーカイブにファイルを追加したいですか?Tar はそれができます。2つのアーカイブを差分して、何が変わったのかを確認したいですか?Tar はそれができます。変更された部分だけを更新するには?Tarならできます
複数のファイルシステムにまたがってアーカイブしないようにしたいですか?Tar はそれを可能にします
最後のバックアップよりも新しいファイルだけを取得したいですか?Tarはそれを可能にします
ユーザー名やグループ名を保存したいのか、それとも番号を保存したいのか。Tarはどちらか一方を行うことができます
抽出後にシステムが正常に動作するように、(
/dev
のファイルのような)デバイスノードを保存する必要があるのでしょうか?Tar はそれができます
Tar は何十年にもわたってたくさんのユースケースを扱うために進化してきたし、人々が Unix ファイルシステムでやりたいことをたくさん知っている
63 community wiki 2016-04-07
アーカイブと圧縮の2つの異なるプロセスを混同しています
アーカイバを使う理由
圧縮なしでアーカイブを使用する理由の一つは、例えば、あるホストから別のホストにファイルの束をコピーする場合です。以下のようなコマンド
tar cf - some_directory | ssh host "(cd ~/somewhere | tar xf -)"
を使うとかなりのスピードアップが可能です。ファイルが圧縮できないことがわかっている場合や、 SSH が圧縮機能付きで設定されている場合は、かなりの CPU 時間の節約になります。確かに、アーカイブ機能を備えたより近代的な圧縮ツールを使って圧縮をオフにすることもできます。tar
の利点は、すべてのシステムで利用できることを期待できることです
gzip圧縮でアーカイバを使う理由
私がtar
とgzip
を使う理由の一つは、スピードです。ある場所から別の場所に数GiBのテキストファイルを転送したい場合、最後のバイトを絞り出すことは気にしません。そのような場合、私はCPUを最大にしない<7-Zipとは対照的に、I/OのようにCPUに縛られないgzip
を使います。また、再び。gzip
はどこでも利用可能と考えることができます
tar
をscp
、rsync
などに優先して使用する理由
小さなファイルをたくさんコピーする場合(例えば、何十万ものファイルを持つメールディレクトリなど)には、scp
よりも優れています。rsync
は、素晴らしいが、どこでも利用できるわけではないかもしれない。さらに、rsync
が本当に効果を発揮するのは、ファイルの一部や古いバージョンのファイルが既にコピー先に存在している場合だけです。最初のコピーでは、実際のデータにもよりますが、圧縮の有無にかかわらず、tar
が最も高速です
30 community wiki 2014-04-24
ここでの他の良い回答に加えて、私は主にこれらの圧縮ファイルがストリームのようなもので、それらを簡単にパイプすることができるので、tar
+ gzip|bzip2|xz
の組み合わせを好みます
インターネット上にあるファイルを解凍する必要があります。zip
または rar
フォーマットでは、まずダウンロードしてから解凍しなければなりません。tar.{gz,bz2,xz}
では、物理的に圧縮されたアーカイブをディスクに保存する必要がなく、ダウンロードと解凍を同じステップで行うことができます
curl -s http://example.com/some_compressed_file.tar.gz | tar zx
これは、私のディスクに圧縮されていないファイルだけを残し、私は最初にファイル全体をダウンロードし、ダウンロードが終了した後、私はそれを解凍して時間を浪費していないので、全体のプロセスを高速化します。その代わり、ダウンロード中に解凍しています。zip
やrar
のファイルではできません
24 community wiki 2013-03-14
(GNU)Tarにこだわる理由はいくつかあります
It is:
- GPL licensed
- Unixの哲学的な意味で良い
- 複数のタスクをこなすことができる単一目的のツール
- はよく文書化されており、多くの信頼できる機能を持っています
- いくつかの圧縮アルゴリズムと互換性があります
- 使いやすく、人々はそれとの習慣を開発してきました
- broadly available
- RMS(Emacsを除く)で起動したソフトウェアを使っていると、心の中がポカポカしてきます
もしあなたの特定の不満が、内容を読むことができるようになる前にタールボールを「解凍」しなければならないことであるならば、あなたはおそらく正しいでしょう。WinRAR や 7-Zip は自動的に解凍してくれます。しかし、アーカイブの内容を非圧縮形式で文書化するなど、この問題に対する簡単な回避策があります
13 community wiki 2014-04-24
.zip のようなファイル形式は、ファイル名のカタログを読み取るために、ソフトウェアが最初にファイルの末尾を読み取る必要があります。逆に、tar は圧縮ストリームと一緒にその情報を保存します
tar の利点は、ネットワークソケットのような非検索可能なパイプからデータを読み込んでいる間にデータを解凍できることです
ZIP方式の利点は、ディスク上の静的ファイルの場合、最初にアーカイブ全体を解凍することなく、内容やメタデータを閲覧できることです
どちらも用途に応じて使い分けています
11 community wiki 2013-03-14
あなたの質問に直接答えることを 渋っているように見えます あなたの質問を正論に利用することを 好むように見えますだから、試してみるよ
gzip や bzip2 でカプセル化された tar を使用する場合、 同じデータ構造で集約と圧縮を行うファイル形式を使用する場合と比較して、 集約/圧縮/解凍の段階でパフォーマンスにペナルティがありますか?比較対象の圧縮機の実行時間が同じであると仮定してください (例: gzip と Deflate は似ています)
実際には、tar と gzip は通常 2 つのプロセスなので、Info-ZIP の zip のようなアーカイバでは提供されないマルチコアの速度の利点をわずかに得ることができます。圧縮率の面では、tar+gzip は通常 deflate を使った zip よりも顕著に良くなります。圧縮率の利点は、より圧縮されたアーカイブはより短い時間で解凍されるため、解凍時の速度の利点につながります
tar ファイル形式には、.7z や .zip などの他のファイル形式にはない機能がありますか?
そう、tar は Unix 用に設計されたもので、Unix ファイルシステムの奇妙な隅々まで正確に記録して復元できるように、長年の間に進化してきました。例えば、zip も 7z も疎なファイルを認識したり利用したりすることはできませんし、ハードリンクを認識したり復元したりすることもできません
tar は古いファイル形式であり、今日では新しいファイル形式が存在していますが、なぜ tar (gzip, bzip2, あるいは新しい xz でカプセル化されているかどうかに関わらず) が GNU/Linux, Android, BSD, その他の UNIX オペレーティングシステムで、ファイル転送、プログラムソースやバイナリのダウンロード、時にはパッケージマネージャの形式として、今日でもこれほどまでに広く使われているのでしょうか?
ここには他にもたくさんの良い回答があります。最良なのは、ただ動くだけで、より良い圧縮形式 (例: xz) に更新し続けることができ、同じ tar 形式やコンパイルされた tar ユーティリティさえも使うことができるということです。もし、あなたがたくさんのものを詰め込んで、反対側ですべてを解凍したいのであれば、最も古く、最も完全で、最もデバッグされたソフトウェアの一つ以外のものを使う理由はほとんどありません
ランダムアクセスや部分更新など、コンテンツを断片的に扱う必要があるものや、全部読まなくても中身が分かるようにしたい場合は、別のフォーマットを使いたいと思います
11 community wiki 2013-03-18
Performance
大きな違いは、圧縮とアーカイブの順番です。tar
がアーカイブを行い、その後、オプションで圧縮機にアーカイブを送ることができ、zip
がアーカイブを構築し、ファイルデータを32KBのチャンクに分割して圧縮しながらアーカイブに挿入します。ファイルデータを小さなチャンクに分割して個別に圧縮することで、その前にアーカイブ内の全てを解凍しなくても、特定のファイルやファイルの一部を抽出することができます。また、コンプレッサが再起動する前に非常に大きな辞書を蓄積するのを防ぐことができます。つまり、圧縮は速くなりますが、辞書サイズを大きくして全体を圧縮するのと同じくらい良い比率は得られません
2番目のファイルの最初の500バイトが最初のファイルの最後の500バイトと同じである2つのファイルを考えることで、それを可視化することができます。zip
メソッドでは、圧縮機は2つ目のファイルのために再起動されるので、1つ目のファイルが同じデータで終わったことを覚えていないので、2つ目のファイルから重複したデータを削除することができません
Popularity
tar
よりも多くの利点を持つフォーマットは他にもたくさんあります。7-Zip は Unix のファイルパーミッションを保存しませんが、dar
は保存できます。また、圧縮のためにマルチコアCPUを使うこともできます
誰もがいまだに tar
を使っている理由は、誰もがいまだに Windows を使っているのと同じ理由であり、Flash: 人々は変化を好まないのです。変更する強い理由がなければ、人々は知っているものに固執するだけです。dar
は、ほとんどの人が tar
をすでにインストールしていて、dar
を知っている人はほとんどいないのに、そのフォーマットでファイルを公開することを正当化するのに十分な利点を提供していないので、単純な惰性で古い規格のままです
11 community wiki 2014-04-24
Tar は、ファイルを転送するためだけではなく、ファイルシステムを完全に忠実にバックアップするために作成されました。そのため、tar ユーティリティは、ファイルシステムの構造について重要なすべてのものを保存するアーカイブを作成するための最も完全なユーティリティです
これには、1つ以上の競合ツールに欠けているこれらの機能がすべて含まれています
- file ownership
- file permissions
- あまり一般的ではないファイルのパーミッション (例: setuid、sticky bit)
- symbolic links
- hard links
- デバイスエントリ(すなわち、文字およびブロックデバイス)
- sparse files
- ACL エントリ (すべてのバージョンでサポートされていません)
- 拡張/ユーザー属性(すべてのバージョンではサポートされていません)
- SElinux のラベル (全てのバージョンではサポートされていません)
また、バックアップを作成する際に非常に便利な--one-file-system
オプションもあります
ファイルシステムに新しい機能が追加されるたびに、最初に(あるいは排他的に)tar
にサポートが追加されます。したがって、ファイルを保存するための最も互換性のある方法であり続けます
7 community wiki 2013-03-16
MP3, JPG, ビデオ, tar.gz ファイル, JAR パッケージ, RPM, DEB など、今日では多くの圧縮ファイルが出回っています。これらのファイルの束を一つのファイルに束ねて転送する必要がある場合、圧縮を試みずにファイルを束ねるだけの ‘tar’ ユーティリティがあると便利です
圧縮されたファイルを圧縮しようとすると、時間と電気を無駄にするだけでなく、元のファイルよりも大きなファイルになってしまうことがよくあります
もう一つの使い方は、圧縮率を向上させることです。例えば、ログファイルの束を「tar」で圧縮し、その結果を gzip した場合、最初に圧縮してから「tar」で束ねた場合よりも小さなファイルができあがる可能性が高いです。もちろん、tar を使えば、好きな圧縮アルゴリズムを選択し、特定のユースケースに合わせて圧縮を最適化するオプションを指定することができます
tar」は今日では非常に関連性が高く、私はZIPを使う方が好きだと感じています。私たちのオフィスでは、Windows を使っている人はみんな 7-zip をインストールしているので、私たちにとって tar ファイルは完全にクロスプラットフォームに対応しています
5 community wiki 2013-03-15
圧縮と集約の両方を行うこのような「新しい」ファイルフォーマット(暗号化も加えておきます)が、まったく別のツールではなく、最初から tar で構築されていなかったのはなぜなのか、不思議に思うべきかもしれません
私が理解しているように、歴史的な理由(OSの歴史に関連したもの、特許の「保護」、ソフトウェアベンダーがツールを販売する能力など)があります
他の人が指摘しているように、今でも tar は他のソリューションと比べて明らかに劣っているわけではありませんし、ストリーム上での作業や Unix の権利管理のような他の面でも優れているかもしれません
tarに関するwikipediaの記事を読むと、もう一つ興味深い事実が見えてきます。記事では、tarのいくつかの欠点を認めています… しかし、代わりにzipを使うことを提案していません(実際にzip形式ではこれらの欠点は解決されません)
最後に個人的な話をさせていただきます。何度か前に、暗号化されたデータを保存するためのファイルフォーマットを作成しなければならなかったことがあります。tar をベースにするのが便利でした (他の人も同じ選択をしています。例えば、tar は .deb パッケージの内部集約フォーマットです)。暗号化した後にデータを圧縮しようとしても全く役に立たないことは明らかでした。暗号化の前に独立したステップとして圧縮を実行しなければならず、ZIP 暗号化を使う準備もできていませんでした (公開鍵と秘密鍵を使った二重の鍵暗号化が欲しかったのです)。tar を使ってみると、とても楽に動作しました
4 community wiki 2013-03-15
誰もこれに言及していないことに驚いていますが、その理由の一つは、本当の利点ではなく、必要不可欠なものであるということです。何十年も前からソフトウェアを実行しているシステムの中には、アーカイブのためにtar
を呼び出すかもしれないものがたくさんあります。古いシステムをすべて「修正」するために誰かを雇うのは費用対効果的ではありません
3 community wiki 2013-03-18
tarはUNIXがtarなのでUNIXです
私の考えでは、今日でもtar
を使っている理由は、UNIXのアプローチが最初から完璧にできていた(おそらく稀な)ケースの一つだからです
アーカイブの作成に関わる段階を詳しく見てみると、ここで行われているさまざまなタスクの分離の仕方が UNIX の哲学を最大限に生かしたものであることに同意していただけると思います
ファイル、ディレクトリ、シンボリックリンクの任意の選択を、タイムスタンプ、所有者、パーミッションのような関連するすべてのメタデータを含む1バイトのストリームに変換することに特化した1つのツール(
tar
でここに名前を付けます)そして、任意に交換可能なツール (
gzip
bz2
xz
) を使用して、バイトの入力ストリームを別の (うまくいけば) より小さい出力ストリームに変換することができます
このようなアプローチを使用することで、開発者だけでなくユーザーにもメリットがあります
拡張性
tar
の内部の仕組みを一切変更することなく、既存の圧縮アルゴリズムやまだ開発されていない圧縮アルゴリズムとtar
を結合させることを可能にするすべてのブランドの新しい “ハイパー・ジップ・ウトラ “またはホワット圧縮ツールが出てくるとすぐに、あなたはすでに
tar
の全体の力であなたの新しいサーヴァントを受け入れるそれを使用する準備ができています安定性
tar
は、80年代初頭から多用されており、多くのオペレーティングシステムやマシンでテストされ、実行されてきました新しいアーカイブツールごとに、所有権、パーミッション、タイムスタンプなどを何度も何度も繰り返し保存することで、ホイールを再発明する必要性を防ぐことができるだけでなく、開発時間を大幅に節約できるだけでなく、新しいアプリケーションごとに同じ信頼性が保証されます
一貫性 ユーザーインターフェースは常に同じままです
ツールAを使ってパーミッションを復元するにはオプション
--i-hope-you-rember-this-one
を渡さなければならず、ツールBを使うには--this-time-its-another-one
を使わなければならず、ツールCを使うには`–スイッチとしてツールを使ってみなかったことを願っています一方、Dツールを利用する際には、
--if-you-had-used-tool-bs-switch-your-files-would-have-been-deleted-now
を使わなければ本当に台無しになっていたでしょう
3 community wiki 2013-03-19
多くの良い答えがありますが、重要な事実をおろそかにしています。Tar には、Unix ライクな世界のユーザと開発者のエコシステムが確立されています。ZIP が DOS/Windows のエコシステムによって存続しているのと同じように、そのエコシステムが Tar を存続させているのです。そのようなエコシステムを持つことが技術を支えるのであって、技術的な優位性ではないのです
3 community wiki 2013-03-19
理由は「文化の定着」です。私のように、圧縮された tar アーカイブ以外のものを処理するように頼まれると目をつむる人は、Windows の世界から来たものであれば、時々 ZIP 以外のものを処理するように頼まれると、目をつむってしまう人がたくさんいます
7-ZipやRARなどの話は聞きたくない。あなたのファイルを解凍するためのプログラムをインストールしなければならない場合、それは仕事です。私はそれが私に支払われるか、またはコンテンツが私が「持っていなければならない」ものであり、他の方法では利用できないものである場合、それを行うでしょう
tarの利点としては、誰かにtarボールを送ればすぐに認識されるということがあります。受信者は筋肉の記憶を利用して抽出コマンドを入力することができます
本当の問題は、なぜ一部の人々は、スペースの1バイトを節約することに夢中になって、他の人に、エキゾチックなユーティリティをインストールして、その使い方を学ぶ時間を無駄にするように頼むのでしょうか?そして、エキゾチックな圧縮やアーカイブフォーマットの愚かな使い方があります。H.264 ビデオと AAC サウンドは、本当にマルチパートの RAR に入れる必要があるのでしょうか?
tar形式は古いかもしれませんが、ファイルの内容、パス、タイムスタンプ、パーミッション、所有権など、関連するすべてのものを保存します。シンボリックリンクだけでなく、ハードリンクの構造も保存できます。特殊なファイルも保存しますので、テープアーカイブは、ブートストラップ時に使用される/dev
ディレクトリのようなものに使用することができます。ファイルシステムのルートから相対的に圧縮されていないターボールだけで構成されたバイナリパッケージフォーマットの Linux ディストリビューションを一緒に組むことができます
3 community wiki 2015-02-01
提示された具体的な質問に直接回答
gzip や bzip2 でカプセル化された tar を使用する場合、 同じデータ構造で集約と圧縮を行うファイル形式を使用する場合と比較して、 集約/圧縮/解凍の段階でパフォーマンスにペナルティがありますか?比較対象の圧縮機の実行時間が同じであると仮定してください (例: gzip と Deflate は似ています)
一般的なケースでは、特に圧縮ライブラリを内蔵したtar
を使用した場合、特定の性能向上があります (圧縮ライブラリをセカンドプロセスではなく使用するtar xvzf
やtar xvjf
スタイルのコマンドライン)。これは主に二つの原因から来ています
比較的小さなファイルを大量に処理する場合、特にソフトウェアを配布する際に一般的に使用されるファイルは、高い冗長性があります。多くのファイルにまたがって圧縮すると、個々のファイルを圧縮するよりも全体的に高い圧縮率が得られます。そして、「辞書」は、各ファイルごとではなく、入力のチャンクごとに一度計算されます
tar
はファイルシステムを理解しています。それは、動作する/動作可能なオペレーティング・システムを保存し、復元するように設計されています。UNIXファイルシステム上で何が重要なのかを深く理解しており、それを忠実にキャプチャして復元します。他のツールは… 必ずしもそうとは限らないが、特に zip ファミリーは、OS のファミリー間でファイルを共有するために設計されており、OS の機密コピーを忠実にコピーするのではなく、ドキュメントが重要なものである場合に適している
tar ファイル形式には、.7z や .zip などの他のファイル形式にはない機能がありますか?
疎なファイルの扱い。直接データベースライブラリの中には、スパースファイルに依存しているものがあります – データが公称GBのファイルですが、実際に書き込まれたり保存されたりするデータはかなり少なく、実際に使用されるのは数ブロックのディスクのみです。もしあなたが知らないツールを使用していた場合、解凍する際に膨大なディスクブロックを消費してしまい、すべてがゼロを含んでしまいます。それを疎なファイルに戻すのは…苦痛です。それをする余裕があるのか?疎なファイルが何であるかを把握し、それを尊重するツールが必要です
メタデータです。Unixは長年にわたって奇妙なものを進化させてきました。14文字のファイル名、長いファイル名、リンクのシンボリックリンク、スティッキービット、スーパーユーザビット、継承されたグループアクセス権限など。Tar はこれらを理解して再現します。ファイル共有ツールは…そうでもない。多くの人がリンクを使うことはできません…リンクを使用するソフトウェアを使ったことがあり、そのソフトウェアを使ってバックアップやリストアをしたことがある人は、多くの名前を持つ単一のファイルではなく、多くの独立したファイルを持っていることになります。苦痛です。ソフトウェアが故障してディスクが肥大化してしまう
tar は古いファイル形式であり、今日では新しいファイル形式が存在していますが、なぜ tar (gzip, bzip2, あるいは新しい xz でカプセル化されているかどうかに関わらず) が GNU/Linux, Android, BSD, その他の UNIX オペレーティングシステムで、ファイル転送、プログラムソースやバイナリのダウンロード、時にはパッケージマネージャの形式として、今日でもこれほどまでに広く使われているのでしょうか?
tar
は動作します。それは、そのために設計された仕事を十分にこなします。他にも代用と言われているものがあります (cpio
, pax
, etc, etc)。しかし、tar はほとんどすべてのものにインストールされていますし、それが使っている圧縮ライブラリも他の理由から非常に一般的なものです。tar の機能を実質的に凌駕するものは他にはありません。明確な利点がなく、コミュニティに多くの使用法と知識が埋め込まれているので、代替品はないでしょう。タールは何年にもわたってたくさん使われてきました。ファイルシステムの考え方が大きく変わったり、テキストファイルではないファイルがコードを転送する方法になったりしたら(今のところ方法は想像できませんが、無視してください…)、別のツールを見つけることができるでしょう。しかし、それは今使っているOSのタイプではないでしょう。それは別のものであり、別の組織であり、それは独自のツールを必要とするでしょう
あなたが聞かなかった最も重要な質問は、「タール」がどんな仕事に向いていないのかということだと思います
tar
の圧縮は壊れやすい。アーカイブ全体をビットごとに必要とします。私の経験では、それは回復力がありません。シングルビットエラーの結果、マルチパートのアーカイブが使えなくなったことがあります。エラーから保護するための冗長性は導入されていません(これは、データ圧縮についての質問の1つを打ち破ることになります)。データ破損の可能性がある場合は、データを再構築できるように冗長性のあるエラーチェックが必要です。これは、定義上、最大圧縮されていないことを意味します。すべてのビットのデータが必要とされ、その意味の最大値を持っていること(最大圧縮)と、すべてのビットのデータが損失と回復が可能であること(冗長性とエラー訂正)の両方を持つことはできません。では…アーカイブの目的は何なのか?tar
は信頼性の高い環境で、アーカイブをソースから再度再現できる場合には素晴らしいです。IMEでは、その名前が示唆する本来の目的であるテープ・アーカイビングの方が実際には悪いのです。テープ上のシングルビットエラー(もっと悪いことに、テープヘッドのシングルビットエラーで、テープ全体やアーカイブのバイトごとに1ビットを失う)は、データが使用不可能になる結果をもたらします。十分な冗長性とエラー検出と修正があれば、これらの問題のいずれかを乗り切ることができます
それで…あなたが見ている環境ではどのくらいのノイズや破損があり、ソースは故障したアーカイブを再生成するのに使用できるのでしょうか?あなたが提供してくれた手がかりからの答えは、システムがノイズを含んでおらず、そのソースはアーカイブを再生成することができるということです。その場合、tar
で十分です
tar
の圧縮も、圧縮前のファイルではうまく動作しません。すでに圧縮されたデータを送信している場合は… tar を使って、圧縮の段階は気にしないでください。つまり、何を送っているのか、なぜ送っているのかを知る必要があるということです。あなたが気にするなら。このような特殊なケースを気にしないのであれば、tar は忠実にデータをコピーし、圧縮は忠実にデータを小さくするためにあまり有用なことをしないでしょう。いくつかのCPUサイクルを除いて、大きな問題はありません
2 JezC 2014-08-19
TARとはTape Archiveのことです。何十年も前からあり、広く使われ、サポートされています。成熟した製品であり、レガシーなものだけでなく、現在のニーズにも対応しています
-3 community wiki 2013-03-17