越来越多的tar存档使用xz基于 LZMA2的格式进行压缩,而不是传统的bzip2(bz2)压缩。事实上,kernel.org于2013 年 12 月 27日晚发布了“再见 bzip2 ”公告,表明内核源代码将从此时起以 tar.gz 和 tar.xz 格式发布 - 并在网站主页上发布直接提供的是在tar.xz.
是否有任何具体原因可以解释为什么会发生这种情况以及gzip在这种情况下的相关性是什么?
多年来,bzip2 一直是强大压缩的事实上的标准。bzip2到目前为止,我自己已经输入了数千次命令,这让我想知道 - bzip 或 bzip1 发生了什么?谷歌似乎没有告诉我太多关于它的信息,听起来这可能是一堂有趣的历史课。
我每天生成大约 200 GB 的日志数据,分布在大约 150 个不同的日志文件中。
我有一个脚本将文件移动到一个临时位置,并在临时目录上执行 tar-bz2。
我得到了很好的结果,因为 200 GB 的日志被压缩到大约 12-15 GB。
问题是压缩文件需要很长时间。该cron的工作上午2:30每天运行,并继续运行,直到5:00-6:00 PM。
有没有办法提高压缩速度,更快地完成工作?有任何想法吗?
不要担心其他进程和所有,压缩发生的位置在NAS 上,我可以在专用VM上运行挂载 NAS并从那里运行压缩脚本。
以下是top的输出供参考:
top - 15:53:50 up 1093 days, 6:36, 1 user, load average: 1.00, 1.05, 1.07
Tasks: 101 total, 3 running, 98 sleeping, 0 stopped, 0 zombie
Cpu(s): 25.1%us, 0.7%sy, 0.0%ni, 74.1%id, 0.0%wa, 0.0%hi, 0.1%si, 0.1%st
Mem: 8388608k total, 8334844k used, 53764k free, 9800k buffers
Swap: 12550136k total, 488k used, 12549648k free, 4936168k …Run Code Online (Sandbox Code Playgroud) 我一直在使用 tar 及其“--use-compress-prog=pbzip2”功能来存档我的文件,然后用 pbzip2 压缩它们以获得“*.tar.bz”存档。
之后我用 pbzip2 的“-t”开关检查了生成的文件,它通过了测试。然而,出乎意料的是,我在尝试提取存档时遇到了“文件不完整”或其他完整性错误!
是不是因为 tar 文件可能有问题,但在 pbzip2 压缩时没有问题?如果是这样,有没有办法检查 tar 文件本身?如果没有,这可能是什么其他问题?另外,有没有办法从有错误的 tar 文件中恢复数据?
恐怕我在这个过程中可能已经丢失了一些重要的数据......
关键是,我想知道一种在创建档案后测试其完整性的方法。
假设我foo.tbz2在目录中有一个文件。我想tar从存档中提取文件,但到不同的目录。似乎bunzip2只会将存档解压缩到与存档相同的目录。
这有效,但我想知道是否有更好的方法:
cd /another/directory
bunzip2 -k /original/directory/foo.tbz2
Run Code Online (Sandbox Code Playgroud) 我正在使用 bzip2 压缩文件,该过程需要超过 100% 的 cpu。有没有办法以最小的 CPU 百分比运行 bzip2。
我试图确定使用bzip2压缩需要 100% 可重现的文件是否存在任何潜在问题。具体做法是:罐的元数据(名称/索引节点,的lastmod日期等)或任何其他原因相同的文件内容,以产生不同的校验和对所得.bz2的存档?
例如,除非使用gzip,否则默认情况下不是确定性的-n。
到目前为止,我的粗略测试表明,在给定相同的输入数据(无论元数据、平台、文件系统等)的情况下,bzip2 确实始终如一地生成相同的文件,但如果有更多轶事证据就更好了。
我正在寻找具有任意大字典(和“块大小”)的压缩工具。让我通过例子来解释。
首先让我们创建 32MB 的随机数据,然后将其连接到自身以制作长度为 64MB 的两倍长度的文件。
head -c32M /dev/urandom > test32.bin
cat test32.bin test32.bin > test64.bin
Run Code Online (Sandbox Code Playgroud)
当然test32.bin不可压缩,因为它是随机的,但前半部分和后半部分test64.bin是一样的,所以应该可以压缩大约 50%。
首先让我们尝试一些标准工具。test64.bin 的大小正好是 67108864。
我们从中了解到 gzip 和 bzip2 永远不能压缩这个文件。然而,使用足够大的字典 xz 和 zstd 可以压缩文件,在这种情况下, zstd 做得最好。
但是,现在尝试:
head -c150M /dev/urandom > test150.bin
cat test150.bin test150.bin > test300.bin
Run Code Online (Sandbox Code Playgroud)
test300.bin 的大小正好是 314572800。让我们在最高设置下再次尝试最佳压缩算法。
在这种情况下,两个工具都不能压缩文件。
有没有一个工具可以有任意大的字典大小,所以它可以压缩像 test300.bin 这样的文件?
感谢评论和回答,结果证明 zstd 和 …
所以如果我输入命令
$ gzip --version | head -n1
Run Code Online (Sandbox Code Playgroud)
一切都按预期进行。但是如果我用 bzip2 尝试同样的方法:
$ bzip2 --version | head -n1
Run Code Online (Sandbox Code Playgroud)
我有很多行,我必须按Ctrl-C终止。
这里发生了什么?
编辑:
被打印的行
$ bzip2 --version | head -n1
bzip2, a block-sorting file compressor. Version 1.0.6, 6-Sept-2010.
Copyright (C) 1996-2010 by Julian Seward.
This program is free software; you can redistribute it and/or modify
it under the terms set out in the LICENSE file, which is included
in the bzip2-1.0.6 source distribution.
This program is distributed in the hope …Run Code Online (Sandbox Code Playgroud) 我有以下存档目录:
itunes20140618.tbz
Run Code Online (Sandbox Code Playgroud)
我想从中提取单个文件,称为:
itunes20140618/video
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
到目前为止,我正在做
$ bzip2 -d /tmp/itunes20140618.tbz
Run Code Online (Sandbox Code Playgroud)
但它似乎为所有内容创建了一个 tar 目录。我将如何仅提取单个视频文件?
目前,如果我通过 tar 提取一个文件大约需要 1 分钟,然后在它完成读取 tar 存档时“挂起”另外 20 分钟。任何想法如何改善这一点?
我有一个很大的bzip2压缩文件,我需要检查它的解压缩大小而不实际解压缩它(类似于gzip -l file.gz或xz -l file.xz)。这如何使用bzip2?
我一直试图在我的 linux 服务器上节省空间,我有一个文件夹,在子文件夹中包含 22GB 的图像。
所以我决定压缩它们。
首先我使用焦油:
tar -zcf folder.tar folder
Run Code Online (Sandbox Code Playgroud)
然后gzip
gzip folder
Run Code Online (Sandbox Code Playgroud)
最后,为了以防万一,bzip2
bzip2 folder
Run Code Online (Sandbox Code Playgroud)
毕竟,所有folder.tar.gz.bzip2s的总数仍然是 22GB!使用更精细的精度,节省 1% 的空间!
我在这里做错了吗?我希望能节省 1% 以上的费用!
我还能如何压缩文件?
我正在尝试查找具有给定扩展名的所有文件,但出现此错误:
tar: Cannot update compressed archives
Try 'tar --help' or 'tar --usage' for more information.
tar: Cannot update compressed archives
Try 'tar --help' or 'tar --usage' for more information.
tar: Cannot update compressed archives
Try 'tar --help' or 'tar --usage' for more information.
tar: Cannot update compressed archives
Try 'tar --help' or 'tar --usage' for more information.
tar: Cannot update compressed archives
Try 'tar --help' or 'tar --usage' for more information.
tar: Cannot update compressed archives
Try 'tar --help' or …Run Code Online (Sandbox Code Playgroud) bzip2 ×13
tar ×5
compression ×4
gzip ×4
history ×2
shell-script ×2
xz ×2
checksum ×1
cpu ×1
directory ×1
optimization ×1
ubuntu ×1
zstd ×1