CN112416885B - 一种文件的实时同步方法 - Google Patents

一种文件的实时同步方法 Download PDF

Info

Publication number
CN112416885B
CN112416885B CN202011425415.5A CN202011425415A CN112416885B CN 112416885 B CN112416885 B CN 112416885B CN 202011425415 A CN202011425415 A CN 202011425415A CN 112416885 B CN112416885 B CN 112416885B
Authority
CN
China
Prior art keywords
real
time
thread
file
change
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202011425415.5A
Other languages
English (en)
Other versions
CN112416885A (zh
Inventor
袁翔
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Chengdu Aomei Technology Co ltd
Original Assignee
Chengdu Aomei Technology Co ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Chengdu Aomei Technology Co ltd filed Critical Chengdu Aomei Technology Co ltd
Priority to CN202011425415.5A priority Critical patent/CN112416885B/zh
Publication of CN112416885A publication Critical patent/CN112416885A/zh
Application granted granted Critical
Publication of CN112416885B publication Critical patent/CN112416885B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/178Techniques for file synchronisation in file systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供一种文件的实时同步方法,包括如下步骤:S1.创建新的主线程,创建任务线程;S2.创建实时监控线程、实时同步线程和完整同步线程;S3.实时监控线程用于实时监控更改日志;S4.实时监控线程向实时同步线程发送变动数据;S5.实时监控线程向完整同步线程发出更改日志删除完毕的通知;S6.实时同步线程用于将变动数据同步到目标位置文件上;S7.实时同步线程发出更改日志有变动的通知;S8.完整同步线程用于定时检查各状态确定是否需要执行完整同步;S9.主线程等待终止通知,主线程终止。本发明解决了目前在文件频繁使用过程中,文件虽然会有定时做文件备份,但还原的只能是上个时间段的备份点,而这段期间的努力成果都将丢失的问题。

Description

一种文件的实时同步方法
技术领域
本发明涉及文件实时同步技术领域,更具体地涉及一种文件的实时同步方法。
背景技术
在文件频繁使用过程中,用户通常有过这样的经历:因为误操作、系统崩溃或病毒感染导致自己的辛苦成果被修改或被删除。虽然会有定时做文件备份,但还原的只能是上个时间段的备份点,而上个时间段的备份点到文件丢失时,这段期间的努力成果都将丢失,用户苦于此类情况而不得解。
虽然 Windows 有着自身的文件监控 API,但是其本身存在着监控不到位、遗漏变更文件的现象。因此,有必要提供一种文件的实时同步方法,以克服上述问题。
发明内容
本发明提供了一种文件的实时同步方法,以解决目前在文件频繁使用过程中, 用户通常有过这样的经历:因为误操作、系统崩溃或病毒感染导致自己的辛苦成果被修改或被删除,虽然会有定时做文件备份,但还原的只能是上个时间段的备份点, 而上个时间段的备份点到文件丢失时,这段期间的努力成果都将丢失的问题。
为解决上述技术问题,本发明所采用的技术方案是:一种文件的实时同步方法,包括如下步骤:
步骤 S1.创建新的主线程,开始编辑主线程,初始化主线程任务,创建任务线程;
步骤 S2.创建任务线程包括创建实时监控线程、实时同步线程和完整同步线程;步骤 S3.实时监控线程用于实时监控源路径文件,快速获知源文件的变动情况,即实时监控更改日志;
步骤 S4.实时监控线程向实时同步线程发送源文件的变动数据;
步骤 S5.实时监控线程向完整同步线程发出更改日志删除完毕的通知;
步骤 S6.实时同步线程用于在实时获取了实时监控线程发送的变动数据后,即时地将变动数据准确且有效地同步到目标位置文件上;
步骤 S7.实时同步线程向完整同步线程发出被监控文件发生过变动的通知,即更改日志有变动;
步骤 S8.完整同步线程用于接收更改日志删除完毕的通知和被监控文件发生过变动的通知,并定时检查各状态确定是否需要执行完整同步;当实时监控线程未发送更改日志删除完毕的通知,完整同步线程定时执行一次完整同步;当实时监控线程已发送更改日志删除完毕的通知后,等待并在收到实时同步线程发出的更改日志有变动的通知情况下,执行一次完整同步;
步骤 S9.主线程等待终止通知,当实时监控线程和实时同步线程分别发出实时监控结束和实时同步结束通知时,主线程终止。
进一步地,步骤 S6 中,实时同步线程将变动数据准确且有效地同步到目标位置文件上时,同时还需要根据用户需求过滤一些用户不关心的文件和文件类型。
进一步地,步骤 S3 中,实时监控线程首先需要确认 NTFS 卷是否激活了更改日志,NTFS 卷为需要进行实时同步的文件的所在位置。
进一步地,步骤 S3 中,实时监控线程确认 NTFS 卷是否激活了更改日志,先需通过方法 DeviceIoControl()与控制码 FSCTL_QUERY_USN_JOURNAL 尝试查询更改日志。
进一步地,步骤 S3 中,在实时监控线程查询更改日志后,如果返回错误为ERROR_JOURNAL_NOT_ACTIVE,则说明 NTFS 卷并没有启动更改日志。
进一步地,步骤 S3 中,如果 NTFS 卷并没有启动更改日志,需要再通过DeviceIoControl()与控制码 FSCTL_CREATE_USN_JOURNAL 激活更改日志。
进一步地,步骤 S3 中,激活更改日志后,需要定位到更改日志的末尾,等待新的更改日志记录写入。
进一步地,定位到更改日志的末尾的方式有两种,一种是遍历到更改日志的文件末尾;另一种是清空之前的所有的更改日志。
进一步地,遍历到更改日志的文件末尾是指需要遍历更改日志直到更改日志文件的末尾,即可实时监控文件的变化;但是由于更改日志是累加的,所以每次需要记录当前遍历末尾的更改日志,以方便下次直接定位继续监控。
进一步地,清空之前的所有的更改日志是指将所有的更改日志文件删除。具体地,本发明的原理如下:
用户最常用的卷文件系统 NTFS 提供了记录卷修改的日志——USN 日志。USN 日志全称为 Update Sequence Number Journal(更改序列号码日志),简称为更改日志,是微软发布 Windows 2000 时、建立 NTFS5.0 的同时,加入的新特性。使用者通过设置 NTFS分区激活 USN 日志(以下简称更改日志)功能,它将跟踪该卷的文件和目录的修改,并记录。同时提供各种对象查看该卷文件和目录在何时、做了何种更改。
文件实时同步就是实时监控源文件夹里子文件的变化,当源中的文件发生改变时能实时的将源中发生改变的文件、文件夹同步到目标位置。
实现文件的实时同步方法,重点就在于实时的文件监控与实时的文件同步。实时监控:实时监控源路径文件,能快速获知源文件的新增、修改、改名、删除等变动情况。
实时同步:在实时获取了变动情况后,能即时地将变动文件准确且有效地同步到目标位置文件上,同时还需要根据用户需求过滤一些用户不关心的文件和文件类型。
所以实时同步的成功,必须基于实时监控的准确与快速。而对于用户最常用的文件系统 NTFS 上的文件做实时监控,则可以利用 NTFS 特性——更改日志来实现。更改日志存储在隐藏的 NTFS 系统文件$Extend$UsnJrnl之中。它最初会是一个空文件。每当对该卷进行更改时,一条记录就被添加到该文件中。每条记录以一个64 位更新序列号码(简称USN)标识,且以递增的顺序生成,但 USN 并不是连续的。更改日志中的每条记录都包含USN、文件名、以及有关此更改的日期时间、更改的原因、MFT 条目,MFT 父条目等信息,但不包含与更改相关的所有数据或详细信息。
更改日志需通过 DeviceIoControl 向卷发送相应请求才能实现开启、查询、关闭更改日志等功能。更改日志之中的 MFT 条目与 MFT 父条目的信息可以定位文件的完整路径,外加更改原因和时间等信息,可以构造出“该卷上哪一个文件在什么时间因什么原因改变了”,并交由即时同步模块将变更文件同步到目标位置。同时更改日志总是把新记录写在文件末尾。所以只要定位到文件末尾或者清空所有 USN 记录,等待新的记录写入,即可监控到该卷文件的实时变化。
为了防止一些变化文件因文件独占或其他因素导致即时同步失败,这里需要一个容错机制——完整同步功能。该功能通过创建的完整同步线程实现,即为实时监控到文件变化后,间隔一段时间后触发。主要功能是遍历所有文件、记录文件信息、对比上次结果、保存同步失败状态,对发生改变了或同步失败的文件进行同步,以保证整个实时同步流程的正确性和完整性。
与现有技术相比,本发明具有以下有益效果:本发明的文件的实时同步方法通过创建新的主线程,开始编辑主线程,初始化主线程任务,创建任务线程;创建任务线程包括创建实时监控线程、实时同步线程和完整同步线程;实时监控线程用于实时监控源路径文件,快速获知源文件的变动情况,即实时监控更改日志;实时监控线程向实时同步线程发送源文件的变动数据;实时监控线程向完整同步线程发出更改日志删除完毕的通知;实时同步线程用于在实时获取了实时监控线程发送的变动数据后,即时地将变动数据准确且有效地同步到目标位置文件上;实时同步线程向完整同步线程发出被监控文件发生过变动的通知,即更改日志有变动;完整同步线程用于接收更改日志删除完毕的通知和被监控文件发生过变动的通知,并定时检查各状态确定是否需要执行完整同步;主线程等待终止通知,当实时监控线程和实时同步线程分别发出实时监控结束和实时同步结束通知时,主线程终止。即文件实时同步就是实时监控源文件夹里子文件的变化,当文件发生改变时能实时将发生改变的文件、文件夹同步到目标位置,实现对 NTFS 卷文件和目录的实时同步。
附图说明
图 1 为本发明的一种文件的实时同步方法的流程的示意图。
 图 2 为本发明的一种文件的实时同步方法的实时监控线程的流程的示意图。
 图 3 为本发明的一种文件的实时同步方法的实时同步线程的流程的示意图。
具体实施方式
下面结合附图进一步详细描述本发明的技术方案,但本发明的保护范围不局限于以下所述。
为使本发明实施方式的目的、技术方案和优点更加清楚,下面将结合本发明实施方式中的附图,对本发明实施方式中的技术方案进行清楚、完整地描述,显然, 所描述的实施方式是本发明一部分实施方式,而不是全部的实施方式。基于本发明中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。因此,以下对在附图中提供的本发明的实施方式的详细描述并非旨在限制要求保护的本发明的范围,而是仅仅表示本发明的选定实施方式。基于本发明中的实施方式,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施方式,都属于本发明保护的范围。
下面结合实施例对本发明作进一步的描述,所描述的实施例仅仅是本发明一部
分实施例,并不是全部的实施例。基于本发明中的实施例,本领域的普通技术人员在没有做出创造性劳动前提下所获得的其他所用实施例,都属于本发明的保护范围。
请参阅图 1 至图 3,图中所示者为本发明所选用的实施例结构,此仅供说明之用,在专利申请上并不受此种结构的限制。
实施例一
如图 1、图 2 和图 3 所示,一种文件的实时同步方法,包括如下步骤:
步骤 S1.创建新的主线程,开始编辑主线程,初始化主线程任务,创建任务线程;
步骤 S2.创建任务线程包括创建实时监控线程、实时同步线程和完整同步线程;步骤 S3.实时监控线程用于实时监控源路径文件,快速获知源文件的变动情况,即实时监控更改日志;
步骤 S4.实时监控线程向实时同步线程发送源文件的变动数据;
步骤 S5.实时监控线程向完整同步线程发出更改日志删除完毕的通知;
步骤 S6.实时同步线程用于在实时获取了实时监控线程发送的变动数据后,即时地将变动数据准确且有效地同步到目标位置文件上;
步骤 S7.实时同步线程向完整同步线程发出被监控文件发生过变动的通知,即更改日志有变动;
步骤 S8.完整同步线程用于接收更改日志删除完毕的通知和被监控文件发生过变动的通知,并定时检查各状态确定是否需要执行完整同步;定时检查各状态确定是否需要执行完整同步,即为遍历所有文件、记录文件信息、对比上次结果、保存同步失败状态,对发生改变了或同步失败的文件进行同步,以保证整个实时同步流程的正确性和完整性;当实时监控线程未发送更改日志删除完毕的通知,完整同步线程定时执行一次完整同步;当实时监控线程已发送更改日志删除完毕的通知后,等待并在收到实时同步线程发出的更改日志有变动的通知情况下,执行一次完整同步;
步骤 S9.主线程等待终止通知,当实时监控线程和实时同步线程分别发出实时监控结束和实时同步结束通知时,主线程终止。
步骤 S6 中,实时同步线程将变动数据准确且有效地同步到目标位置文件上时,同时还需要根据用户需求过滤一些用户不关心的文件和文件类型。
实施例二
步骤 S3 中,实时监控线程首先需要确认 NTFS 卷是否激活了更改日志,NTFS 卷为需要进行实时同步的文件的所在位置。
步骤 S3 中,实时监控线程确认 NTFS 卷是否激活了更改日志,先需通过方法DeviceIoControl()与控制码 FSCTL_QUERY_USN_JOURNAL 尝试查询更改日志。
 步骤 S3 中 , 在 实 时 监 控 线 程 查 询 更 改 日 志 后 , 如 果 返 回错 误 为ERROR_JOURNAL_NOT_ACTIVE,则说明 NTFS 卷并没有启动更改日志。
步骤 S3 中,如果 NTFS 卷并没有启动更改日志,需要再通过 DeviceIoControl() 与控制码 FSCTL_CREATE_USN_JOURNAL 激活更改日志。
步骤 S3 中,激活更改日志后,需要定位到更改日志的末尾,等待新的更改日志记录写入。
实施例三
定位到更改日志的末尾的方式有两种,一种是遍历到更改日志的文件末尾;另一种是清空之前的所有的更改日志。
遍历到更改日志的文件末尾是指需要遍历更改日志直到更改日志文件的末尾,即可实时监控文件的变化;但是由于更改日志是累加的,所以每次需要记录当前遍历末尾的更改日志,以方便下次直接定位继续监控。
清空之前的所有的更改日志是指将所有的更改日志文件删除。实施例四本发明的原理如下:
用户最常用的卷文件系统 NTFS 提供了记录卷修改的日志——USN 日志。USN 日志全称为 Update Sequence Number Journal(更改序列号码日志),简称为更改日志,是微软发布 Windows 2000 时、建立 NTFS5.0 的同时,加入的新特性。使用者通过设置 NTFS分区激活 USN 日志(以下简称更改日志)功能,它将跟踪该卷的文件和目录的修改,并记录。同时提供各种对象查看该卷文件和目录在何时、做了何种更改。
文件实时同步就是实时监控源文件夹里子文件的变化,当源中的文件发生改变时能实时的将源中发生改变的文件、文件夹同步到目标位置。
实现文件的实时同步方法,重点就在于实时的文件监控与实时的文件同步。实时监控:实时监控源路径文件,能快速获知源文件的新增、修改、改名、删除等变动情况。
实时同步:在实时获取了变动情况后,能即时地将变动文件准确且有效地同步到目标位置文件上,同时还需要根据用户需求过滤一些用户不关心的文件和文件类型。
所以实时同步的成功,必须基于实时监控的准确与快速。而对于用户最常用的文件系统 NTFS 上的文件做实时监控,则可以利用 NTFS 特性——更改日志来实现。更改日志存储在隐藏的 NTFS 系统文件$Extend$UsnJrnl之中。它最初会是一个空文件。每当对该卷进行更改时,一条记录就被添加到该文件中。每条记录以一个64 位更新序列号码(简称USN)标识,且以递增的顺序生成,但 USN 并不是连续的。更改日志中的每条记录都包含USN、文件名、以及有关此更改的日期时间、更改的原因、MFT 条目,MFT 父条目等信息,但不包含与更改相关的所有数据或详细信息。
更改日志需通过 DeviceIoControl 向卷发送相应请求才能实现开启、查询、关闭更改日志等功能。更改日志之中的 MFT 条目与 MFT 父条目的信息可以定位文件的完整路径,外加更改原因和时间等信息,可以构造出“该卷上哪一个文件在什么时间因什么原因改变了”,并交由即时同步模块将变更文件同步到目标位置。同时更改日志总是把新记录写在文件末尾。所以只要定位到文件末尾或者清空所有 USN 记录,等待新的记录写入,即可监控到该卷文件的实时变化。
为了防止一些变化文件因文件独占或其他因素导致即时同步失败,这里需要一个容错机制——完整同步功能。该功能通过创建的完整同步线程实现,即为实时监控到文件变化后,间隔一段时间后触发。主要功能是遍历所有文件、记录文件信息、对比上次结果、保存同步失败状态,对发生改变了或同步失败的文件进行同步,以保证整个实时同步流程的正确性和完整性。
实施例五
文件实时同步方法的流程如下:
如图 1 所示,创建新的主线程,开始编辑主线程,初始化主线程任务,创建任务线程;创建任务线程包括创建实时监控线程、实时同步线程和完整同步线程。
如图 2 所示,实时监控线程开始,查询更改日志,确认更改日志是否激活,若更改日志未激活,则创建更改日志;若更改日志已激活,则删除以前的更改日志;继续查询更改日志,遍历 USN 记录,重组文件变化信息,并将变化信息文件加入同步文件队列,即将变化数据发送到实时同步线程进行即时同步;
实时监控线程进行不断刷新数据,等待新 USN 记录;直到监控到有新的 USN 记录,判断监控是否停止,若监控不停止,则重新遍历 USN 记录;若监控停止,则实时监控结束。
如图 3 所示,实时同步线程开始,等待新同步文件信息,即同步文件队列是否有变化信息文件进入队列,也即是否有新数据;若无新数据,则继续等待新同步文件信息,若有新数据进入同步文件队列,则同步文件,更新信息;
判断监控是否停止,若监控不停止,则继续等待新同步文件信息;若监控停止,则实时同步结束。
其中,实时监控结束和实时同步结束后,主线程收到终止通知,主线程终止。具体如下:
首先确认该 NTFS 卷是否激活了更改日志:先需通过方法 DeviceIoControl()与控制码 FSCTL_QUERY_USN_JOURNAL 尝试查询更改日志;
如果返回错误为 ERROR_JOURNAL_NOT_ACTIVE,则说明该卷并没有启动更改日志,这时候需要再通过 DeviceIoControl()加上控制码 FSCTL_CREATE_USN_JOURNAL 激活更改日志。其后需要定位到更改日志的末尾,等待新 USN 记录写入。
定位到更改日志的末尾的方式有两种:一种是遍历到更改日志的文件末尾。
遍历更改日志的优势是快,只需要遍历到末尾,即可实时监控该卷文件的变化。但是由于更改日志是累加的,所以每次需要记录当前遍历末尾的 USN,以方便下次程序启动时直接定位继续监控。而记录 USN 也是一种写文件的操作,则有可能触发实时同步流程,然后无限循环,导致用户 CPU 持续走高。该具体方法与后面提到的循环监控方法一致。
另外一种是清空之前的所有的更改日志。
删除之前的所有的更改日志,则是利用方法 DeviceIoControl() 与控制码FSCTL_DELETE_USN_JOURNAL,将带有 USN_DELETE_FLAG_DELETE 标志的结构体参数DELETE_USN_JOURNAL_DATA发送给卷设备进行删除更改日志操作。
删除更改日志是需要时间的,可以继续使用 DeviceIoControl() 与控制码FSCTL_DELETE_USN_JOURNAL,将带有USN_DELETE_FLAG_USN_DELETE_FLAG_NOTIFY标志的结构体参数 DELETE_USN_JOURNAL_DATA 发送给卷,等待删除结束通知。而这段时间暂时交由定时的完整同步接手负责文件同步流程,直到删除成功,再由实时监控主导。
以下为实时监控:
通过方法 DeviceIoControl()与控制码 FSCTL_QUERY_USN_JOURNAL 获取到起始的 USN 与更改日志 ID。这些存储在方法返回的结构体 USN_JOURNAL_DATA_0 当中。然后将获取到的起始 USN 和更改日志 ID 赋值到结构体READ_USN_JOURNAL_DATA_V0 当中,设置好需要关注的文件变化原因 ResonMask,以及其他所需成员变量,再通过方法DeviceIoControl()与控制码 FSCTL_READ_USN_JOURNAL,读取和遍历最新的文件变化的更改日志,其返回的更改日志记录存储在一个缓存区。该缓存区由当前
USN 和当前已发生文件改变的多个 USN 记录结构体 USN_RECORD_V2 组成。
 其中,NTFS 分区经过多次更新,该结构以及之后提到带有“_V[Num]”的结构体都有着多个版本,“ _V[Num]” 仅 是 为 了 使 用 者 方 便 区 分 版 本 , 而 方 法
DeviceIoControl 则是根据结构体长度区分版本,根据实际编译环境和需求决定使用哪个版本并定义明确好结构体,方便返回所需版本的结构体数据。
typedef struct {
DWORD RecordLength; //结构体长度WORD MajorVersion;
WORD MinorVersion;
DWORDLONG FileReferenceNumber; //文件/文件夹引用码 DWORDLONGParentFileReferenceNumber; //父文件夹引用码 USN Usn;
LARGE_INTEGER TimeStamp; //时间轴
DWORDReason; //变化原因 DWORD SourceInfo;
DWORD SecurityId;
DWORD FileAttributes; //文件属性
WORD FileNameLength; WORD FileNameOffset;
WCHAR FileName[1]; //文件名
} USN_RECORD_V2, *PUSN_RECORD_V2;
其中 Reason 记录文件改变的原因是新增或修改或删除或重命名。
其中重命名比较特殊,是两条记录分别为:FILE_ACTION_RENAMED_OLD_NAME 和USN_REASON_RENAME_NEW_NAME,第一条为记录 FileName 变量,记录着更名前的文件名,后一条则记录了更名后的文件名。
FileReferenceNumber 和 ParentFileReferenceNumber 为文件的引用码,具有唯一性,即使文件名已经发生改变,该文件的引用码也不会发生改变。它既可以方便快速锁定并筛选出用户所关注的文件夹以及子文件的变化,也能与完整同步的文件记录相关联,方便两边数据互通与共享。而用户关注的文件夹以及子文件的文件的引用码,可以通过方法 GetFileReferenceNumber()来获取,建立关注文件夹/文件列表。
获取以上信息后,即可以重组后发送给实时同步线程进行变更文件的完整同步,同时更新完整同步文件信息,从关注列表中去掉一些已被删除的文件夹以及子文件。
遍历完当前更改日志记录,就可以继续等待新的 USN 记录写入、筛选关注文件的变化、即时同步更改文件,定时触发完整同步,如此循环达到实时同步的效果。
实施例六
基于实施例一至实施例五的描述,本发明可以应用于电网调度自动化系统中, 在现今的电网调度自动化系统中,存在着多个应用,每个应用是一份数据实体和一组对此数据实体进行处理的服务程序的组合,比如 SCADA 应用的组成有:SCADA 实时库、数据服务进程、操作服务进程、遥信遥测及工况处理服务进程等。为了保证系统的可靠性,每一个应用运行在不同的节点上,节点之间一般为一个主机,其余为(热)备机。当主机节点应用程序出现异常情况时,会发生主备机切换,备机中的一个节点按照相关算法切换为主机。
文件服务是运行在 DATA_SRV(数据服务)应用下,用于满足调度自动化系统中文件存储、查询、版本管理等功能的一个服务,由于 DATA_SRV 应用一般运行在两个或更多的节点上,因此文件服务还需要维护着这些节点之间文件的一致性。当DATA_SRV应用主备机发生切换后,如果没有较好的同步方案,会引发数据不一致,甚至数据文件被破坏的情况。例如,某系统中存在 A、B、C 三个 DATA_SRV 应用节点,节点 A 为主机,节点 B、C 为备机,当客户进程 p 更新主机上的某文件后,DATA_SRV 应用主备机发生切换,节点 B 成 DATA_SRV 应用主机,节点 A 成 DATA_SRV 应用备机,另一客户进程 q 此时再次读此文件,若没有较好的同步方案,进程 q 会读取到旧的文件。
本发明应用于电网调度自动化系统中的方法包括如下步骤:
步骤 a.创建新的主线程,开始编辑主线程,初始化主线程任务,创建任务线程;步骤 b.创建任务线程包括创建实时监控线程、实时同步线程和完整同步线程;步骤 c.实时监控线程用于实时监控源路径文件,快速获知源文件的变动情况,即实时监控更改日志;
步骤 d.接收客户端请求,根据请求的操作类型做相应操作,并返回操作结果,记录每次修改操作的操作日志;实时监控线程向实时同步线程发送源文件的变动数据;
步骤 e.实时监控线程向完整同步线程发出更改日志删除完毕的通知;
步骤 f.实时同步线程用于在实时获取了实时监控线程发送的变动数据后,即时地将变动数据准确且有效地同步到目标位置文件上;实时扫描日志文件,根据日志文件内容,同步文件或目录到各个 DATA_SRV 应用节点;
步骤 g.实时同步线程向完整同步线程发出被监控文件发生过变动的通知,即更改日志有变动;当值班时间超过阈值时,向所有 DATA_SRV 应用节点做一次全量同步; 步骤 h.完整同步线程用于接收更改日志删除完毕的通知和被监控文件发生过变动的通知,并定时检查各状态确定是否需要执行完整同步;定时检查各状态确定是否需要执行完整同步,即为遍历所有文件、记录文件信息、对比上次结果、保存同步失败状态,对发生改变了或同步失败的文件进行同步,以保证整个实时同步流程的正确性和完整性;
步骤 i.主线程等待终止通知,当实时监控线程和实时同步线程分别发出实时监控结束和实时同步结束通知时,主线程终止;向任意一个节点增量同步或全量同步文件时,先加锁,再同步,同步结束后,解锁。
其中,在步骤 d 中,文件服务收到客户请求时,先判断请求操作的文件或目录是否已被加锁,若被加锁需等待锁解除后再进行下一步骤,若未被加锁则直接进行下一步骤。
在步骤 f 中,文件服务实时扫描日志文件,根据日志文件生成时间顺序依次处理每个日志文件;对于每个日志文件,根据操作日志内容,增量同步文件或目录到各个 DATA_SRV 节点,同步成功结束后删除操作日志,若同步失败,则保留操作日志;在步骤 f 中,当操作日志个数超过阈值个数时,全量同步文件到各个节点,同步结束后删除所有操作日志,若同步失败,则保留操作日志。
在步骤 g 中,在夜间,且当 DATA_SRV 主机值班时间超过阈值时间时,主机向所有备机节点做一次全量同步。
在步骤 i 中,文件服务在向任意一个节点增量同步或全量同步文件时,需先加锁,再同步,同步结束后,再解锁;当加锁失败情况下,不能进行同步。加锁的信息中包含:锁类型、锁范围、锁超时时间。
在步骤 d 中,文件服务以日志方式记录下每次修改操作,修改操作包括:增加、修改、删除文件、修改文件属性、增加和删除目录;所述操作日志按照操作当时时间命名,日志内容包括本次操作类型和操作相关文件。
 当文件服务的服务端收到客户端请求时,先判断文件是否被加锁,若被加锁, 需要等待到此文件解锁后,再进行后续操作。根据处理情况判断操作类型是否属于修改操作,若操作类型属于修改操作,需记录下操作日志;否则返回处理结果。
文件服务实时扫描日志文件,若存在日志文件,再判断日志文件个数是否超过阈值个数 N;
若超过 N,则进行一次全量同步,成功同步后删除所有日志文件,若同步失败则保留日志文件;
若不超过 N,则按照日志文件生成的时间先后顺序,依次处理每个日志文件, 成功同步一个日志文件所涉及的所有文件后,删除该日志文件,同步失败时保留此日志文件。
当节点为值班主机时,在夜间持续值班时间超过阈值时间T且无日志文件的情况下,对备机节点进行一次全量同步。
当向待同步节点同步文件时,先向待同步节点加锁,若加锁失败,则判本次同步失败;若加锁成功,则同步文件到待同步节点,同步成功结束后,解除锁,判本次同步成功;若同步文件发生失败,则解除锁,判本次同步失败。
本实施例中,文件服务在向任意一个节点增量同步或全量同步文件时,必须先加锁,再同步,同步结束后,再解锁。加锁失败情况下,不能进行同步。锁的信息中包含:锁类型、锁范围、锁超时时间。文件服务记录下每次修改操作操作日志, 修改操作包括:增加、修改、删除文件,修改文件属性,增加、删除目录。操作日志按照操作当时时间命名,日志内容包括本次操作类型和操作相关文件名等。
本发明中,操作日志记录了操作类型和操作相关文件,当目标节点发生网络故障情况下,仍然保留着操作日志,一旦网络恢复,文件服务可以快速同步文件到目标节点;当存在两个或两个以上的堆积日志文件时,文件服务按照日志文件生成的次序依次同步每个日志,确保文件操作的时序性;并通过增量同步可以实时保证文件服务节点之间的一致性,降低网络负载,减少对系统中其他应用程序的影响。
在日志文件个数大于阈值 N 时,采用全量同步方式可以快速同步所有变化文件,避免连续增量同步单个文件耗时过长的问题;在夜间全量同步 DATA_SRV 应用主机到所有DATA_SRV 应用备机,可以最大化保证文件服务节点之间的一致性,避免人工误操作或网络故障引起的不一致性;同步文件时,对目标节点加锁,有效地解决同步文件时主备机突然切换所引起的文件不一致问题。
本发明应用于电网调度自动化系统后,有效地解决同步文件时主备机突然切换所引起的文件不一致,且由于文件频繁使用过程中,因为误操作、系统崩溃或病毒感染导致文件被修改或被删除,虽然会有定时做文件备份,但还原的只能是上个时间段的备份点,而上个时间段的备份点到文件丢失时,这段期间的努力成果都将丢失的问题。
以上所述实施例是用以说明本发明,并非用以限制本发明,所以举例数值的变更或等效元件的置换仍应隶属本发明的范畴。
由以上详细说明,可使本领域普通技术人员明了本发明的确可达成前述目的, 实已符合专利法的规定。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,应当指出的是,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种文件的实时同步方法,其特征在于,包括如下步骤:
步骤 S1.创建新的主线程,开始编辑主线程,初始化主线程任务,创建任务线程; 步骤S2.创建任务线程包括创建实时监控线程、实时同步线程和完整同步线程;
步骤 S3.实时监控线程用于实时监控源路径文件,快速获知源文件的变动情况,即实时监控更改日志;
步骤 S4.实时监控线程向实时同步线程发送源文件的变动数据;
步骤 S5.实时监控线程向完整同步线程发出更改日志删除完毕的通知;
步骤 S6.实时同步线程用于在实时获取了实时监控线程发送的变动数据后,即时地将变动数据准确且有效地同步到目标位置文件上;
步骤 S7.实时同步线程向完整同步线程发出被监控文件发生过变动的通知,即更改日志有变动;
步骤 S8.完整同步线程用于接收更改日志删除完毕的通知和被监控文件发生过变动的通知,并定时检查各状态确定是否需要执行完整同步;当实时监控线程未发送更改日志删除完毕的通知,完整同步线程定时执行一次完整同步;当实时监控线程已发送更改日志删除完毕的通知后,等待并在收到实时同步线程发出的更改日志有变动的通知情况下,执行一次完整同步;
步骤 S9.主线程等待终止通知,当实时监控线程和实时同步线程分别发出实时监控结束和实时同步结束通知时,主线程终止;
步骤 S3 中,实时监控线程首先需要确认 NTFS 卷是否激活了更改日志,NTFS 卷为需要进行实时同步的文件的所在位置。
2.如权利要求 1 所述的一种文件的实时同步方法,其特征在于,步骤 S6 中,实时同步线程将变动数据准确且有效地同步到目标位置文件上时,同时还需要根据用户需求过滤一些用户不关心的文件和文件类型。
3.如权利要求 1 所述的一种文件的实时同步方法,其特征在于,步骤 S3 中,先需通过方法 DeviceIoControl()与控制码 FSCTL_QUERY_USN_JOURNAL 尝试查询更改日志。
4.如权利要求 3 所述的一种文件的实时同步方法,其特征在于,步骤 S3 中,查询更改日志后,如果返回错误为 ERROR_JOURNAL_NOT_ACTIVE,则说明 NTFS 卷并没有启动更改日志。
5.如权利要求 4 所述的一种文件的实时同步方法,其特征在于,步骤 S3 中,需要再通过DeviceIoControl()与控制码 FSCTL_CREATE_USN_JOURNAL 激活更改日志。
6.如权利要求 5 所述的一种文件的实时同步方法,其特征在于,步骤 S3 中,激活更改日志后,需要定位到更改日志的末尾,等待新的更改日志记录写入。
7.如权利要求 6 所述的一种文件的实时同步方法,其特征在于,定位到更改日志的末尾的方式有两种,一种是遍历到更改日志的文件末尾;另一种是清空之前的所有的更改日志。
8.如权利要求 7 所述的一种文件的实时同步方法,其特征在于,遍历到更改日志的文件末尾是指需要遍历更改日志直到更改日志文件的末尾,即可实时监控文件的变化;但是由于更改日志是累加的,所以每次需要记录当前遍历末尾的更改日志,以方便下次直接定位继续监控。
9.如权利要求 8 所述的一种文件的实时同步方法,其特征在于,清空之前的所有的更改日志是指将所有的更改日志文件删除。
CN202011425415.5A 2020-12-09 2020-12-09 一种文件的实时同步方法 Active CN112416885B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202011425415.5A CN112416885B (zh) 2020-12-09 2020-12-09 一种文件的实时同步方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202011425415.5A CN112416885B (zh) 2020-12-09 2020-12-09 一种文件的实时同步方法

Publications (2)

Publication Number Publication Date
CN112416885A CN112416885A (zh) 2021-02-26
CN112416885B true CN112416885B (zh) 2023-05-09

Family

ID=74776424

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202011425415.5A Active CN112416885B (zh) 2020-12-09 2020-12-09 一种文件的实时同步方法

Country Status (1)

Country Link
CN (1) CN112416885B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114189511B (zh) * 2021-12-06 2024-01-09 成都傲梅科技有限公司 一种基于第三方云的多云组合方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102682096A (zh) * 2012-04-27 2012-09-19 北京航空航天大学 一种仿真资源信息与模型源码协同管理装置及其方法
CN102968486A (zh) * 2012-11-26 2013-03-13 国电南瑞科技股份有限公司 一种基于变化日志的高可靠文件同步方法
CN103227660A (zh) * 2013-03-26 2013-07-31 中国科学院电子学研究所 一种实时软件帧的同步方法

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101459503A (zh) * 2007-12-12 2009-06-17 华为技术有限公司 一种实现数据同步的方法和装置
CN103052944B (zh) * 2010-12-14 2016-10-12 株式会社日立制作所 信息处理系统中的故障恢复方法和信息处理系统
US9390109B2 (en) * 2012-12-21 2016-07-12 Commvault Systems, Inc. Systems and methods to detect deleted files
CN108874999B (zh) * 2018-06-14 2022-05-24 成都傲梅科技有限公司 一种基于Windows监控的实时同步的方法
CN109446170B (zh) * 2018-09-13 2024-01-19 北京米文动力科技有限公司 一种配置文件数据同步方法及设备
CN109582731A (zh) * 2018-10-18 2019-04-05 恒峰信息技术有限公司 一种数据实时同步方法及系统
CN111209344A (zh) * 2020-02-07 2020-05-29 浪潮软件股份有限公司 数据同步方法及装置

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102682096A (zh) * 2012-04-27 2012-09-19 北京航空航天大学 一种仿真资源信息与模型源码协同管理装置及其方法
CN102968486A (zh) * 2012-11-26 2013-03-13 国电南瑞科技股份有限公司 一种基于变化日志的高可靠文件同步方法
CN103227660A (zh) * 2013-03-26 2013-07-31 中国科学院电子学研究所 一种实时软件帧的同步方法

Also Published As

Publication number Publication date
CN112416885A (zh) 2021-02-26

Similar Documents

Publication Publication Date Title
US11308071B2 (en) Update and query of a large collection of files that represent a single dataset stored on a blob store
US5878434A (en) Transaction clash management in a disconnectable computer and network
US6873995B2 (en) Method, system, and program product for transaction management in a distributed content management application
US7158999B2 (en) Reorganization and repair of an ICF catalog while open and in-use in a digital data storage system
US20090006500A1 (en) Namespace replication program, namespace replication device, and namespace replication method
US5455944A (en) Method for managing logging and locking of page free space information in a transaction processing system
US6446090B1 (en) Tracker sensing method for regulating synchronization of audit files between primary and secondary hosts
JP3556170B2 (ja) 永続的更新シーケンス番号を使用してドキュメント変更をモニタリングする方法およびシステム
US7472129B2 (en) Lossless recovery for computer systems with map assisted state transfer
JP4219589B2 (ja) トランザクショナルファイルシステム
CA2227432C (en) Transaction synchronization in a disconnectable computer and network
US7103619B1 (en) System and method for automatic audit data archiving within a remote database backup system
EP0336035B1 (en) Tree structure database system
US9223805B2 (en) Durability implementation plan in an in-memory database system
US7996363B2 (en) Real-time apply mechanism in standby database environments
US20060129618A1 (en) Method and a computer system for synchronising backups of objects and of meta data about the objects
US20050289414A1 (en) Lossless recovery for computer systems with remotely dependent data recovery
WO2021184679A1 (zh) 持续数据保护系统及方法
US20080172423A1 (en) Hsm control program, hsm control apparatus, and hsm control method
WO1997004391A1 (en) Transaction log management in a disconnectable computer and network
CA2504322A1 (en) Apparatus and method for hardware-based file system
US20100145914A1 (en) Database management server apparatus, database management system, database management method and database management program
US20230110826A1 (en) Log execution method and apparatus, computer device and storage medium
CN112416885B (zh) 一种文件的实时同步方法
CN114968966A (zh) 分布式元数据远程异步复制方法、装置和设备

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant