bsdtarとGNU tarの違いは何ですか?


46

私は常にGNUを使用してきましたtar。ただし、私が見たすべてのGNU / Linuxディストリビューションbsdtarはリポジトリに含まれています。一部のIIRCにはデフォルトでインストールされていることさえ見ました。PKGBUILDで見たように、Arch GNU / Linuxはその一部としてbasedevel(たぶんbase、しかし確かではありませんが)それを必要としていることは確かです。

bsdtarGNUの代わりに使用したいのはなぜtarですか?利点は何ですか?

私はBSDとGNU / Linuxユーザーランドの主な違いですか尋ねた人であることに注意してください


回答:


29

Ubuntu bsdtarは実際には、バンドルされているtar実装libarchiveです。そしてそれは古典的なものと区別されるべきbsdtarです。libarchiveFreeBSDなど、一部のBSDバリアントはtar実装に使用します。

GNUtar他のtarバリアントと自動圧縮検出をサポートします。

視覚化がUbuntuからの宣伝文句を貼り付けたように、そこには次のものに固有のいくつかのことがありlibarchiveます。

  1. libarchive定義上、ライブラリであり、従来の方法bsdtarGNUtarその方法の両方とは異なります。
  2. libarchive 古い不明瞭なGNU tarのバリエーションを読むことができません。最も注目すべきは、base64の一部のヘッダーのエンコードです。そのため、tarファイルは7ビットのきれいなASCIIです(これは1.13.6-1.13.11の場合で、1.13.12で変更されました) 、そのコードは公式にtarで2週間のみでした)
  3. libarchiveさんはbsdtar非tarファイルを読み込みます(例えば郵便番号、ISO9660、cpioは)、しかし古典bsdtarはしません。

今、私たちが得ていることをlibarchive邪魔にならないように、それは主に古典にサポートされているものにダウンしていますbsdtar

ここでマンページを見ることができます:

あなたの元の質問では、古典的な利点は何ですかと尋ねましたが、bsdtar本当にあるかどうかはわかりません。本当に重要なのは、すべてのシステムで動作する必要があるシェルスクリプトを作成しようとしている場合だけです。渡すものがtarすべてのバリアントで実際に有効であることを確認する必要があります。

GNUtarlibarchiveさんbsdtar、古典bsdtarstarBusyBoxtar確かにあなたは、ほとんどの時間に実行されますことをtar実装されているが、私はそこに他人アウト(例えば、早期QNX)がある確信しています。libarchive/ GNUtar/ starは最も多くの機能が詰め込まれていますが、多くの点で元の標準から長い間逸脱していました(おそらくより良いために)。


15

BSDTAR対TARプラス

ここに一つの利点があります!!

ここでは5つのトピックに進みます(トピックから外れますが、あなたが望むものもカバーします)。

  1. bsdtar vs tar
  2. スパースファイルとそうでない
  3. btrfsを使用したシックおよびシンファイル/ LUN
  4. btrfsを使用しないシックおよびシンファイル/ LUN
  5. thickとthinの違いと、それが単に太ももに適用されない方法

bsdtarは、通常のtarよりもまばらなファイルを処理します

  • bsdtarはすべてのゼロを取得し、メタデータを取得します
  • tarは実際にはすべてゼロを処理します

*例: 20 TBのスパースファイル(biglun)全体で10 MBのデータを持つ20 TBのスパースファイル(biglunと呼ばれる)を想像してください。

スパースファイルの作成方法:

スパースファイル-作成方法-検出- スパースファイルはすべて「薄い」lunsのようなものです(lunに使用する場合)。「太い」太鼓は別の話になります。

*トピックに戻る:

  • biglunを風袋引きすると、tarが10メガグラムすべてを通過し、さらに20トンの最悪のゼロがlun全体に広がります。しばらく時間がかかり、tarファイルはかなり大きくなります。また、それを抽出します-私はスパースファイルのtarファイルの抽出を行ったことはありませんが、きれいではないかもしれません。私はここで間違っているかもしれません。

  • biglunをbsdtarすることで、10メガバイトのデータを処理し、ゼロの〜20tbの小さなメタデータを作成します。

利益?それらの多く。上記のいくつかを書きました。

rsync vs cpに似ています

  • また、巨大なスパースファイルを再同期すると、tarのように動作します
  • 巨大ファイルをcpする場合、bsdtarのように自動的に動作します(cpの動作を変更して、ゼロを超えるか、ゼロを超えないようにすることができます)

個人的に、私は薄い太鼓のようなまばらなファイルと、太い太鼓のような通常のファイルを想像するのが好きです...

次のトピックは、BTRFSシンvsシックLUNです。

  • BTRFSのようなファイルシステムでは、シンLUNはスパースファイルです(wikiドキュメントのように、truncateで作成してください)。

     truncate -s <size in kilobytes> filename
    

    ヒント:bsdtarを使用したバックアップ、cpを使用したコピー

  • 厚いlunsは、+ C属性を持つ通常のファイルです(+ Cにより、COWなし、書き込み時のコピー、すべての書き込みが割り当てられた場所に本質的にとどまり、上書きがある場合にそのファイルに新しい書き込みが発生しないようにしますまたは削除-研究COWBTRFS)。truncateでファイルを作成する代わりに、「fallocate -l」で作成します

    fallocate -l <size in kilobytes> filename
    chattr +C filename
    

    ヒント: bsdtarまたはtarを使用したバックアップ、rsyncまたはcpを使用したコピー

