web-dev-qa-db-ja.com

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

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

GNU bsdtarではなくtarを使用する理由は何ですか?利点は何ですか?

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

49
strugee

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

GNUtar他のtarバリアント および自動圧縮検出をサポートしています。

visualicationがUbuntuからの宣伝文句を貼り付けたので、libarchiveに固有のものがいくつかあります。

  1. libarchiveはライブラリであり、従来のbsdtarおよびGNUtarとはその点で異なります。
  2. libarchiveは、いくつかの古いあいまいなコードを読み取ることができませんGNU tarのバリエーション、最も注目すべきは、base64の一部のヘッダーのエンコードでした。そのため、tarファイルは7ビットのクリーンになりますASCII(これは1.13.6-1.13.11の場合で、1.13.12で変更されました。そのコードは公式にはtarで2週間しかありませんでした)
  3. libarchivebsdtarは、非tarファイル(Zip、iso9660、cpioなど)を読み取りますが、従来のbsdtarは読み取りません。

libarchiveが邪魔にならないようになりましたが、ほとんどの場合、古典的なbsdtarでサポートされているものになります。

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

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

GNUtarlibarchivebsdtar、クラシックbsdtarstarおよびBusyBoxtarは確かにほとんどの場合に実行されるtar実装ですが、他にも存在することは間違いありません(たとえばQNXの初期)。 libarchive/GNUtar/starは最も機能が満載ですが、多くの点で元の標準から(おそらくはより良いものに)大きく逸脱しています。

30
robbat2

BSDTAR vs TARに加えて

これが1つのメリットです。

私はここで5つのトピックに行きます(そしてトピックから外れますが、あなたが望むものもカバーします):

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

bsdtarスパースファイルを通常よりも適切に処理しますtar

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

*例: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に似ています

  • また、巨大なスパースファイルをrsyncすると、tarのように動作します。
  • ジャイアントファイルをcpすると、bsdtarのように自動的に動作します(cpの動作を変更してゼロを超えるか、ゼロを超えないようにすることができます)。

個人的には、薄いLUNのようなスパースファイルと、厚いLUNのような通常のファイルを想像します...

次のトピックは[〜#〜] btrfs [〜#〜]薄いvs厚い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を使用したコピー

次のトピックは、EXTの薄いLUNと厚いLUNです。

  • まばらである薄い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を使用したコピー

厚いファイルと薄いファイル

  • 厚いLUN /ファイルの場合、0から割り当てられたサイズまでデータを入力します。メタデータは0がある場所に偽装します。データを入力すると、データも入力されます
  • 厚いLUN /ファイル:最初にデータを0または何でも(遅延ゼロまたは熱心なゼロ)埋めます-これらは予約を設定します(またはZFSが参照予約を呼び出すのと同様)

ここのVMWARE記事では、厚いLUN /ファイルを使用したレイジーVSイーガーゼロについて説明しています: https://communities.vmware.com/message/2199576

ヒント

シックとシンはlunだけに適用されるのではなく、ファイル、zfsファイルシステム(shares/volumes/luns)にも適用できることを覚えておいてください。他のことも確かです(ただzfsを見てください)。

15
kobbsoss

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

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

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

以下は、経験ではなく読書に基づいています-私は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、それ以外のことを学びたいと思います。少なくともパーティションのクローン作成とハードリカバリバックアップには、ネイティブユーティリティを使用したいと思います。しかし、ダンプの正しさを確認できない場合は、作成する手間が要らないと思います。

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

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

1
bart