我一直使用 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
:
libarchive
从定义上讲,它是一个图书馆,与古典图书馆bsdtar
不同GNUtar
。libarchive
无法读取一些旧的晦涩的 GNU tar 变体,最值得注意的是一些 headers 以 base64 进行编码,因此 tar 文件将是 7 位干净的 ASCII(这是 1.13.6-1.13.11 的情况,并在 1.13.12 中进行了更改,该代码仅在 tar 中正式发布了 2 周)libarchive
'sbsdtar
将读取非 tar 文件(例如 zip、iso9660、cpio),但经典的 bsdtar 不会。
现在我们已经libarchive
摆脱了困境,它主要归结为 Classic 中支持的内容bsdtar
。
您可以在这里查看联机帮助页:
- GNU 焦油(1)
- FreeBSD tar(1)- 基于libarchive
- NetBSD tar(1)
- OpenBSD tar(1)
- 标准/希利焦油(1)- 最古老的免费 tar 实现,没有任何其他的继承
- 忙碌盒 (1)- BusyBox 的迷你 tar 实现,在嵌入式系统中很常见
在您最初的问题中,您问 classic 的优点是什么bsdtar
,我不确定是否真的有。唯一真正重要的是,如果您正在尝试编写需要在所有系统上运行的 shell 脚本;您需要确保传递给的内容tar
在所有变体中实际上都是有效的。
GNUtar
、libarchive
's bsdtar
、 classicbsdtar
和's当然是您大多数时候会遇到的 tar 实现,但我确信还有其他实现(例如早期的 QNX)star
。//是功能最丰富的,但在许多方面它们早已偏离了原始标准(可能是为了更好)。BusyBox
tar
libarchive
GNUtar
star
答案2
BSDTAR 与 TAR 以及更多内容
这里还有一个好处!!
我将在这里讨论 5 个主题(虽然偏离了主题,但它也会涵盖您想要的内容):
- bsdtar 与 tar
- 稀疏文件与非稀疏文件
- 使用 btrfs 的厚文件和薄文件/lun
- 不带 btrfs 的厚文件和薄文件/lun
- 厚和薄之间的区别以及它如何不仅仅适用于 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
与以前的 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
@archive
bsdtar 可以使用以下语法读取和 tar 来自其他档案的成员GNU tar 有这个
--delete
选项——尽管最近我发现它可能会损坏存档。