1

我正在尝试制作一个软件来备份我的整个硬盘驱动器。

我设法编写了一个代码来从硬盘扇区读取原始数据。但是,我想要增量备份。为此,我需要知道对操作系统设置、文件更改等所做的更改。

我的问题是——

使用FileSystemWatcherInotify,我是否能够知道对硬盘驱动器中每个扇区所做的每一次更改?(操作系统设置等)

我正在用 C++ 为 linux 和 windows 编写代码。

(在Stackoverflow上看到了这个问题,这给了我一些想法)

4

2 回答 2

1

Inotify 是在您的程序运行时检测更改,我猜FilySystemWatches 是类似的。

解决此问题的一种方法是对每个扇区或多个扇区进行校验和,并在进行备份时将校验和与您拥有的列表进行比较,并且仅备份已更改的块。

于 2012-10-10T09:35:20.513 回答
0

MS Windows FileSystemWatcher机制比Linux 的 Inotify更受限制,但两者都可能满足您的需求。Linux 机制为文件读取提供(可选)通知,这会导致“访问时间戳”被更新。

但是,从应用程序的角度来看,弱点是从系统启动到程序加载(以及卸载到关闭)所做的所有文件修改都不会被监视。您的应用程序可能需要查看许多文件的文件修改时间戳以识别更改的文件,具体取决于您所针对的监控级别。

两种架构都为上次访问文件时的每个文件跟踪维护时间戳。如果更新是备份通知的触发器,则缺少此类通知的 Windows 机制将导致平台上的行为不匹配。由于缓冲区大小的限制,Windows 的机制也可以丢弃通知。这是文档中的一个真正的宝石:

请注意,由于与 Windows 操作系统的相关性,当错过事件或超出缓冲区大小时, FileSystemWatcher不会引发错误事件。为避免错过活动,请遵循以下准则:

  • 使用InternalBufferSize属性增加缓冲区大小可以防止丢失文件系统更改事件。

  • 避免观看具有长文件名的文件。考虑使用较短的名称重命名。

  • 使您的事件处理代码尽可能短。

至少你可以控制其中三分之二....

于 2012-10-10T18:18:54.453 回答