![识别磁盘块级别的变化](https://linux22.com/image/670926/%E8%AF%86%E5%88%AB%E7%A3%81%E7%9B%98%E5%9D%97%E7%BA%A7%E5%88%AB%E7%9A%84%E5%8F%98%E5%8C%96.png)
我有个问题 :)
我想确定整个磁盘或特定文件在块级别发生了多少变化。
理想情况下,有一个工具可以对磁盘或文件进行扫描并为每个块生成“指纹”,然后能够在稍后的阶段比较这些指纹以得出自上次扫描以来更改的块数。
有人有什么想法吗?有人可以推荐一些工具、命令行实用程序吗?
更新
我找到了以下项目:
https://github.com/OctopusDeploy/Octodiff
它是 rdiff 工具的 C# 实现,它本身基于 rsync 算法,本质上符合我的期望。
现在我需要的是一个可以输出数据变化统计信息而无需写出增量文件的工具。
答案1
类似于 VMware CBT 机制的 Microsoft 块跟踪功能应该在 Windows Server 2016 中可用。您可以使用一些公共 API(例如 Veeam 使用 vSphere CBT)访问此功能。所以我想它可能有助于您跟踪已更改的数据块。我们还使用 veeam 运行 hyper-v,并使用与 VSS 配合良好的 Starwind vSAN。我知道 Nimble 也支持 VSS/CBT。
答案2
@batistuta09提到星风https://www.starwindsoftware.com/starwind-virtual-san-free它实际上是一个虚拟 SAN,而且是免费的。它本地安装在 Hyper-V 上,并且有一个名为 LSFS 的日志文件系统设备https://www.starwindsoftware.com/vm-centric-storage-lsfs这是面向 VM 的。
它的优点在于,当有新数据写入时,它会连续生成大小从 128MB 到 512MB 的新文件(或块)。这可能足以让您轻松查看在给定时间段内生成了多少“新”数据。虽然结果可能不是很精确,但可能足以满足您的特定任务,而且安装和配置非常简单。
答案3
我不会讲太多细节,我意识到这是一个 Windows Server 问题,但我会向您指出两个我认为可能适合您的目的的方向。
1) 您可以使用日志文件系统,并捕获日志条目,因为它们会生成一个不完美但非常接近的近似值,即在特定时间片内发生了多少更改。然后,您可以使用一些数学运算来确定块级更改,达到相当高的准确度。
许多日志文件系统允许您将日志本身放在与数据完全不同的存储空间上,因此您可以将其(例如使用 XFS)放到大型存储空间上,然后使用单独的工具或观察器按时间片分析日志。
采用这种方法有很多可能性,我就不一一提及了……天空是极限。
2) 如果您需要在块级别上对时间片 (1) 与时间片 (2) 进行更改/未更改的真正精确映射,我可能会考虑使用 DRBD 和两个单独的只读从属设备(或软件 RAID 1,这更容易,并且可以在 Windows Server 上使用,但在物理上限制更多)。一个在时间 (a) 引入然后断开连接。然后在时间 (b) 引入第二个,然后断开连接,然后使用您想要的任何工具进行静态比较。您只需从两个源读取每个块并进行异或。如果结果大于零,则它发生了变化。
答案4
一种选择是使用 ZFS 及其快照功能。在时间 X 上创建快照,并检查时间 Y 上的快照空间使用情况。这将说明时间 X 和 Y 之间的差异大小。
ZFS 快照空间使用情况描述Oracle ZFS 文档。