![Gzip 解压缩需要多长时间?](https://linux22.com/image/1105637/Gzip%20%E8%A7%A3%E5%8E%8B%E7%BC%A9%E9%9C%80%E8%A6%81%E5%A4%9A%E9%95%BF%E6%97%B6%E9%97%B4%EF%BC%9F.png)
我想备份我托管的整个服务器。所以我使用 dd 和 gzip 来缩小文件大小。磁盘有 500GB,但使用量不到 5%。我设法dd
在 8 小时内将整个分区压缩成一个 200 GB 的 gzip 文件,通过互联网传到我家。现在我正尝试将文件解压到新磁盘上的分区中。这已经花了 8 个多小时,当然我无法确定进度。
- 相对于压缩,解压缩需要多长时间?
- 我认为本地处理器是决定需要多长时间的关键因素?(而不是网络带宽)
- 有没有办法看到进展?
下次我能用更好的方法做得更好吗?
答案1
下面是我看到的一篇文章,其中有一些关于 gzip 和一些其他压缩算法的基准测试:http://tukaani.org/lzma/benchmarks.html。我认为解压时间会随 CPU 速度而变化。另外,如果你查看测试,似乎解压几乎总是比压缩快。
编辑:
在回答您关于备份服务器的其他方法的最新问题时,我发现了这篇讨论各种备份方法的文章:http://www.techrepublic.com/blog/10things/10-outstanding-linux-backup-utilities/895。我不确定您对服务器有什么访问权限,但如果它是一个常见的商业主机,您也许可以向技术支持询问应该如何操作。
答案2
您不会想dd
这样(滥用)使用。复制 95% 未使用的磁盘会浪费时间,如果您当时以读/写方式安装它,您将获得损坏的映像。如果您想备份系统,最好确保关闭所有可能写入磁盘的服务,然后使用tar
。
答案3
查看正在运行的 gzip 进程的进度的最简单方法是查看写入文件的文件大小,watch
如果您想要实时更新,则可能需要结合使用。如果您正在处理分区,这当然不太容易实现。
估计进度的另一种方法是使用iotop
。iotop
它将向您显示系统上每个进程将数据写入磁盘的速度,您的gzip
进程可能会显示在顶部并为您提供每秒处理的数据量。然后只需将 MB/秒乘以进程运行的时间(参见ps auxw
START 列),您就会大致知道需要多长时间。
至于进一步的备份运行:rsync
当您想要将数据从网络上的一台计算机复制到另一台计算机时使用。rsync
处理压缩和增量,因此您只需传输尚未拥有的数据,这使得定期更新非常快。rsync 还具有--backup
和--backup-dir
选项,可用于创建不仅仅是副本,还可以创建跟踪已删除文件的适当备份。
执行磁盘映像时,磁盘映像partimage
是 的一个很好的替代方案dd
,因为它与 不同,dd
partimage
它具有文件系统感知能力,并且只会复制文件系统实际使用的块,而不是空的未使用块,因此它能够在大多数空的文件系统上创建小得多的磁盘映像。但它也不是一个好的网络备份工具,请改用rsync
。
答案4
通常,使用 gzip 解压应该比压缩快。我怀疑这里的问题是目标磁盘比压缩磁盘慢:或者也许您正在读取和写入同一个物理磁盘,这导致了大量寻道。
其他答案是正确的,通常最好备份文件,而不是原始设备。
为了查看进度,我将安装pv
然后这样说:
zcat /tmp/myimg.gz |pv -s500G > /tmp/myimg