使用 tar 存档文件时控制 gzip 压缩率?

使用 tar 存档文件时控制 gzip 压缩率?

我有一个脚本,它使用以下命令定期备份目录“tar -czvf [名称] [目录]“但我的问题是,该脚本最近给服务器(Minecraft SMP)带来了很大的压力,并且在备份时往往会滞后玩家,最近这已经花费了将近 5 分钟。

所以我需要知道是否有办法在存档和备份文件的同时控制 GZip 压缩率?

我知道我可以先对文件进行 tar 处理,然后再使用不同的压缩率对它们进行 GZip 压缩,但这样做不行,因为它会使用当前服务器时间来命名文件,而这个时间有时会在命令之间发生变化。

有什么见解吗?提前致谢。

答案1

分两步进行可能更方便。如果您需要时间戳,请先存储它:

filename=/what/ever/backup-$(date +%Y%m%d%H%M%S).tar
tar cvf $filename ...
gzip -1 $filename

我还建议你看看niceionice。它们可以帮助您减轻备份对服务器响应的影响。

答案2

可能有点晚了,但这可以帮助其他人......

如果您定期备份类似数据,则应考虑先只制作一份副本(不压缩,因此基本上只制作一个 tar 文件),然后压缩更多备份副本。对于 Minecraft 服务器,您可能每天都会制作几个备份。您可以安排使用强大的算法(例如每天左右)将这些备份压缩在一起,并在服务器上没有太多人时运行它。延迟会更长,但重点是生成的存档会非常小(因为大多数世界文件在备份之间根本不会改变)。如果您在某些核心上有一些备用电源(这很有可能),压缩将使用它(并导致服务器其余部分的延迟更少),可能提高绩效在备份期间。

答案3

我经常做这样的事情,所以当 tar 过程完成时,我不需要记得进行 gzip 操作,因为它都在一行上完成:

tar cvf - $nameOfDirOrFileToBeBackedUp | gzip -$compressionLevel > $backupLocation/$nameOfDirOrFileToBeBackedUp.tar.gz

此方法适用于不支持 gzip 的旧版本 tar(Solaris 10 仍然不支持)。

相关内容