なぜ単一のファイルをtarするのですか?


101

私の会社では、ローカル開発データベースのスナップショットをdb.dump.tar.gzファイルとしてダウンロードしています。圧縮は理にかなっていますが、tarballには単一のファイル(db.dump)しか含まれていません。

単一のファイルをアーカイブするポイントはありますか、それとも.tar.gz一般的なイディオムですか?どうして.gz


5
私の意見では単なる慣習です。人々がgz拡張子のファイルを見るとき、デフォルトの考え方はを使用することtar -zxvfです。しかし、ファイル名を見て.tgz、拡張子が付いていないことがわかる人にとっては、dbダンプファイルをgzipするのはまったく問題ありません。圧縮アルゴリズムの詳細がわからないため、tarがdbダンプなどのスパースファイルで圧縮を行うかどうかはわかりませんが、プレーンテキストファイルの場合、ファイルの直接gzipは、最初にtaringおよびgzipするよりも非常に小さなサイズの利点がありますファイルをINGの
MelBurslan

3
単一のファイルのタール化は、ファイルの先頭と末尾にいくつかのメタデータブロックを追加するだけです。実際のファイルデータは、そのままtarを介してコンプレッサーに渡されます。そのため、大きなファイルの場合、単純な圧縮と風袋引きのサイズの違いは無視できます。
プラグウォッシュ

過去に、さまざまな圧縮方法を試したときに、.tar.gz他のほとんどの一般的な方法よりも優れていることがわかりました。私はそれがただより優れて.tarいたことを思い出しますが、それがただより良いかどうか思い出せません.gz。皮肉なことに、Windowの.cabフォーマットは私が試した中で最高の方法でしたが、これは非常に予想外でした。
ファラプ

@Pharapはtar、それがアーカイブ形式の圧縮アルゴリズムだされていません
gardenhead

1
@gardenheadさて、それはなぜうまく機能しなかったのかを説明するでしょう。
ファラプ

回答:


163

使用することの利点.tar.gzの代わりには.gzということです

  • tarより多くのメタデータ(UNIX許可など)を保存しますgzip
  • 複数のファイルを保存するためにセットアップをより簡単に拡張できます
  • .tar.gzファイルは非常に一般的で、gzip圧縮されたファイルのみが一部のユーザーを困惑させる可能性があります。(cf. MelBurslansコメント

使用のオーバーヘッドtarも非常に小さいです。

本当に必要でない場合でも、単一のファイルをtarすることはお勧めしません。圧縮された単一のファイルに直接アクセスできる便利なツールが多数あります(などzcatzgrep- bzip2やにも存在しますxz)。


35
私はメタデータの側面を考慮しませんでした。非常に良いポイント
ガーデンヘッド

5
を見ると.gz、私の最初の本能はそうtar -zxf foo.gzです。gzipがコマンドであることを思い出すと、さらに数秒かかります。
bgStack15

2
@ bgStack15 FWIWを必要としないz(またはその-ことについて)、ほとんどの最新tarのsは、ファイルを解凍する必要があることを自動的に検出します。
ドリューベン

2
デフォルトでgzipは、元のファイル名とタイムスタンプが保存されます。-Nそれらを復元するために解凍するときにオプションを使用できます。
ロス・リッジ

@RossRidgeありがとう、元のファイル名に関するテキストを再度削除しました。
ジョフェル

63

あなたは実際に質問の半分だけを尋ねています。もう1つの質問は、「なぜgzipでtarファイルを圧縮するのですか?」です。そして、答えはgzipファイルを小さくするだけではありません(ほとんどの場合):

tar

  • ファイル名とその他のメタデータを保存します:モード、所有者ID、グループID、ファイルサイズ、変更時間
  • チェックサムを保存します(ヘッダーのみ)

gzip

  • 元のファイル名を保存できますが、それはオプションです
  • 元のデータに対してCRC-32チェックサムがある
  • ファイルを圧縮します

tarあなただけでは、データが破損していないことを確認することはできません。gzipあなただけでは、ユーザー/グループID、変更時間を復元することはできず、元のファイル名ではない可能性があります。

組み合わせは、個々のコマンド/フォーマットが提供するよりも強力ですなぜなら、それらは互いの機能を補完するからです


それを明確にしてくれてありがとう!tarウィキペディアのページを読んでいたとき、チェックサムがファイル全体に対するものであるという意味で説明を誤解していました。
ガーデンヘッド

これは正しい答えのように感じます。また、いくつかの理由を追加します。同意する場合は、編集することをお勧めします。1).tarまたは.gzだけでなく.tgzの場合、管理者に追加費用はかかりません。それらはすべて1つのコマンドです。DBバックアップはこれらの1つにすぎません。1つまたは複数のファイルをバックアップする場合でも、同じワークフロー、ツール、およびコマンドを使用できます。では、ファイルが1つしかない場合に、gzipコマンドの構文を使用する特別なケースはなぜでしょうか。
デウィモーガン

30

唯一-gzipされたテキストファイルを使用する非常に大きな利点があります-内容は直接のようなコマンドラインツールを使用してアクセスすることができlesszgrepzcat


興味深い点ですが、質問はデータベーススナップショットに関するもので、テキストファイルではなく、gzip圧縮されているだけです。
underscore_d

