我一直使用 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
:
libarchive
顾名思义,它是一个库,与经典bsdtar
和GNUtar
以这种方式不同。libarchive
无法读取一些较旧的晦涩的 GNU tar 变体,最值得注意的是 base64 中某些标头的编码,因此 tar 文件将是 7 位干净的 ASCII(这是 1.13.6-1.13.11 的情况,并在 1.13.12 中更改,该代码仅在 tar 中正式发布了 2 周)libarchive
'sbsdtar
将读取非 tar 文件(例如 zip、iso9660、cpio),但经典的 bsdtar 不会。现在我们已经libarchive
摆脱了困境,主要归结为经典bsdtar
.
您可以在此处自己查看联机帮助页:
在您最初的问题中,您询问了经典的优点是什么bsdtar
,我不确定是否真的有。唯一真正重要的是您是否正在尝试编写需要在所有系统上运行的 shell 脚本;您需要确保您传递的内容tar
在所有变体中实际上都有效。
GNUtar
, libarchive
's bsdtar
, classic bsdtar
,star
和BusyBox
'star
肯定是您大部分时间都会遇到的 tar 实现,但我确定还有其他实现(例如早期的 QNX)。libarchive
/ GNUtar
/star
是最功能丰富,但在许多方面,他们早已从原来的标准偏差(可能为好)。
小智 22
这是一个好处!!
我将在这里讨论 5 个主题(并且偏离主题,但它也会涵盖您想要的内容):
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
就个人而言,我喜欢将稀疏文件想象成薄 luns,而普通文件像厚 luns...
对于像BTRFS这样的文件系统,瘦 luns 是稀疏文件(使用 truncate 制作它,就像在 wiki doc 中一样)。
truncate -s <size in kilobytes> filename
Run Code Online (Sandbox Code Playgroud)
提示:用bsdtar备份,用cp复制
厚 luns 是具有 +C 属性的常规文件(+C 使其无 COW,写入时复制,以便所有写入基本上都保留在分配到的位置,并且在覆盖时不会对该文件进行新的写入或删除 - 研究COW和BTRFS)。不要使用 truncate 制作文件,而是使用“fallocate -l”制作它
fallocate -l <size in kilobytes> filename
chattr +C filename
Run Code Online (Sandbox Code Playgroud)
提示:用 bsdtar 或 tar 备份,用 rsync 或 cp 复制
稀薄的月牙儿
truncate -s <size in kilobytes> filename
Run Code Online (Sandbox Code Playgroud)
提示:用bsdtar备份,用cp复制
厚 LUN 是具有 +C 属性的常规文件(+C 使其成为非 COW,写入时复制,以便所有写入基本上都保留在其分配的位置,并且在覆盖时不会对该文件进行新的写入或删除 - 研究COW和BTRFS)。不要使用 truncate 制作文件,而是使用“fallocate -l”制作它
touch filename
fallocate -l <size in kilobytes> filename
Run Code Online (Sandbox Code Playgroud)
提示:用 bsdtar 或 tar 备份,用 rsync 或 cp 复制
此处的 VMWARE 文章描述了带有厚 lun/files 的懒惰与急切零:https : //communities.vmware.com/message/2199576
请记住,thick 和thin 不仅适用于 luns,还可以用于文件、zfs 文件系统(共享/卷/luns),我确定其他事情(看看 zfs)。
小智 14
与以前的 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 档案。如果有需求,这可以进一步改进。