我有一台用于科学计算的服务器,每个用户都有一个虚拟机(Linux 或 Windows)供他们使用。问题是当许多用户使用该服务器时,这些计算生成的报告会占用大量存储空间。
我想知道是否有任何方法可以压缩输出,不是在报告完成后,而是在将其写入磁盘时
更新1:我们使用 Vsphere 作为虚拟机管理程序,并使用 HDD 作为存储
答案1
您可以对存储进行在线压缩和/或重复数据删除。有多种方法可以实现这一点 - 有些更简单,有些更有效。
首先,Linux 和 UNIX 系统可以使用 ZFS - 一种支持块级压缩和重复数据删除的文件系统和卷管理器。在此基础上构建的任何共享或本地存储系统都可以使用这些功能,因此,像 ZFS 之上的 NFS 这样简单的系统就可以在所有虚拟机上通过共享池实现您想要的功能。
Linux 可以使用 btrfs,这是一种支持内联重复数据删除和压缩的多设备文件系统。与上述想法相同。Btrfs 的硬件要求比 ZFS 少,但内联重复数据删除仍然相当繁琐(因为您最好使用任一文件系统在较大的共享数据集上执行此操作)。关于 btrfs 需要记住的是,它首先是一个文件系统,其次是一个卷管理器。它也不提供像 ZFS 那样的基于块的抽象,因此它纯粹是一个基于文件的系统。
有多种 NAS/SAN 产品包含此功能。使用其中一种产品作为共享存储可以充分利用重复数据删除和压缩功能,同时它还是一种固定且受支持的产品。FreeNAS 就是这样一种系统的示例,它可以使用 ZFS。Synology NAS 设备也可以并且经常使用 btrfs。
答案2
我同意@SmallLoanOf1M,但您可以做的另一个想法实际上是压缩 VM 内的报告 - 这样您就不会将负载放在底层虚拟机管理程序(即 Xen Dom0)上,并将其放在 VM 的 CPU 限制内。
如果您可以传输数据,那么您可以执行以下操作:
report-generator-program | lz4 > report-file.lz4
或者,gzip
如果您想要速度较慢但压缩效果更好,或者xz
想要融化您的 CPU,请使用。