9
@underscore_dすべてのデータベースダンプ(大部分はmysqlおよびpgsql)はテキストダンプです。これは、何らかの原因でダンプが部分的に破損した場合に復旧しやすいため、また通常のツールで復元を前処理できるためです(sed 、awk、perlなど)必要な場合。つまり、バイナリダンプよりも信頼性が高く便利です。トレードオフは、テキストダンプが大きくなる傾向があり(だれが気にしますか?ディスクスペースが安価で、圧縮率が高い)、復元が大幅に遅くなることです(ただし、トランザクションで復元をラップする場合はそれほど大きくありません)。
cas

1
これらのツールの利点は、単純に解凍プログラムの出力を単純なツールにパイプすることと比べて何ですか?
CodesInChaos

21

私は、人々がtarなしでgzip / bzip2 / xzを使用できることに気付いていない可能性が高いと思います。おそらく、圧縮とアーカイブが単一の形式(ZIPRARなど)に統合されるのが普通であるDOS / Windowsのバックグラウンドから来ているためです。

メタデータの保存や余分なファイルを追加する機能があるため、状況によってはtarを使用することには若干の利点があるかもしれませんが、欠点もあります。プレーンなgzip / bzip2 / xzファイルを使用すると、解凍したデータをディスク上にファイルとして保存することなく、解凍して別のツール(データベースなど)に直接パイプすることができます。tarballを使用すると、これは難しくなります。


2
GNU tarを使用すると、標準出力への出力に-Oスイッチを使用するだけなので、それほど難しくはありません。
ハイド

5
最初の段落は、tgz拡張子を使用するファイルにとって十分に妥当であると思われます。しかし、OPのケースではtar.gz-これらの架空の元Win / DOSユーザーが私と同じようなものである場合、そのようなファイルを見たときに最初に言うのは「なぜ2つの拡張子があるのですか?」その後、グーグルでグーグルで答えをすぐに得tarます。具体的には、圧縮と圧縮が明確に説明されています。;-)
underscore_d

17

tar状況によっては、使用を重要にする重要な違いがあります。@ jofelが答えで言及した「メタデータ」に加えて、アーカイブにtar ファイル名記録します。解凍すると、アーカイブの名前に関係なく元のファイル名が取得されます。

あなたの場合、tarアーカイブとそれに含まれるファイルには、関連する名前db.dump.tar.gzdb.tarがありますが、tarファイルの名前を20-Apr-16.dump.tgz、または何に変更したと仮定します。でこれを解凍してtar xvfzくださいdb.dump。比較のために、解凍して20-Apr-16.dump.gz、あなたが持っています20-Apr-16.dump。(編集:コメントで指摘されているように、gzipはファイル名の記録も作成しますが、通常は解凍時に使用されません)。tarアーカイブには、サブディレクトリに抽出されたファイルを置く相対パス名を含めることができます。

あなたのユースケースは、この種のファイル名の永続性が必要であるか、望んでさえいるか、または実際に望ましくないかどうかを決定します。ただし、圧縮に関係なく、tarアーカイブは通常のファイルとは異なる方法で移動します。


6
gzipは元のファイル名も記録します。
-psusi

8
うん。gzipヘッダーの名前はオプションです(コマンドのストリーミング出力を圧縮した場合は明らかに存在しません)。ほとんどのツールはデフォルトで復元しません(たとえば、gzip --name解凍時に明示的に使用する必要があります)ファイル名の永続性を得るためにtarを使用する必要はありません。
マイル

これを指摘してくれてありがとう、私はそれを知らなかった。それでも、これはデフォルトの動作ではないため、ポイントは次のとおりです。tar形式でファイルを配布すると、受信者の介入なしに元のファイル名(および場合によっては相対パス)が保持されます。(g)zipファイルを配布することはできません。
アレクシス

8

他のすべての答えに加えて、私は最近、1つのファイルのみが予想されるスクリプトの状況を見つけましたが、前の従業員が複数のファイルが生成される可能性があるスクリプトを書きました。そのため、ファイルはtar圧縮され、bzip圧縮され、転送され、拡張されました。

プロセスが成長して4.3 GBのファイルを作成すると、ロールオーバーして.dumpファイルに加えて.dump.001ファイルを作成しました。すべてのスクリプトが機能し続けました。

それはプロアクティブなシステム管理者の怠lazの定義です!


2

タイムスタンプを保存してコピーするために、1つのファイルをtarします(ダウンロードでは簡単に見落とされます)。ファイルの許可と所有権はそれほど重要ではありません。ダウンロードは、統合が不十分なシステムに適用される用語です。

tar'dであるかどうかに関係なく、ファイルを圧縮してダウンロードを高速化することは標準的な方法です。ディスク領域が不足することは避けてください。


-1

Tarは、正式なファイルシステムに書き込まれていない複数のファイルに特に役立ちます。何らかの理由で場合によっては、書き込まれるファイルは1つだけであり、実際の結果にはなりません。パーティションやファイルシステムに関係なく、.tar.gzを直接/ dev / sdxに追加できます。テープの場合もあります。

スクリプトまたはプロセスが遺産コードからコピーされたため、一般的に行われます。もちろん、ファイルが1つしかない場合はtarする必要はありませんが、複数のファイルを拡張する余地は残されています......

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.