次のトピックは、EXTシンvsシックLUNです。

  • 疎な薄い太もも

    truncate -s <size in kilobytes> filename
    

    ヒント:bsdtarを使用したバックアップ、cpを使用したコピー

  • 太いlunsは、+ C属性を持つ通常のファイルです(+ Cにより、COWなし、書き込み時のコピー、すべての書き込みが割り当てられた場所に本質的にとどまり、上書きがある場合にそのファイルに対して新しい書き込みが発生しないようにしますまたは削除-研究COWBTRFS)。truncateでファイルを作成する代わりに、「fallocate -l」で作成します

    touch filename
    fallocate -l <size in kilobytes> filename
    

    ヒント: bsdtarまたはtarを使用したバックアップ、rsyncまたはcpを使用したコピー

太いファイルと薄いファイルの違い

  • 太いluns / files、データを0から割り当てられたサイズまで埋め、メタデータは0のふりをします。データがいっぱいになると、データもいっぱいになります
  • 太いluns / files:開始時にデータを0または任意の値(レイジーゼロまたはイーガーゼロ)で埋めます-これらのセット予約(またはZFSがrefreservationsを呼び出すのが好きな場合)

VMWAREの記事では、遅延luns / filesの遅延ゼロと熱心なゼロについて説明しています:https ://communities.vmware.com/message/2199576

ヒント

thickとthinは、lunsに適用されるだけでなく、ファイル、zfsファイルシステム(共有/ボリューム/ luns)にも適用でき、他のもの(zfsを見てください)にも適用できます。


1
素敵で徹底的。サイトへようこそ...
eyoung100 14年

1
-任意のtarでスパース:ほとんどのtar実装に-Sを渡すだけで、長い間サポートされています。-rsyncでスパース:再度、-sparseを渡して、動作します。スパース検出を使用する場合のマイナス面は、ツールが実際にブロックをさらに読み込む必要があることです。これにより、多くのCPUが導入される可能性があります(ゼロ/ゼロ以外の実行が交互に発生する場合は特に)。
robbat2

gnu tarはスパースフラグをサポートしていますが、bsdtarはスパースホールを処理せずにスキップする方法を知っているため(bsdtarは1kのデータのみを含む1 TBのスパースファイルがある場合、bsdtarは1kを処理します)データ:Gnu tarは1TBを処理します
moveaway00

13

Ubuntuパッケージの説明(http://packages.ubuntu.com/de/lucid/bsdtar)から

「bsdtarプログラムには、以前のtar実装よりも多くの利点があります。

  • 図書館。コア機能はライブラリ内にあるため、pkg_addなどの他のツールで使用できます。
  • 自動フォーマット検出。Libarchiveは、アーカイブを読み取るときに、圧縮(none / gzip / bzip2)およびフォーマット(古いtar、ustar、gnutar、pax、cpio、iso9660、zip)を自動的に検出します。これは、あらゆるデータソースに対して実行されます。
  • Pax Interchange Formatのサポート。これは、各エントリに任意の拡張属性を追加する古い「ustar」tar形式のPOSIX / SUSv3拡張です。GNU tar形式が行うすべてを実行します。
  • ファイルフラグ、ACL、任意のパス名などを処理します。Pax交換形式は、簡単に拡張可能な手法を使用してキー/値属性をサポートします。任意のパス名、グループ名、ユーザー名、ファイルサイズはPOSIX標準の一部です。libarchiveは、ファイルフラグ、ACL、および任意のデバイス番号のサポートによりこれを拡張します。
  • GNU tarサポート。Libarchiveは、ほとんどのGNU tarアーカイブを読み取ります。需要があれば、これをさらに改善できます。」

1

以下は経験ではなく読書に基づいています-私はFreebsdを使い始めたばかりなので、実際の経験はほとんどありません(ほとんどLinuxから来ています)。重要な何かを見逃した場合、ここで言うことはごみですと謝罪します(そして謙虚に訂正を求めます)...

マニュアルページ(最近ではhttp://www.freebsd.org/cgi/man.cgi?query=tar&sektion=1を参照)を読んだところ、Freebsd tarには(-d、--diff 、--compare)機能。Freebsdダンプ/復元の作成者もこのようなものを提供していないようですので、これは驚くことではありません。

Freebsd tarが行うと言われているように、Gnu tarがすべてのUFSメタデータを組み込むかどうかは確かにわかりません。これは重要な問題です。しかし、私の好みでは、出力ファイルのMD5合計を保存し、ダンプファイルをダンプしたデータと比較するまで、ダンプが完了したとは決して考えられません。さまざまな問題により、ダンプされたデータがディスク上のデータと異なる場合があります。(ファイルの変更だけでなく、ディスクエラー、メモリエラー、マシンの障害など。これらはすべて実際に発生しました。)

私自身の意見では、これにより、Gnu tarが、Freebsdのストックシステムで真のバックアップを作成するためにこれまで見つけた唯一のオプションになります。

そうでなければ、FWIWを学びたいと思います。少なくともパーティションのクローン作成とハードリカバリバックアップにはネイティブユーティリティを使用することをお勧めします。しかし、ダンプの正しさを検証できない場合、ダンプを作成することに煩わされる点はわかりません。


1
  • bsdtarは、@archive構文を使用して他のアーカイブからのtarメンバーを読み取り、tarできます

  • GNU tarには--deleteオプションがありますが、最近ではアーカイブを破損する可能性があることがわかりました。

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