bsdtar和GNU tar有什么区别?


46

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

您为什么要bsdtar代替GNU 使用tar?有什么优势?

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


Answers:


29

Ubuntu bsdtar实际上是与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. libarchivebsdtar会读非tar文件(例如,zip,ISO9660,的cpio),但是经典的bsdtar不会。

既然我们已经走开libarchive了,它基本上可以归结为classic所支持的东西bsdtar

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

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

GNUtarlibarchivebsdtar,古典的bsdtarstarBusyBoxtar肯定焦油实现,你会碰到的大部分时间,但我敢肯定有其他人在那里(早期QNX为例)。libarchive/ GNUtar/ star是最功能丰富,但在许多方面,他们早已从原来的标准偏差(可能为好)。


15

BSDTAR vs TAR以及更多

这是一个好处!!

我将在这里进入5个主题(并远离主题,但它将涵盖您想要的内容):

  1. bsdtar与tar
  2. 稀疏文件与否
  3. 带有btrfs的厚文件/薄文件/ lun
  4. 没有btrfs的厚文件和薄文件/ lun
  5. 粗细之间的区别,以及它不适用于lun

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

  • bsdtar将使用所有零,并仅对它们进行元数据处理
  • tar实际上将处理所有零

*示例: 假设一个20 TB的稀疏文件(称为biglun)在整个20 TB的稀疏文件(biglun)中具有10兆的数据...现在,由于这是一个稀疏文件,因此在驱动器上仅占用10兆的数据。

如何制作稀疏文件:

稀疏文件-如何制作-检测它-一切 稀疏文件都像“薄” luns(如果要用于lun)。“厚”的伦会是另外一个故事。

*返回主题:

  • 对biglun进行皮重处理将使tar遍历10个兆兆,以及整个lun上散布的所有〜20tb的零差……我想这将需要一些时间,并且tar文件会很大。另外-提取它-我从未提取稀疏文件的tar文件,但是它可能并不漂亮。我可能在这里错了。

  • bsdtarring biglun将只处理10兆的数据,并为〜20tb的零生成较小的元数据。

效益?他们很多;我只是在上面写了一些。

类似于rsync vs cp

  • 另外,如果您同步一个巨大的稀疏文件,它将表现为tar
  • 如果cp一个巨型文件,它将自动像bsdtar一样运行(您可以更改cp的行为以使其超过零,也可以不超过零)

就个人而言,我喜欢想象稀疏文件(如细luns)和常规文件(如粗luns)...

下一个主题是BTRFS薄型vs厚型lun:

  • 对于像BTRFS这样的文件系统,瘦lun是稀疏文件(使用wiki文档中的truncate使其稀疏)。

     truncate -s <size in kilobytes> filename
    

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

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

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

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

下一个主题是EXT薄型vs厚型lun:

  • 稀疏的lun

    truncate -s <size in kilobytes> filename
    

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

  • 厚lun是具有+ C属性的常规文件(+ C,因此它不显示COW,在写入时进行复制,因此所有写入基本上都停留在其分配的位置,并且当有覆盖时该文件不会发生新写入或删除-研究COWBTRFS)。而不是使用truncate来制作文件,而应使用“ fallocate -l”来制作文件。

    touch filename
    fallocate -l <size in kilobytes> filename
    

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

什么是厚文件还是薄文件

  • 厚lun /文件,将其数据从0填充到分配的大小,元数据假装为0。当您填充数据时,数据将填充
  • 较厚的lun /文件:在开始时以0或其他值(惰性零或渴望零)填充其数据-这些设置保留(或作为ZFS喜欢调用refreservations)

VMWARE文章在此描述了带有大量luns /文件的懒惰vs渴望零:https : //communities.vmware.com/message/2199576

小费

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


1
尼斯和彻底。欢迎来到网站...
eyoung100 2014年

1
-稀疏包含任何tar:只需将-S传递给大多数tar实现,他们就已经很长时间了。-稀疏使用rsync:再次传递--sparse,它可以正常工作。使用任何稀疏检测的缺点是该工具必须实际读取更多的块,这可能会引入大量CPU(特别是在零次/非零次交替运行的情况下)。
robbat2

即使gnu tar支持稀疏标志,使用bsdtar还是更好,因为bsdtar知道如何跳过稀疏漏洞而不进行处理(例如,如果您有1 TB的稀疏文件,仅包含1k的数据,bsdtar将处理1k的。数据的GNU tar将处理1TB。
moveaway00

13

从Ubuntu软件包描述(http://packages.ubuntu.com/de/lucid/bsdtar

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

  • 图书馆。由于核心功能在库中,因此可以由其他工具(例如pkg_add)使用。
  • 自动格式检测。在读取档案时,Libarchive自动检测压缩率(无/ 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档案。如果有需求,可以进一步改善。”

1

以下内容是基于阅读而非经验的-我只是从Freebsd开始,所以我几乎没有真正的经验(我主要来自Linux)。如果我错过了重要的事情并且在这里说的是垃圾,我深表歉意(并谦虚地要求纠正)。

从我对手册页的阅读(最近在http://www.freebsd.org/cgi/man.cgi?query=tar&sektion=1上引用的内容)来看,Freebsd tar缺少(-d,--diff ,--compare)功能。这并不奇怪,因为Freebsd转储/还原的作者似乎也没有提供类似的信息。

我不确定Gnu tar是否会像据说的Freebsd tar那样合并所有UFS元数据,这是一个重要的问题。但是就我的口味而言,在存储输出文件的MD5总和之前,我永远都不会考虑完成转储,然后将转储文件与我刚刚转储的数据进行比较。各种问题可能导致转储的数据与磁盘上的数据不同。(不仅是文件更改,还包括磁盘错误,内存错误,机器故障等。所有这些实际上都发生在我身上。)

我个人认为,这使Gnu tar成为我迄今为止发现的在Freebsd股票系统上创建真实备份的唯一选择。

我非常想学习其他方式,FWIW。我希望至少将本机实用程序用于分区克隆和硬恢复备份。但是,如果不能验证转储的正确性,那么我就不愿意创建一个转储。


1
  • bsdtar可以使用以下@archive语法读取和压缩来自其他归档文件的tar成员

  • GNU tar可以--delete选择-尽管最近我发现它可能损坏存档。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.