C# 处理USN日志大小的完整案例

C# 处理USN日志大小的完整案例,c#,ntfs,usn,C#,Ntfs,Usn,在备份应用程序中,我使用USN日志检查卷的更改。在这里,USN有一个最大的大小,文件就满了 MaximumSize是中更改日志的目标最大大小 字节。更改日志的增长可能大于此值,但在NTFS下 文件系统检查点NTFS文件系统检查日志和 当其大小超过MaximumSize的值加上该值时,将对其进行修剪 分配的增量。(在NTFS文件系统检查点,操作系统 系统将记录写入NTFS文件系统日志文件,以允许 NTFS文件系统,以确定恢复所需的处理 从失败中恢复过来。) 那么,当日记账已满时,实际会发生什么呢?

在备份应用程序中,我使用USN日志检查卷的更改。在这里,USN有一个最大的大小,文件就满了

MaximumSize是中更改日志的目标最大大小 字节。更改日志的增长可能大于此值,但在NTFS下 文件系统检查点NTFS文件系统检查日志和 当其大小超过MaximumSize的值加上该值时,将对其进行修剪 分配的增量。(在NTFS文件系统检查点,操作系统 系统将记录写入NTFS文件系统日志文件,以允许 NTFS文件系统,以确定恢复所需的处理 从失败中恢复过来。)


那么,当日记账已满时,实际会发生什么呢?是否所有记录都被删除?还是只删除最旧的记录并为新记录创建条目?如何处理usn日志大小的完整情况?

usn日志是一个稀疏文件,而usn编号本身就是该文件的索引…实际偏移量。但是,诀窍是,在稀疏内存映射文件中,当它超过其大小阈值时,会删除最早的条目。这就是稀疏文件的神奇之处。偏移量永远不必改变,因为早期记录被截断了。NTFS保留关于调零范围的元数据,并透明地将零输出给读取文件的客户端。它是一根滚动的木头

调零的工作单位是AllocationDelta。每次发生此归零时,NTFS都会设置一个新的LowersValidusn值

因此,当您进行备份时,您可能希望记录下一个USN…它是指向下一个USN将被写入的位置的指针。之后,当您执行后续备份时,您保存的NextUsn大于最低ValidUsn,那么自上次备份以来的所有更改都仍然存在,您可以依靠USN优化备份过程

如果USN确实溢出了MaxUsn,我不确定实际会发生什么。似乎不太可能——值得知道是什么导致了这种情况。似乎我读到过关于实际发生的事情的相互矛盾的报道——要么停止日志记录,要么NTFS只是重新设置日志记录

如果管理员重置日志或自动重新创建日志,NTFS会为日志分配一个新ID。在这种情况下,备份程序必须从整个卷的新读取开始