私は常にGNU tar
を使用しています。ただし、私が見たすべてのGNU/Linuxディストリビューションは、リポジトリにbsdtar
を出荷しています。 IIRCにはデフォルトでインストールされています。ArchGNU/Linuxがbasedevel
の一部としてそれを必要とすることは確かです(多分base
ですが、わかりません)。 PKGBUILDでそれを見た。
GNU bsdtar
ではなくtar
を使用する理由は何ですか?利点は何ですか?
私が BSDとGNU/Linuxユーザーランドの主な違いは何ですか? を尋ねた人であることに注意してください。
Ubuntu bsdtar
は、実際にはlibarchive
にバンドルされているtar実装です。そしてそれは古典的なbsdtar
と区別されるべきです。一部のBSDバリアントは、FreeBSDなどのtar実装にlibarchive
を使用します。
GNUtar
は 他のtarバリアント および自動圧縮検出をサポートしています。
visualicationがUbuntuからの宣伝文句を貼り付けたので、libarchive
に固有のものがいくつかあります。
libarchive
はライブラリであり、従来のbsdtar
およびGNUtar
とはその点で異なります。libarchive
は、いくつかの古いあいまいなコードを読み取ることができませんGNU tarのバリエーション、最も注目すべきは、base64の一部のヘッダーのエンコードでした。そのため、tarファイルは7ビットのクリーンになりますASCII(これは1.13.6-1.13.11の場合で、1.13.12で変更されました。そのコードは公式にはtarで2週間しかありませんでした)libarchive
のbsdtar
は、非tarファイル(Zip、iso9660、cpioなど)を読み取りますが、従来のbsdtarは読み取りません。libarchive
が邪魔にならないようになりましたが、ほとんどの場合、古典的なbsdtar
でサポートされているものになります。
自分でマンページを見ることができます:
元の質問では、従来のbsdtar
の利点は何であるかを質問されましたが、本当にあるかどうかはわかりません。本当に重要なのは、すべてのシステムで動作する必要があるシェルスクリプトを記述しようとしている場合だけです。 tar
に渡すものがすべてのバリアントで実際に有効であることを確認する必要があります。
GNUtar
、libarchive
のbsdtar
、クラシックbsdtar
、star
およびBusyBox
のtar
は確かにほとんどの場合に実行されるtar実装ですが、他にも存在することは間違いありません(たとえばQNXの初期)。 libarchive
/GNUtar
/star
は最も機能が満載ですが、多くの点で元の標準から(おそらくはより良いものに)大きく逸脱しています。
これが1つのメリットです。
私はここで5つのトピックに行きます(そしてトピックから外れますが、あなたが望むものもカバーします):
bsdtarスパースファイルを通常よりも適切に処理しますtar
*例:20 TBのスパースファイル(biglun)全体で10 MBのデータを持つ20 TBのスパースファイル(biglunと呼ばれる)を想像してください...ドライブ上でわずか10 MBを占めるスパースファイルです。
スパースファイルの作成方法:
スパースファイル-作成方法-検出-すべて スパースファイルは「薄い」lunのようなものです(lunに使用する場合)。 「厚い」lunは別の話になります。
*トピックに戻る:
biglunを風袋引きすると、tarが10 MBをすべて通過するとともに、lun全体に広がる〜20tbのゼロがさらに悪化します...少し時間がかかると思いますが、tarファイルはかなり大きくなります。また-それを抽出する-私はスパースファイルのtarファイルの抽出を行ったことがありませんが、きれいではないかもしれません。私はここで間違っているかもしれません。
biglunをbsdtarすると、10 MBのデータが処理され、約20 TBのゼロの小さなメタデータが作成されます。
メリット?それらの多く。上に書いたばかりです。
Rsync対cpに似ています
個人的には、薄いLUNのようなスパースファイルと、厚いLUNのような通常のファイルを想像します...
[〜#〜] btrfs [〜#〜]のようなファイルシステムでは、薄いLUNはスパースファイルです(wikiドキュメントのように切り捨てて作成します) 。
truncate -s <size in kilobytes> filename
tip:bsdtarを使用したバックアップ、cp
シックLUNは、+ C属性を持つ通常のファイルです(+ Cにより、COWなし、コピーオンライトになるため、すべての書き込みは、割り当てられた場所に本質的に留まり、上書きがある場合、そのファイルに対する新しい書き込みは発生しません。または削除-調査[〜#〜] cow [〜#〜]および[〜#〜] btrfs [ 〜#〜])。切り捨てでファイルを作成する代わりに、「fallocate -l」でファイルを作成します
fallocate -l <size in kilobytes> filename
chattr +C filename
tip:bsdtarまたはtarを使用したバックアップ、rsyncまたはcpを使用したコピー
まばらである薄いluns
truncate -s <size in kilobytes> filename
tip:bsdtarを使用したバックアップ、cp
シックLUNは、+ C属性を持つ通常のファイルです(+ Cにより、COWなし、コピーオンライトになるため、すべての書き込みは、割り当てられた場所に本質的に留まり、上書きがある場合、そのファイルに対して新しい書き込みは発生しません。または削除-調査[〜#〜] cow [〜#〜]および[〜#〜] btrfs [ 〜#〜])。切り捨てでファイルを作成する代わりに、「fallocate -l」でファイルを作成します
touch filename
fallocate -l <size in kilobytes> filename
tip:bsdtarまたはtarを使用したバックアップ、rsyncまたはcpを使用したコピー
ここのVMWARE記事では、厚いLUN /ファイルを使用したレイジーVSイーガーゼロについて説明しています: https://communities.vmware.com/message/2199576
シックとシンはlunだけに適用されるのではなく、ファイル、zfsファイルシステム(shares/volumes/luns)にも適用できることを覚えておいてください。他のことも確かです(ただzfsを見てください)。
Ubuntuパッケージの説明から( http://packages.ubuntu.com/de/lucid/bsdtar )
「bsdtarプログラムには、以前のtar実装よりも多くの利点があります。
以下は、経験ではなく読書に基づいています-私はFreebsdから始めたばかりなので、ほとんど実際の経験はありません(私はほとんどLinuxから来ています)。重要な情報を見逃してしまい、ここで私が言うことはごみです...
マニュアルページを読んだところ(最近では、上記で参照したもの http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=1 )ですが、Freebsd tarには(-d、--diff、--compare)機能。 Freebsd dump/restoreの作者もこのようなものを提供していないようで、これは当然のことです。
Freebsd tarがそうであると言われているように、Gnu tarがすべてのUFSメタデータを組み込むかどうかは確かではありませんが、これは重要な問題です。しかし、私の好みのために、出力ファイルのMD5合計を保存するまで、ダンプが完了するとは決して考えられません。そして、ダンプファイルを、ダンプしたと思われるデータと比較しました。さまざまな問題により、ダンプされたデータがディスク上のデータと異なる可能性があります。 (ファイルの変更だけでなく、ディスクエラー、メモリエラー、マシンの障害など。これらはすべて実際に起こりました。)
私の意見では、これにより、Gnu tarは、私がこれまでに見つけた、純正のFreebsdシステムで真のバックアップを作成するための唯一のオプションになります。
FWIW、それ以外のことを学びたいと思います。少なくともパーティションのクローン作成とハードリカバリバックアップには、ネイティブユーティリティを使用したいと思います。しかし、ダンプの正しさを確認できない場合は、作成する手間が要らないと思います。
bsdtarは、@archive
構文を使用して、他のアーカイブからのメンバーを読み取ってtarできます
GNU tarには--delete
オプションがあります—最近ではありますが、アーカイブが破損する可能性があることがわかりました。