【问题标题】:Get notified about the change in raw data in hard disk sector - File change notification获取有关硬盘扇区原始数据更改的通知 - 文件更改通知
【发布时间】:2012-09-30 17:27:03
【问题描述】:

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

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

我的问题是-

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

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

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

【问题讨论】:

  • 您确定要备份每个扇区吗?甚至删除文件?甚至自磁盘初始化(使用文件系统)以来从未分配过空间?如果没有,那么 O/S 修改通知就是要走的路。
  • 你是对的。我不想那样做。谢谢你
  • 它是特定于操作系统和特定于文件系统的
  • 恐怕你的做法比较幼稚!对于初学者,请尝试阅读一些关于 ZoL 及其复制方法的信息。如果您的磁盘上有 ZFS,那么这已经很重要了。它有干净的方法来逐步复制(备份?),按块!它是有效的,可能是最优雅的文件系统!如果您正在运行 Linux,请尝试一下。流行的操作系统有各种 ZFS 端口。

标签: c++ filesystemwatcher inotify


【解决方案1】:

Inotify是在你的程序运行时检测变化,我猜FilySystemWatches也是类似的。

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

【讨论】:

    【解决方案2】:

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

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

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

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

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

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

    • 尽可能缩短事件处理代码。

    至少你可以控制其中三个中的两个....

    【讨论】:

      猜你喜欢
      • 2021-05-03
      • 2018-10-05
      • 2013-04-27
      • 2017-06-14
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多