高级备份脚本

高级备份脚本

我目前正在为我的 minecraft 服务器编写一个高级启动脚本。一切都按我想要的方式进行。但问题是备份。我为它创建了一个函数。它运行良好,完全按照我想要的方式运行。但由于服务器在备份期间必须关闭,而且备份本身需要很长时间(我的意思是几个小时),所以我需要加快备份速度!

我当前的备份工作方式如下:

tar -cjvf $BACKUP_PATH/$filename $MINECRAFT_PATH

正如我所说,这需要很长时间!

所以我的想法是,只制作一个 tar 文件而不进行压缩,然后启动服务器,然后压缩档案。

tar -cvf $BACKUP_PATH/$filename $MINECRAFT_PATH
START_SERVER
bzip2 -9 $BACKUP_PATH/$filename
rm $BACKUP_PATH/$filename

这应该会更快。但后来我有了一个主意。这就是我需要你的地方。

首先,我想修改实际备份,使其显示已备份的内容以及完成备份大约需要多长时间。因此,tar 的输出将被抑制,命令将在后台运行,并且(while)循环(等待命令完成)将计算百分比并计算剩余时间的估计值。

为此,我首先要调用以du获取所有正在压缩的文件的大小。这将保存在一个变量中。i 将获取当前时间戳。也保存在一个变量中。此时循环将开始。然后在循环中计算百分比和剩余时间(简单...),并将其打印在两行中,并且始终会更新。这是我的主要问题。如果有人能帮助我解决循环问题,我会非常高兴!

一些基本代码:

tar -cf $BACKUP_PATH/$filename $MINECRAFT_PATH &

backupsize=$(du -bs $MINECRAFT_PATH)
starttimestamp=$(date +%s)

# Here is the loop (how do I stay here while the tar command is still running?
# And how do i update the two lines with the newly created numbers?

START_SERVER

bzip2 -9 $BACKUP_PATH/$filename
rm $BACKUP_PATH/$filename

如果您愿意帮忙,您可以帮助我让这种东西也适用于命令bzip。如果不可能,我就不管了!(bzip接受与相同的标志zip

答案1

你可以使用rsync创建您的备份副本$MINECRAFT_PATH。这将仅有的复制自上次运行以来已更改的文件部分,因此速度应该相对较快。(除了第一次运行,因为那时它必须复制所有内容)一旦 rsync 完成,您就可以重新启动服务器。然后您可以使用它来制作 的tar备份副本的 tarball $MINECRAFT_PATH

如果出现问题,在机器上保留一份备份也是很好的。

关于压缩,我建议使用标准gzip压缩,而不是bzip2。当我做了测试压缩 OS 转储时,gzip文件大小约为未压缩文件的 40%。压缩速度为 11.5-17.7 MB/s。当我使用时bzip2,压缩文件大小为未压缩文件的 32-38%,但压缩速度降至 5.7-7.3 MB/s。如果您有多核机器,您可以尝试pbzip2使用多个处理器来加快速度。但它可能仍然比慢gzip。此外,使用外部解压缩程序会使恢复备份变得复杂。

答案2

  1. 操纵导出的 BZIP2 变量。默认情况下,bzip2 使用 -3 或 -4 压缩比。通过设置导出的 BZIP2 变量,您可以告诉从 tar(tar -j)启动的 bzip2 有关压缩比的信息。请参阅第页http://tukaani.org/lzma/benchmarks.html
  2. 尝试不同的比率来优化速度。无压缩并不是最好的速度,因为您有硬件速度限制。最好的压缩也很慢,因为利用了 CPU。这就是为什么 -3 或 -4 比率是默认值,但您应该进行实验。备份后,您可以重新打包存档:

    bzip2 -d archive_after_repack.bz2 但是使用 xz 归档器的压缩率更好(并且在时间上更慢)。

  3. 使用 rsync 并不是最好的主意,因为您必须有第二个完整的数据副本。

  4. 尝试混合差异和完整备份。您可以使用选项 --newer=DATE-OR-FILE (man tar)
  5. 使用带有 --checkpoint 或 --checkpoint-action 的 tar,这可以帮助您取得进展。您可以计算并得到估计值。
  6. 如果可能的话,使用文件系统快照。你可以使用 lvm 与 ext3、ext4、jfs 或 xfs 结合使用。如果可以的话,你可以使用 zfs 支持,但这不受官方支持。快照制作非常快。你不必停止服务。快照之后,你就拥有了冻结的紧凑文件系统,只要需要,你就可以备份它。备份之后,你可以删除快照。

相关内容