我有个问题 :)
我想确定在块级别上有多less改变是整个磁盘还是一个特定的文件。
理想情况下,有一种工具可以在磁盘或文件上运行扫描,并为每个块产生“指纹”,然后能够在稍后阶段比较这些指纹,以便自上次扫描以后到达一些已更改的块。
有没有人有任何想法? 任何人都可以提出任何工具,命令行工具?
UPDATE
我发现了以下项目:
https://github.com/OctopusDeploy/Octodiff
这是一个基于rsyncalgorithm的rdiff工具的C#实现,基本上符合我所希望的。
现在我需要的是一个工具,输出数据改变统计数据,而不写出增量文件。
应该在Windows Server 2016中提供类似于VMware CBT机制的Microsoft块跟踪function。您可以使用某些公共API(如Veeam采用vSphere CBT)访问此function。 所以我想这可能会帮助你跟踪已经改变的数据块。 我们还使用veeam运行hyper-v,并使用与VSS配合使用的Starwind vSAN。 我知道Nimble也支持VSS / CBT。
@ batistuta09提到Starwind https://www.starwindsoftware.com/starwind-virtual-san-free这实际上是一个虚拟SAN,是免费的。 它本机安装在Hyper-V上,它有一个日志文件系统设备,称为LSFS https://www.starwindsoftware.com/vm-centric-storage-lsfs ,面向虚拟机。
当它写入新的数据时,它会生成大小为128MB到512MB的AFAIK的新文件(或块)。 这可能足以让您轻松看到在特定时间段内生成了多less“新”数据。 结果可能不是很精确,但可能会足够你的具体任务,安装和configuration非常简单。
我不会涉及太多的细节,我意识到这是一个Windows Server的问题,但我会指出你在两个方向,我认为可能是你的目的可行。
1)您可以使用日记文件系统,并捕获日记条目,因为它们恰好产生了对特定时间片中进行了多less更改的不完美但非常接近的近似值。 然后,您可以使用一些math来确定块级别的变化,以达到相当准确的水平。
许多日志文件系统允许您将日志本身放在与数据完全不同的存储器上,因此您可以将其(例如以XFS为例)放到大容量存储上,然后随时间片分析日志一个单独的工具或观察者。
这种方法的许多可能性我不提。天空的限制。
2)如果需要在时间片(1)上对时间片(2)与块时间片(2)进行实际精确的映射,则可考虑使用DRBD和两个独立的只读从站(或软件RAID 1 ,这将是更容易,可能在Windows服务器,但更多的物理限制)..一个是在时间(一),然后断开。 然后在第二个时间(b),然后断开它,然后做一个静态比较,使用任何你想要的工具。你只需要从每个来源读取每个块,并做异或。 如果结果大于零,则更改。
我的build议是在vSphere中使用诸如CBT之类的虚拟机技术,或者使用支持文件和覆盖存储的KVM。
然后,您可以利用CBT或检查覆盖图qcow2图像来确定哪些块已更改。
或者,如果您正在执行此操作来确定复制stream量的变化率,请使用性能计数器来检查写入设备的数据总量。
一个选项可能是使用ZFS及其快照function。 在时间X上做一个快照,并检查快照空间在Y时间的使用情况。这将显示时间X和Y之间差异的大小。
Oracle ZFS文档中描述了 ZFS快照空间使用情况。
您可以在要监视的所有卷上启用卷影副本,然后可以使用以下选项检查“已用卷影副本”存储空间:
vssadmin列表shadowstorage
指令的两次运行之间的差值应该能够很好地估计累计变化的大小