我一直使用GNU tar
。但是,我见过的所有GNU / Linux发行版都包含bsdtar
在其存储库中。我什至看到它在某些IIRC中默认安装。我肯定知道Arch GNU / Linux将它作为basedevel
(也许是base
,但我不确定)的一部分,正如我在PKGBUILD中所看到的那样。
您为什么要bsdtar
代替GNU 使用tar
?有什么优势?
请注意,我是问BSD和GNU / Linux用户区之间的主要区别是什么?。
我一直使用GNU tar
。但是,我见过的所有GNU / Linux发行版都包含bsdtar
在其存储库中。我什至看到它在某些IIRC中默认安装。我肯定知道Arch GNU / Linux将它作为basedevel
(也许是base
,但我不确定)的一部分,正如我在PKGBUILD中所看到的那样。
您为什么要bsdtar
代替GNU 使用tar
?有什么优势?
请注意,我是问BSD和GNU / Linux用户区之间的主要区别是什么?。
Answers:
Ubuntu bsdtar
实际上是与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
的bsdtar
会读非tar文件(例如,zip,ISO9660,的cpio),但是经典的bsdtar不会。既然我们已经走开libarchive
了,它基本上可以归结为classic所支持的东西bsdtar
。
您可以在这里自己查看联机帮助页:
在您最初的问题中,您询问了classic的优点是什么bsdtar
,我不确定是否真的有什么优点。唯一真正重要的是,如果您正在尝试编写需要在所有系统上运行的shell脚本;您需要确保传递给您的内容tar
在所有变体中均有效。
GNUtar
,libarchive
的bsdtar
,古典的bsdtar
,star
和BusyBox
的tar
肯定焦油实现,你会碰到的大部分时间,但我敢肯定有其他人在那里(早期QNX为例)。libarchive
/ GNUtar
/ star
是最功能丰富,但在许多方面,他们早已从原来的标准偏差(可能为好)。
这是一个好处!!
我将在这里进入5个主题(并远离主题,但它将涵盖您想要的内容):
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
就个人而言,我喜欢想象稀疏文件(如细luns)和常规文件(如粗luns)...
对于像BTRFS这样的文件系统,瘦lun是稀疏文件(使用wiki文档中的truncate使其稀疏)。
truncate -s <size in kilobytes> filename
提示:使用bsdtar备份,使用cp复制
厚lun是具有+ C属性的常规文件(+ C,因此它不会成为COW,在写入时进行复制,因此所有写入基本上都停留在分配给它的位置,并且当该文件被覆盖时,不会对该文件进行新的写入或删除-研究COW和BTRFS)。而不是使用truncate来制作文件,而应使用“ fallocate -l”来制作文件。
fallocate -l <size in kilobytes> filename
chattr +C filename
提示:使用bsdtar或tar备份,使用rsync或cp复制
稀疏的lun
truncate -s <size in kilobytes> filename
提示:使用bsdtar备份,使用cp复制
厚lun是具有+ C属性的常规文件(+ C,因此它不显示COW,在写入时进行复制,因此所有写入基本上都停留在其分配的位置,并且当有覆盖时该文件不会发生新写入或删除-研究COW和BTRFS)。而不是使用truncate来制作文件,而应使用“ fallocate -l”来制作文件。
touch filename
fallocate -l <size in kilobytes> filename
提示:使用bsdtar或tar备份,使用rsync或cp复制
VMWARE文章在此描述了带有大量luns /文件的懒惰vs渴望零:https : //communities.vmware.com/message/2199576
请记住,thick和thin不仅适用于lun,它还可以用于文件,zfs文件系统(共享/卷/ luns),我敢肯定还有其他事情(只看zfs)。
从Ubuntu软件包描述(http://packages.ubuntu.com/de/lucid/bsdtar)
“与以前的tar实现相比,bsdtar程序具有许多优点:
以下内容是基于阅读而非经验的-我只是从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。我希望至少将本机实用程序用于分区克隆和硬恢复备份。但是,如果不能验证转储的正确性,那么我就不愿意创建一个转储。