bsdtar 和 GNU tar 有什么区别?

bsdtar 和 GNU tar 有什么区别?

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

为什么你想使用bsdtar而不是 GNU tar?有什么优点?

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

答案1

Ubuntu实际上是与;bsdtar捆绑在一起的 tar 实现。libarchive这应该与古典的有所区别bsdtar。某些 BSD 变体确实使用libarchive其 tar 实现,例如 FreeBSD。

GNUtar确实支持其他焦油变体和自动压缩检测。

作为视觉化粘贴了 Ubuntu 的简介,其中有一些特定于的内容libarchive

  1. libarchive从定义上讲,它是一个图书馆,与古典图书馆bsdtar不同GNUtar
  2. libarchive无法读取一些旧的晦涩的 GNU tar 变体,最值得注意的是一些 headers 以 base64 进行编码,因此 tar 文件将是 7 位干净的 ASCII(这是 1.13.6-1.13.11 的情况,并在 1.13.12 中进行了更改,该代码仅在 tar 中正式发布了 2 周)
  3. libarchive'sbsdtar将读取非 tar 文件(例如 zip、iso9660、cpio),但经典的 bsdtar 不会。

现在我们已经libarchive摆脱了困境,它主要归结为 Classic 中支持的内容bsdtar

您可以在这里查看联机帮助页:

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

GNUtarlibarchive's bsdtar、 classicbsdtar和's当然是您大多数时候会遇到的 tar 实现,但我确信还有其他实现(例如早期的 QNX)star。//是功能最丰富的,但在许多方面它们早已偏离了原始标准(可能是为了更好)。BusyBoxtarlibarchiveGNUtarstar

答案2

BSDTAR 与 TAR 以及更多内容

这里还有一个好处!!

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

  1. bsdtar 与 tar
  2. 稀疏文件与非稀疏文件
  3. 使用 btrfs 的厚文件和薄文件/lun
  4. 不带 btrfs 的厚文件和薄文件/lun
  5. 厚和薄之间的区别以及它如何不仅仅适用于 lun

bsdtar处理稀疏文件比常规文件更好柏油

  • bsdtar 将获取所有零并仅对它们进行元数据处理
  • tar 实际上会处理每个零

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

如何制作稀疏文件:

稀疏文件 - 如何制作 - 检测它 - 一切 稀疏文件就像“薄”lun(如果您将其用作 lun)。 “厚”的伦子则不同。

*回到主题:

  • 调高 biglun 的皮重将使 tar 遍历所有 10 兆字节以及散布在 lun 上的所有约 20tb 更差的零...我认为这将需要一些时间,并且 tar 文件将相当大。另外——提取它——我从来没有提取过稀疏文件的 tar 文件,但它可能不太漂亮;我在这里可能是错的。

  • bsdtarring biglun 将仅处理 10 兆数据,并为约 20 TB 的零创建小型元数据。

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

它类似于 rsync 与 cp

  • 另外,如果你 rsync 一个巨大的稀疏文件,它的行为就像 tar
  • 如果您 cp 一个巨大的文件,它会自动像 bsdtar 一样运行(您可以更改 cp 的 ss 行为以覆盖零,或不覆盖零)

就我个人而言,我喜欢想象稀疏文件(如thin lun)和常规文件(如厚lun)......

下一个主题是BTRFS薄 Lun 与厚 Lun:

  • 对于像这样的文件系统BTRFS,thin lun 是稀疏文件(使用 truncate 进行处理,如 wiki 文档中所示)。

     truncate -s <size in kilobytes> filename
    

    提示:备份与bsdtar, 复制与CP

  • 厚luns是具有+C属性的常规文件(+C使其成为非COW,写入时复制,以便所有写入基本上保留在其分配的位置,并且当存在覆盖时该文件不会发生新的写入或删除 - 研究奶牛BTRFS)。不要用截断来制作文件,而是用“fallocate -l ”来制作文件

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

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

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

  • 稀疏的薄伦

    truncate -s <size in kilobytes> filename
    

    提示:备份与bsdtar, 复制与CP

  • 厚luns是具有+C属性的常规文件(+C使其成为非COW,写入时复制,因此所有写入基本上都保留在其分配的位置,并且当有覆盖时该文件不会发生新的写入或删除 - 研究奶牛BTRFS)。不要用截断来制作文件,而是用“fallocate -l ”来制作文件

    touch filename
    fallocate -l <size in kilobytes> filename
    

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

什么是厚文件与薄文件

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

VMWARE 文章此处描述了厚 LUN/文件的惰性归零与急切归零:https://communities.vmware.com/message/2199576

提示

请记住,厚和薄不仅仅适用于 lun,它还可以适用于文件、zfs 文件系统(共享/卷/luns),而且我确信其他事情(只需看看 zfs)。

答案3

Ubuntu 软件包描述:

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

  • 图书馆。由于核心功能位于库中,因此它可以被其他工具使用,例如 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 档案。如果有需求,可以进一步改进。

答案4

  • @archivebsdtar 可以使用以下语法读取和 tar 来自其他档案的成员

  • GNU tar 有这个--delete选项——尽管最近我发现它可能会损坏存档。

相关内容