気になって少し読んでみましたが、まだ疑問が残っています
CPIOとTARの違いは何ですか?別の質問で聞いたのですが、tarは多くのファイルを1つのアーカイブにまとめるためのもので、通常はgzipやbzipで圧縮されます
また、tarはstdoutから圧縮できないと言われました。バックアップ用にZFSのスナップショットをアーカイブ/圧縮したい。CPIOとbzip2を組み合わせてこの効果を得られないかと
それとも私の考えが完全に間違っているのでしょうか?CPIOの目的はそこではないのでしょうか?
これは、私はZFSのスナップショットをバックアップする上で、Oracleのドキュメントを読んだ後に出てきたコマンドの種類です
# Backup snapshot to cpio and bzip2 archive
zfs send media/mypictures@20070607 | cpio -o | bzip2 -9c > ~/backups/20070607.bz2
# Restore snapshot from cpio and bzip2 archive
zfs recieve media/mypictures@20070607 | cpio -i | bunzip2 -c ~/backups/20070607.bz2
43 ianc1215 2011-10-07
tar
と cpio
は、どちらも一つの目的を持っています。データを圧縮することはありません。(最近では、tar
の方が相対的にシンプルなので、cpio
のようにfind
と結合しなければならない代わりに、入力ファイルを引数として取ることができるので、tar
の方が人気があります)
あなたの場合、これらのツールはどちらも必要ありません。zfs send
はすでにtar
と同じことをしています。つまり、あなたは何もファイルを持っておらず、名前のないストリームだけを持っていることになります
スナップショットを圧縮するには、zfs
の出力を圧縮プログラムにパイプするだけです
zfs send media/mypictures@20070607 | gzip -c > ~/backups/20070607.gz
gzip -dc ~/backups/20070607.gz | zfs receive media/mypictures@20070607
(gzip
をxz
やbzip2
などのストリーム圧縮ツールで代用しても構いません)
28 user1686 2011-10-07
前にgrawityとPaulが言っていたことに加えて
History
昔」では、ファイルを他の UNIX 派生のものに移動するときには、 cpio (オプション -c
を使用) が tar よりも移植性が高く、柔軟性に優れていたために使用されていました。しかし、tar の移植性の問題は 1980 年代後半から解決されたと考えられます
残念なことに、異なるベンダが cpio の -c
形式をいじくりまわしたのはその頃です (GNU cpio のマニュアルページと -H
オプションを見てください)。その頃には、tar は cpio よりも移植性が高くなっていました。異なるUNIXベンダがこの問題を解決するまでには、ほぼ丸10年かかりました。GNU tar と GNU cpio をインストールしておくことは、当時 (今でもそうだと思いますが) 異なるソースからのテープを扱わなければならなかったすべての管理者にとって必須のことでした
User Interface
tar は、管理者がシステムに接続されているテープドライブを設定するテープ設定ファイルを使用することがあります。そうすると、ユーザはテープの正確なデバイスノードを覚えていなくても、「じゃあ、テープドライブ1にします」と言うだけで済むようになります (これは非常に混乱を招く可能性がありますし、異なるUNIXプラットフォーム間で標準化されているわけでもありません)
しかし、主な違いは
tarは自分でディレクトリを検索することができ、コマンドラインの引数からバックアップするファイルやディレクトリのリストを取ります
cpio は指定されたファイルやディレクトリのみをアーカイブしますが、 サブディレクトリを再帰的に検索することはありません。また、cpio は標準入力からアーカイブされる項目のリストを取得します – これが、ほとんどの場合 find と組み合わせて使われる理由です
cpioコマンドは、tarと比較すると初心者には怖そうに見えることが多いです
$ find myfiles -depth -print0 | cpio -ovc0 | gzip -7 > myfiles.cpio.gz
$ tar czvf myfiles.tar.gz myfiles
これがほとんどの人がアーカイブファイルを作成するのにtarを使う主な理由だと思います。完全なディレクトリを束ねるような単純な作業には、その方が使いやすいからです
また、GNU tar は -z
オプションを提供しています。これにより、アーカイブはその場で GNU zip で圧縮され、より簡単になります
一方で、find & cpio を使って気の利いたことができるかもしれません。実際には,よりUNIX的なアプローチです.考えられるほとんどすべてのことを処理してくれるツールがすでにあるのに、なぜ cpio にディレクトリツリー検索を含めるのでしょうか?思いつくのは、ある日付より新しいファイルだけをバックアップしたり、同じファイルシステム内にあるファイルだけに制限したり、grep -v
で検索出力をフィルタリングして特定のファイルを除外したり…といったことです
GNU tar の人々は、以前は cpio でしかできなかったことを多くのことができるようにするために多くの努力をしてきました。実際、両方のツールはお互いに学び合いましたが、tar のフォーマットを読めるのは cpio だけで、その逆はありません
タールと出力処理を行います
あなたが言ったことに最後に一言
また、tarはstdoutから圧縮できないと言われました。バックアップ用にZFSのスナップショットをアーカイブ/圧縮したい。CPIOとbzip2を組み合わせてこの効果を得られないかと
まあ、tarのすべてのバージョン(GNUであろうとなかろうと)をパイプで使うことができます。アーカイブ名にはマイナス記号(-
)を使えばいいだけです
$ tar cvf - myfiles | bzip > myfiles.tar.bz
また、GNU tar はポストプロセッサコマンドを指定するためのオプション --to-command
を提供しています。特定のハードウェアデバイスに書き込むときに役立つかもしれません
63 ktf 2011-10-07
tar と cpio は基本的には同じ機能を持っており、複数のファイルやディレクトリの入力から連続した一つのファイルを作成します。元々はその結果をテープに貼り付けるためのものでしたが、最近では一般的に上記のように圧縮ユーティリティーに送り込むために使用されています。これは、小さなファイルをたくさん圧縮するよりも、一つの大きなファイルを圧縮する方が時間的にも空間的にも効率的だからです。多くの画像フォーマット(png、jpgなど)はすでに高度に圧縮されているので、圧縮ユーティリティに通すと実際には少し大きくなってしまうことに注意してください
tar も cpio も圧縮はしません。アグリゲートファイルを作るために何を使おうか」という争いには tar が事実上「勝った」のですが、 cpio はいろいろなところで注目されています。私はどちらか一方が他方より優れているということは知らないが、tar はより一般的に使われていることで勝っている
tar は確かに stdin に入力を取り込んで stdout に出力することができます。z” オプションを指定して呼ばれた場合、自動的に gzip が出力されます
6 Paul 2011-10-07
なぜtar
よりcpio
を使うのか、1996年頃のHPテクニカルサポートに聞いてみました
テープは伸びて消耗すると聞いていました。tar
がテープの読めない部分に到達すると失敗してエラー番号を返す。cpio
が読めない部分に到達すると、次の読めるブロックに進み、再同期して続行します
これをサポートするドキュメントを見たことがないのですが、いつもcpio
を使っていました
5 Lynn 2016-10-15
また、(少なくとも) FreeBSD と Mac OS X では、tar を使って cpio ファイルを操作することができます。BSD tar はフードの下で libarchive を使っているので、 cpio, pax, shar… を扱うことができます
つまり、cpio
コマンドの使い勝手の問題でcpioファイルとのやりとりができなくなることはありません
4 trombonehero 2013-10-02
ここでの回答はすでに cpio
と tar
を非常によく比較していますが、私は cpio
のパイプラインモードと呼ばれる機能の一つに注目したいと思います。この機能は よくドキュメント化されています そして、その大前提として以下のようになっています
find . <predicates> | cpio -pdmv /destination/dir
tar
と同等のものは、次のようなものです
find . <predicates> | tar -T - -cf - | (cd /destination/dir; tar xvf -)
もちろん、別のスレッドで議論されている rsync
や cp --parents
のような代替案もありますが、find
と cpio
の組み合わせによって提供される柔軟性に迫るものはありません。tar
がアーカイブを作成するためにどこにでもあるので、これが私が cpio
を使い続ける唯一の理由です
3 community wiki 2018-06-21