bsdtar 和 GNU tar 有什么区别?

str*_*gee 55 tar bsd gnu

我一直使用 GNU tar。但是,我见过的所有 GNU/Linux 发行版都bsdtar在它们的存储库中发布。我什至看到它默认安装在某些 IIRC 中。我确信 Arch GNU/Linux 需要它作为basedevel(也许base,但我不确定)的一部分,正如我在 PKGBUILDs 中看到的那样。

为什么要使用bsdtar而不是 GNU tar?有哪些优势?

请注意,我是问BSD 和 GNU/Linux 用户空间之间的主要区别是什么的人.

rob*_*at2 33

Ubuntubsdtar实际上是捆绑了 tar 的实现libarchive;这应该与经典区别开来bsdtar。一些 BSD 变体确实libarchive用于它们的 tar 实现,例如 FreeBSD。

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'sbsdtar将读取非 tar 文件(例如 zip、iso9660、cpio),但经典的 bsdtar 不会。

现在我们已经libarchive摆脱了困境,主要归结为经典bsdtar.

您可以在此处自己查看联机帮助页:

在您最初的问题中,您询问了经典的优点是什么bsdtar,我不确定是否真的有。唯一真正重要的是您是否正在尝试编写需要在所有系统上运行的 shell 脚本;您需要确保您传递的内容tar在所有变体中实际上都有效。

GNUtar, libarchive's bsdtar, classic bsdtar,starBusyBox'star肯定是您大部分时间都会遇到的 tar 实现,但我确定还有其他实现(例如早期的 QNX)。libarchive/ GNUtar/star是最功能丰富,但在许多方面,他们早已从原来的标准偏差(可能为好)。


小智 22

BSDTAR 与 TAR 以及更多

这是一个好处!!

我将在这里讨论 5 个主题(并且偏离主题,但它也会涵盖您想要的内容):

  1. bsdtar 与 tar
  2. 稀疏文件与不
  3. 带有 btrfs 的厚文件和薄文件/LUN
  4. 没有 btrfs 的厚文件和薄文件/LUN
  5. 厚薄之间的差异以及它如何不仅仅适用于 luns

bsdtar比常规tar更好地处理稀疏文件

  • bsdtar 将获取所有零,并将它们元数据化
  • tar 实际上会处理每一个零

*示例: 假设一个 20 tb 的稀疏文件(称为 biglun)在整个 20 tb 的稀疏文件(biglun)中包含 10 兆数据...现在,由于这是一个稀疏文件,它只会在驱动器上占用 10 兆。

如何制作稀疏文件:

稀疏文件 - 如何制作 - 检测它 - 一切 稀疏文件就像“瘦” lun(如果您要将其用于 lun)。“厚” luns 将是不同的故事。

*回到主题:

  • 对 biglun 进行去皮会使 tar 经历所有 10 megs 以及散布在 lun 上的所有 ~20tb 更糟的零……我认为这需要一些时间,并且 tar 文件将非常大。另外——提取它——我从来没有提取过稀疏文件的 tar 文件,但它可能不漂亮;我可能在这里错了。

  • bsdtarring biglun 将只处理 10 meg 的数据,并为 ~20tb 的零制作小元数据。

益处?很多;上面只是写了一些。

它类似于 rsync vs cp

  • 此外,如果您 rsync 一个巨大的稀疏文件,它将表现得像 tar
  • 如果你 cp 一个巨大的文件,它会像 bsdtar 一样自动运行(你可以改变 cp 的行为来越过零,或者不越过零)

就个人而言,我喜欢将稀疏文件想象成薄 luns,而普通文件像厚 luns...

下一个主题是BTRFS瘦与厚 luns:

  • 对于像BTRFS这样的文件系统,瘦 luns 是稀疏文件(使用 truncate 制作它,就像在 wiki doc 中一样)。

     truncate -s <size in kilobytes> filename
    
    Run Code Online (Sandbox Code Playgroud)

    提示:bsdtar备份,用cp复制

  • 厚 luns 是具有 +C 属性的常规文件(+C 使其无 COW,写入时复制,以便所有写入基本上都保留在分配到的位置,并且在覆盖时不会对该文件进行新的写入或删除 - 研究COWBTRFS)。不要使用 truncate 制作文件,而是使用“fallocate -l”制作它

    fallocate -l <size in kilobytes> filename
    chattr +C filename
    
    Run Code Online (Sandbox Code Playgroud)

    提示:用 bsdtar 或 tar 备份,用 rsync 或 cp 复制

下一个主题是 EXT 薄与厚 luns:

  • 稀薄的月牙儿

    truncate -s <size in kilobytes> filename
    
    Run Code Online (Sandbox Code Playgroud)

    提示:bsdtar备份,用cp复制

  • 厚 LUN 是具有 +C 属性的常规文件(+C 使其成为非 COW,写入时复制,以便所有写入基本上都保留在其分配的位置,并且在覆盖时不会对该文件进行新的写入或删除 - 研究COWBTRFS)。不要使用 truncate 制作文件,而是使用“fallocate -l”制作它

    touch filename
    fallocate -l <size in kilobytes> filename
    
    Run Code Online (Sandbox Code Playgroud)

    提示:用 bsdtar 或 tar 备份,用 rsync 或 cp 复制

什么是厚文件和薄文件

  • 厚 luns/文件,将它们的数据从 0 填充到分配的大小,元数据假装 0 所在的位置。当你填写数据时,数据就会填满
  • 厚 LUN/文件:在开始时用 0 或其他任何东西(懒惰零或急切零)填充他们的数据 - 这些设置保留(或 ZFS 喜欢调用 refreservations)

此处的 VMWARE 文章描述了带有厚 lun/files 的懒惰与急切零:https : //communities.vmware.com/message/2199576

提示

请记住,thick 和thin 不仅适用于 luns,还可以用于文件、zfs 文件系统(共享/卷/luns),我确定其他事情(看看 zfs)。

  • 很好很彻底。欢迎来到本站... (2认同)
  • - 任何 tar 的稀疏:只需将 -S 传递给大多数 tar 实现,它们都支持它很长时间了。- 使用 rsync 进行稀疏:再次通过 --sparse,它可以工作。使用任何稀疏检测的缺点是该工具必须实际读取更多块,这可能会引入大量 CPU(尤其是在零/非零交替运行的情况下)。 (2认同)

小智 14

Ubuntu 包描述

与以前的 tar 实现相比,bsdtar 程序具有许多优点:

  • 图书馆。由于核心功能在一个库中,它可以被其他工具使用,例如 pkg_add。
  • 自动格式检测。Libarchive 在读取档案时会自动检测压缩(none/gzip/bzip2)和格式(old tar、ustar、gnutar、pax、cpio、iso9660、zip)。它对任何数据源执行此操作。
  • Pax 交换格式支持。这是旧的“ustar”tar 格式的 POSIX/SUSv3 扩展,可为每个条目添加任意扩展属性。做 GNU tar 格式所做的一切,只会更好。
  • 处理文件标志、ACL、任意路径名等。Pax 交换格式使用易于扩展的技术支持键/值属性。任意路径名、组名、用户名、文件大小是 POSIX 标准的一部分;libarchive 通过支持文件标志、ACL 和任意设备号来扩展它。
  • GNU tar 支持。Libarchive 读取大多数 GNU tar 档案。如果有需求,这可以进一步改进。