发明内容
为了减少用户等待复制文件的时间以及当源文件和副本文件存储在不同的存储介质中并移走源文件所在的存储介质时,保证副本文件还可用,本发明提供了一种复制文件的方法及装置。所述技术方案如下:
一种复制文件的方法,所述方法包括:
对所述源文件的文件结构进行复制得到副本文件的文件结构,所述源文件的文件结构包括第一存储区域,所述副本文件的文件结构包括第二存储区域,所述第一存储区域和所述第二存储区域分别与所述源文件包括的数据页一一对应,所述第一存储区域包括数据区域和指针区域,所述第二存储区域包括数据区域和指针区域,所述第一存储区域包括的数据区域用于存储所述第一存储区域对应的数据页;
在所述数据页对应的第一存储区域包括的指针区域中设置副本指针,所述副本指针用于指向所述数据页对应的第二存储区域,在所述数据页对应的第二存储区域包括的数据区域中设置数据指针,所述数据指针用于指向所述数据页对应的第一存储区域;
将所述数据页复制到所述数据页对应的第二存储区域包括的数据区域中。
所述在所述数据页对应的第二存储区域包括的数据区域中设置数据指针之后,还包括:
如果修改所述副本文件的某数据页,则接收用于写入副本文件的请求消息以及所述数据页对应的新数据页,将所述数据页对应的新数据页存储在所述数据页对应的第二存储区域包括的数据区域中。
所述将所述数据页对应的新数据页存储在所述数据页对应的第二存储区域包括的数据区域中之前,还包括:
在所述副本文件中获取所述数据页对应的第二存储区域包括的数据区域内存储的数据指针,根据所述获取的数据指针在所述源文件中获取所述数据页对应的第一存储区域,清空所述第一存储区域包括的指针区域内存储的副本指针。
所述在所述数据页对应的第二存储区域包括的数据区域中设置数据指针之后,还包括:
如果修改所述源文件的某数据页,则接收用于写入源文件的请求消息以及所述数据页对应的新数据页,在所述源文件中的所述数据页对应的第一存储区域中读取所述数据页和副本指针,根据所述副本指针在所述副本文件中获取所述数据页对应的第二存储区域,将所述数据页复制到所述数据页对应的第二存储区域包括的数据区域中,以及将所述数据页对应的新数据页存储在所述数据页对应的第一存储区域包括的数据区域中。
所述将所述数据页复制到所述数据页对应的第二存储区域包括的数据区域中之后,还包括:
清空所述数据页对应的第一存储区域包括的指针区域中存储的副本指针。
所述方法还包括:
接收需要复制的第一文件和用于复制所述第一文件的请求消息,对所述第一文件的文件结构进行复制得到第二文件的文件结构,所述第一文件包括一个或多个存储区域,所述第二文件包括一个或多个第二存储区域,所述第一文件包括的存储区域分别与所述第一文件包括的数据页一一对应,所述第二文件包括的第二存储区域分别与所述第一文件包括的数据页一一对应;
扫描所述第一文件包括的数据页对应的存储区域,如果所述扫描的存储区域包括的指针区域为空,在所述扫描的存储区域包括的指针区域中设置副本指针,所述副本指针用于指向所述数据页在所述第二文件中对应的第二存储区域,在所述数据页在所述第二文件中对应的第二存储区域包括的数据区域设置数据指针,所述数据指针用于指向所述扫描的存储区域;
将所述第一文件包括的数据页分别复制到所述第二文件中对应的第二存储区域包括的数据区域中。
所述方法还包括:
如果所述扫描的存储区域包括的指针区域中存储有副本指针,获取所述副本指针指向的第二存储区域,如果所述获取的副本指针指向的第二存储区域包括的指针区域为空,则在所述获取的存储区域包括的指针区域中设置副本指针,所述副本指针用于指向所述数据页在所述第二文件中对应的第二存储区域,在所述数据页在所述第二文件中对应的第二存储区域包括的数据区域设置数据指针,所述数据指针用于指向所述获取的第二存储区域,如果所述获取的第二存储区域包括的指针区域存储有副本指针,则获取所述副本指针指向的第二存储区域。
所述在所述数据页在所述第二文件中对应的第二存储区域包括的数据区域设置数据指针之后,还包括:
如果修改所述第一文件的某数据页,则接收用于写入第一文件的请求消息以及所述数据页对应的新数据页,获取所述数据页在所述第一文件中对应的存储区域,如果所述获取的存储区域包括的数据区域中存在所述数据页,则获取所述获取的存储区域包括的指针区域内存在的副本指针,将所述数据页存储到所述副本指针指向的第二存储区域包括的数据区域中,将所述数据页对应的新数据页存储在所述获取的存储区域包括的数据区域中。
所述方法还包括:
如果所述获取的存储区域包括的数据区域中存在数据指针,则获取所述获取的存储区域包括的指针区域内存在的副本指针,获取所述数据指针指向的一个存储区域和所述副本指针指向的第二存储区域,设置所述第二存储区域包括的数据指针指向所述一个存储区域,以及设置所述一个存储区域包括的副本指针指向所述第二存储区域。
所述将所述数据页复制到所述数据页对应的第二存储区域包括的数据区域中,包括:
在所述数据页对应的第一存储区域包括的指针区域中获取副本指针;
根据所述获取的副本指针,在所述副本文件中获取所述数据页对应的第二存储区域;
将所述数据页复制到所述数据页对应的第二存储区域包括的数据区域中。
一种复制文件的装置,所述装置包括:
第一复制模块,用于对所述源文件的文件结构进行复制得到副本文件的文件结构,所述源文件的文件结构包括第一存储区域,所述副本文件的文件结构包括第二存储区域,所述第一存储区域和所述第二存储区域分别与所述源文件包括的数据页一一对应,所述第一存储区域包括数据区域和指针区域,所述第二存储区域包括数据区域和指针区域,所述第一存储区域包括的数据区域用于存储所述第一存储区域对应的数据页;
第一设置模块,用于在所述数据页对应的第一存储区域包括的指针区域中设置副本指针,所述副本指针用于指向所述数据页对应的第二存储区域,在所述数据页对应的第二存储区域包括的数据区域中设置数据指针,所述数据指针用于指向所述数据页对应的第一存储区域;
第二复制模块,用于将所述数据页复制到所述数据页对应的第二存储区域包括的数据区域中。
所述装置还包括:
第一存储模块,用于如果修改所述副本文件的某数据页,则接收用于写入副本文件的请求消息以及所述数据页对应的新数据页,将所述数据页对应的新数据页存储在所述数据页对应的第二存储区域包括的数据区域中。
所述装置还包括:
第一获取模块,用于在所述副本文件中获取所述数据页对应的第二存储区域包括的数据区域内存储的数据指针,根据所述获取的数据指针在所述源文件中获取所述数据页对应的第一存储区域,清空所述第一存储区域包括的指针区域内存储的副本指针。
所述装置还包括:
第二获取模块,用于如果修改所述源文件的某数据页,则接收用于写入源文件的请求消息以及所述数据页对应的新数据页,在所述源文件中的所述数据页对应的第一存储区域中读取所述数据页和副本指针,根据所述副本指针在所述副本文件中获取所述数据页对应的第二存储区域,将所述数据页复制到所述数据页对应的第二存储区域包括的数据区域中,以及将所述数据页对应的新数据页存储在所述数据页对应的第一存储区域包括的数据区域中。
所述装置还包括:
第一清空模块,用于清空所述数据页对应的第一存储区域包括的指针区域中存储的副本指针。
所述装置还包括:
第三复制模块,用于接收需要复制的第一文件和用于复制所述第一文件的请求消息,对所述第一文件的文件结构进行复制得到第二文件的文件结构,所述第一文件包括一个或多个存储区域,所述第二文件包括一个或多个第二存储区域,所述第一文件包括的存储区域分别与所述第一文件包括的数据页一一对应,所述第二文件包括的第二存储区域分别与所述第一文件包括的数据页一一对应;
第二设置模块,用于扫描所述第一文件包括的数据页对应的存储区域,如果所述扫描的存储区域包括的指针区域为空,在所述扫描的存储区域包括的指针区域中设置副本指针,所述副本指针用于指向所述数据页在所述第二文件中对应的第二存储区域,在所述数据页在所述第二文件中对应的第二存储区域包括的数据区域设置数据指针,所述数据指针用于指向所述扫描的存储区域;
第四复制模块,用于将所述第一文件包括的数据页分别复制到所述第二文件中对应的第二存储区域包括的数据区域中。
所述装置还包括:
第三设置模块,用于如果所述扫描的存储区域包括的指针区域中存储有副本指针,获取所述副本指针指向的第二存储区域,如果所述获取的副本指针指向的第二存储区域包括的指针区域为空,则在所述获取的存储区域包括的指针区域中设置副本指针,所述副本指针用于指向所述数据页在所述第二文件中对应的第二存储区域,在所述数据页在所述第二文件中对应的第二存储区域包括的数据区域设置数据指针,所述数据指针用于指向所述获取的第二存储区域,如果所述获取的第二存储区域包括的指针区域存储有副本指针,则获取所述副本指针指向的第二存储区域。
所述装置还包括:
第四设置模块,用于如果修改所述第一文件的某数据页,则接收用于写入第一文件的请求消息以及所述数据页对应的新数据页,获取所述数据页在所述第一文件中对应的存储区域,如果所述获取的存储区域包括的数据区域中存在所述数据页,则获取所述获取的存储区域包括的指针区域内存在的副本指针,将所述数据页存储到所述副本指针指向的第二存储区域包括的数据区域中,将所述数据页对应的新数据页存储在所述获取的存储区域包括的数据区域中。
所述装置还包括:
第五设置模块,用于如果所述获取的存储区域包括的数据区域中存在数据指针,则获取所述获取的存储区域包括的指针区域内存在的副本指针,获取所述数据指针指向的一个存储区域和所述副本指针指向的第二存储区域,设置所述第二存储区域包括的数据指针指向所述一个存储区域,以及设置所述一个存储区域包括的副本指针指向所述第二存储区域。
所述第二复制模块包括:
第一获取单元,用于在所述数据页对应的第一存储区域包括的指针区域中获取副本指针;
第二获取单元,用于根据所述获取的副本指针,在所述副本文件中获取所述数据页对应的第二存储区域;
复制单元,用于将所述数据页复制到所述数据页对应的第二存储区域包括的数据区域中。
在本发明实施例中,对源文件的文件结构进行复制得到副本文件的文件结构,在该数据页对应的第一存储区域包括的指针区域中设置副本指针,该副本指针用于指向该数据页对应的第二存储区域,在该数据页对应的第二存储区域包括的数据区域中设置数据指针,该数据指针用于指向该数据页对应的第一存储区域,此时可以根据副本文件中存储的数据指针来读写副本文件,从而减少用户等待复制副本文件的时间,另外,将源文件包括的数据页复制到该数据页对应的第二存储区域包括的数据区域中,如此当源文件和副本文件存储在不同的存储介质中,移走源文件所在的存储介质时,副本文件还可用。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明实施方式作进一步地详细描述。
参见图1,本发明实施例提供了一种复制文件的方法,包括:
步骤101:对源文件的文件结构进行复制得到副本文件的文件结构,源文件的文件结构包括第一存储区域,副本文件的文件结构包括第二存储区域,第一存储区域和第二存储区域分别与源文件包括的数据页一一对应,第一存储区域包括数据区域和指针区域,第二存储区域包括数据区域和指针区域,第一存储区域包括的数据区域用于存储第一存储区域对应的数据页;
步骤102:在该数据页对应的第一存储区域包括的指针区域中设置副本指针,该副本指针用于指向该数据页对应的第二存储区域,在该数据页对应的第二存储区域包括的数据区域中设置数据指针,该数据指针用于指向该数据页对应的第一存储区域;
步骤103:将源文件包括的数据页复制到该数据页对应的第二存储区域包括的数据区域中。
在本发明实施例中,对源文件的文件结构进行复制得到副本文件的文件结构,在该数据页对应的第一存储区域包括的指针区域中设置副本指针,该副本指针用于指向该数据页对应的第二存储区域,在该数据页对应的第二存储区域包括的数据区域中设置数据指针,该数据指针用于指向该数据页对应的第一存储区域,此时可以根据副本文件中存储的数据指针来读写副本文件,从而减少用户等待复制副本文件的时间,另外,将源文件包括的数据页复制到该数据页对应的第二存储区域包括的数据区域中,如此当源文件和副本文件存储在不同的存储介质中,移走源文件所在的存储介质时,副本文件还可用。
本发明实施例提供了一种复制文件的方法。其中,在本发明实施例中,需要对源文件复制得到一个副本文件,参见图2,该方法包括:
步骤201:接收需要复制的源文件和用于复制源文件的请求消息;
其中,参见图3,位于应用层的应用程序需要对某源文件进行复制时,应用程序将需要复制的源文件和用于复制源文件的请求消息通过终端的操作系统子系统和I/O(Input/Output,输入输出端口)子系统管理器提交给文件系统驱动模块。
其中,文件系统驱动模块接收该源文件和用于复制源文件的请求消息,然后可以执行如下201至207的步骤。
其中,在本发明实施例中,源文件包括一个或多个数据页,源文件的文件结构包一个或多个第一存储区域,第一存储区域与源文件包括的数据页一一对应,第一存储区域包括数据区域和指针区域,第一存储区域包括的数据区域用于存储其自身对应的数据页。
其中,第一存储区域包括的数据区域的大小大于或等于第一存储区域对应的数据页的大小,第一存储区域包括的指针区域的大于小于其自身包括的数据区域的大小。
例如,参见图4,源文件包括数据页1、2、3、4和5,源文件的文件结构包括数据页1对应的第一存储区域a1,数据页2对应的第一存储区域a2,数据页3对应的第一存储区域a3,数据页4对应的第一存储区域a4,以及数据页5对应的第一存储区域a5,数据页1存储在其对应的第一存储区域a1包括的数据区域内,数据页2存储在其对应的第一存储区域a2包括的数据区域内,数据页3存储在其对应的第一存储区域a3包括的数据区域内,数据页4存储在其对应的第一存储区域a4包括的数据区域内,以及数据页5存储在其对应的第一存储区域a5;其中,第一存储区域a1、a2、a3、a4和a5各自包括的指针区域都为空。
步骤202:对源文件的文件结构进行复制得到副本文件的文件结构;
其中,对源文件的文件结构进行复制得到副本文件的文件结构,副本文件的文件结构包括第二存储区域,源文件包括的第一存储区域与副本文件包括的第二存储区域一一对应,副本文件包括的第二存储区域与源文件包括的数据页一一对应,第二存储区域包括数据区域和指针区域。
例如,对如图4所示的源文件的文件结构进行复制得到如图5所示的副本文件的文件结构,副本文件的文件结构包括第二存储区域b1、b2、b3、b4和b5,源文件包括的第一存储区域a1、a2、a3、a4和a5分别与第二存储区域b1、b2、b3、b4和b5一一对应,第二存储区域b1、b2、b3、b4和b5分别与源文件包括的数据页1、2、3、4和5一一对应。
步骤203:在源文件包括的数据页对应的第一存储区域包括的指针区域中设置副本指针,该副本指针用于指向该数据页对应的第二存储区域,在该数据页对应的第二存储区域包括的数据区域中设置数据指针,该数据指针用于指向该数据页对应的第一存储区域;
例如,参见图5,对于源文件包括的数据页1,在数据页1对应的第一存储区域a1包括的指针区域中设置副本指针1,副本指针1用于指向数据页1对应的第二存储区域b1,在数据页1对应的第二存储区域b1包括的数据区域中设置数据指针1,数据指针1用于指向数据页1对应的第一存储区域a1;对于数据页2、3、4和5,分别按上述相同的过程来执行。
其中,在执行本步骤之后,就可以对副本文件中包括的数据页进行读取和写入。
其中,当用户或应用程序需要读取副本文件包括的某数据页时,用户或应用程序提交需要读取的数据页的标识和用于读取副本文件的请求消息给文件系统驱动模块,文件系统驱动模块接收该数据页的标识和用于读取副本文件的请求消息,然后执行如下步骤204:
步骤204:接收需要读取的数据页的标识和用于读取副本文件的请求消息,根据该数据页的标识在副本文件中获取对应的数据页;
具体地,接收需要读取的数据页的标识和用于读取副本文件的请求消息,根据该数据页的标识获取该数据页在副本文件中对应的第二存储区域,在该第二存储区域包括的数据区域中获取该数据页对应的数据指针,根据该数据指针从源文件中获取该数据页对应的第一存储区域,在该数据页对应的第一存储区域包括的数据区域中获取该数据页。
例如,假设需要读取副本文件的数据页1,获取数据页1对应的第二存储区域b1,在第二存储区域b1包括的数据区域中获取数据页1对应的数据指针1,根据数据指针1,从源文件中获取数据页1对应的第一存储区域a1,在第一存储区域a1包括的数据区域中获取数据页1。
其中,当用户或应用程序需要修改副本文件包括的某数据页时,用户或应用程序提交需要修改的该数据页对应的新数据页和用于写入副本文件的请求消息给文件系统驱动模块,文件系统驱动模块接收该数据页对应的新数据和用于写入副本文件的请求消息,然后执行如下步骤205:
步骤205:接收用于写入副本文件的请求消息以及该数据页对应的新数据页,将该数据页对应的新数据页存储在该数据页对应的第二存储区域包括的数据区域中;
进一步地,在源文件中,清空该数据页对应的第一存储区域包括的指针区域中存储的副本指针。
例如,参见图6,当需要修改副本文件的数据页1时,数据页1对应的新数据页为新数据页1,在副本文件中将数据页1对应的新数据页1存储在副本文件的数据页1对应的第二存储区域b1包括的数据区域中;在源文件中,清空数据页1对应的第一存储区域a1包括的指针区域内存储的副本指针1。
其中,当用户或应用程序需要修改源文件包括的某数据页时,用户或应用程序提交需要修改的该数据页对应的新数据页和用于写入源文件的请求消息给文件系统驱动模块,文件系统驱动模块接收该数据页对应的新数据页和用于写入副本文件的请求消息,然后执行如下步骤206:
步骤206:接收用于写入源文件的请求消息以及数据页对应的新数据页,在源文件中的该数据页对应的第一存储区域中读取该数据页和副本指针,根据该副本指针在副本文件中获取该数据页对应的第二存储区域,将该数据页复制到其对应的第二存储区域包括的数据区域中,以及将该数据页对应的新数据页存储在该数据页对应的第一存储区域包括的数据区域中;
进一步地,在源文件中清空该数据页对应的第一存储区域包括的指针区域内存储的副本指针。
例如,参见图7,当需要修改源文件的数据页2时,数据页2对应的新数据页为新数据页2,在源文件中的数据页2对应的第一存储区域a2中读取数据页2和副本指针2,根据副本指针2在副本文件中获取数据页2对应的第二存储区域b2,将数据页2复制到数据页2对应的第二存储区域b2包括的数据区域中,将数据页2对应的新数据页2存储在第一存储区域a2包括的数据区域中,并清空第一存储区域a2包括的指针区域内存的副本指针。
其中,当执行完步骤204之后,可以通过207的步骤将源文件包括的数据页分别复制到副本文件包括的第二存储区域中,包括:
步骤207:将源文件包括的数据页复制到副本文件内该数据页对应的第二存储区域包括的数据区域中。
具体地,从数据页所在的第一存储区域包括的指针区域中读取该数据页对应的副本指针,根据该副本指针获取该数据页对应的第二存储区域,将该数据页从源文件复制到该数据页对应的第二存储区域包括的数据区域中。
进一步地,将该数据页复制到该数据页对应的第二存储区域包括的数据区域中后,可以清空该数据页对应的第一存储区域包括的指针区域内存储的副本指针。
例如,参见图8,对于源文件包括的数据页3,从数据页3对应的第一存储区域a3包括的指针区域中读取数据页3对应的副本指针3,根据副本指针3获取数据页3对应的第二存储区域b3,将数据页3从源文件中复制到第二存储区域b3包括的数据区域中,清空第一存储区域a3包括的指针区域内存储的副本指针3;对于源文件包括的数据页4,从数据页4对应的第一存储区域a4包括的指针区域中读取数据页4对应的副本指针4,根据副本指针4获取数据页4对应的第二存储区域b4,将数据页4从源文件中复制到第二存储区域b4包括的数据区域中,清空第一存储区域a4包括的指针区域内存储的副本指针4;以及,对于源文件包括的数据页5,从数据页5对应的第一存储区域a5包括的指针区域中读取数据页5对应的副本指针5,根据副本指针5获取数据页5对应的第二存储区域b5,将数据页5从源文件中复制到第二存储区域b5包括的数据区域中,清空第一存储区域a5包括的指针区域内存储的副本指针5。
在本发明实施例中,对源文件的文件结构进行复制得到副本文件的文件结构,在该数据页对应的第一存储区域包括的指针区域中设置副本指针,该副本指针用于指向该数据页对应的第二存储区域,在该数据页对应的第二存储区域包括的数据区域中设置数据指针,该数据指针用于指向该数据页对应的第一存储区域,此时可以根据副本文件中存储的数据指针来读写副本文件,从而减少用户等待复制副本文件的时间,另外,将源文件包括的数据页复制到该数据页对应的第二存储区域包括的数据区域中,如此当源文件和副本文件存储在不同的存储介质中,移走源文件所在的存储介质时,副本文件还可用。
本发明实施例提供了一种复制文件的方法。其中,在本发明实施例中,当通过图2所示的实施例对源文件进行复制后得到副本文件,然后可以通过本发明实施例提供的方法来对源文件或副本文件进行复制,参见图9,该方法包括:
步骤301:接收需要复制的第一文件和用于复制第一文件的请求消息,第一文件可以为源文件或副本文件;
其中,参见图3,位于应用层的应用程序需要对第一文件进行复制时,应用程序将需要复制的第一文件和用于复制第一文件的请求消息通过终端的操作系统子系统和I/O子系统管理器提交给文件系统驱动模块。
其中,文件系统驱动模块接收第一文件和用于复制第一文件的请求消息,然后可以执行如下301至309的步骤。
其中,在本发明实施例中,第一文件包括一个或多个数据页,第一文件的文件结构包一个或多个存储区域,第一文件包括的存储区域与第一文件包括的数据页一一对应,该存储区域包括数据区域和指针区域,该存储区域包括的数据区域用于存储其自身对应的数据页。
其中,存储区域包括的数据区域的大小大于或等于存储区域对应的数据页的大小,存储区域包括的指针区域的大于小于其自身包括的数据区域的大小。
例如,参见图10,当需要对如图5所示的副本文件进行复制,该副本文件为第一文件,第一文件包括数据页1、2、3、4和5,第一文件的文件结构包括数据页1对应的存储区域b1,数据页2对应的存储区域b2,数据页3对应的存储区域b3,数据页4对应的存储区域b4,以及数据页5对应的存储区域b5,数据页1存储在其对应的存储区域b1包括的数据区域内,数据页2存储在其对应的存储区域b2包括的数据区域内,数据页3存储在其对应的存储区域b3包括的数据区域内,数据页4存储在其对应的存储区域b4包括的数据区域内,以及数据页5存储在其对应的存储区域b5;其中,存储区域a1、a2、a3、a4和a5各自包括的指针区域都为空。
步骤302:对第一文件的文件结构进行复制得到第二文件的文件结构;
其中,对第一文件的文件结构进行复制得到第二文件的文件结构,第二文件的文件结构包括第二存储区域,第一文件包括的存储区域分别与第二文件包括的第二存储区域一一对应,第二文件包括的第二存储区域分别与第一文件包括的数据页一一对应。
例如,对第一文件的文件结构进行复制得到如图10所示的第二文件的文件结构,第二文件的文件结构包括包括第二存储区域c1、c2、c3、c4和c5,第一文件包括的存储区域b1、b2、b3、b4和b5分别与第二文件包括的第二存储区域c1、c2、c3、c4和c5一一对应,第二文件包括的第二存储区域c1、c2、c3、c4和c5分别与第一文件包括的数据页1、2、3、4和5一一对应。
步骤303:扫描第一文件包括的数据页对应的存储区域,判断扫描的存储区域包括的指针区域是否为空,如果为空,则执行步骤304,如果不为空,则扫描的存储区域包括的指针区域存储有副本指针,执行步骤305
步骤304:在扫描的存储区域包括的指针区域中设置副本指针,该副本指针用于指向该数据页在第二文件中对应的第二存储区域,在该数据页在第一文件中对应的存储区域包括的数据区域中设置数据指针,该数据指针用于指向该数据页在第一文件中对应的存储区域,执行步骤309;
例如,扫描第一文件包括的数据页1对应的存储区域b1,判断扫描的存储区域b1包括的指针区域为空,在扫描的存储区域b1包括的指针区域中设置副本指针21,副本指针21用于指向数据页1在第二文件中对应的第二存储区域c1,在数据页1在第二文件中对应的第二存储区域c1包括的数据区域中设置数据指针21,数据指针21用于指向数据页1在第一文件中对应的存储区域b1。
步骤305:获取扫描的存储区域包括的指针区域存储的副本指针指向的第二存储区域;
步骤306:判断获取的第二存储区域包括的指针区域是否为空,如果是,则执行步骤307,如果否,则获取的第二存储区域包括的指针区域中存储有副本指针,执行步骤308;
步骤307:在获取的第二存储区域包括的指针区域中设置副本指针,该副本指针用于指向该数据页在第二文件中对应的第二存储区域,在该数据页在第二文件中对应的第二存储区域包括的数据区域中设置数据指针,该数据指针用于指向获取的第二存储区域,执行步骤309;
步骤308:获取获取的第二存储区域包括的指针区域存储的副本指针指向的第二存储区域,返回步骤306;
进一步地,如果第一文件中还存在未扫描的数据页对应的存储区域,则扫描下一个数据页对应的存储区域,并从上述步骤303开始执行。例如,继续扫描第一文件包括的数据页2、3、4和5,并对数据页2、3、4和5分别执行上述步骤303至308的步骤,得到结果如表10所示。
其中,当执行完步骤304之后,可以通过309的步骤将第一文件包括的数据页分别复制到第二文件包括的第二存储区域中,包括:
步骤309:将第一文件包括的数据页复制到第二文件内该数据页对应的第二存储区域包括的数据区域中。
具体地,本步骤可以通过如下(A)-(D)的步骤来实现,包括:
(A):扫描第二文件包括的数据页对应的第二存储区域,获取扫描的第二存储区域包括的数据区域内存储的数据指针,获取该数据指针指向的存储区域;
(B):对该存储区域包括的数据区域进行判断,如果该存储区域包括的数据区域存储有数据指针,则执行(C),如果该存储区域包括的数据区域存储有数据页,则执行(D);
(C):获取该数据指针指向的存储区域包括的数据区域存储的数据指针,获取该数据指针指向的存储区域,返回执行(B);
(D):将该数据页复制到扫描的第二存储区域包括的数据区域中,清空该数据区域包括的指针区域存储的副本指针。
其中,如果第二文件还存在未扫描的数据页对应的第二存储区域,扫描下一个数据页对应的第二存储区域,然后从上述步骤(A)开始执行。
其中,当扫描完第一文件包括的数据页时,可以修改第一文件中的某数据页。
进一步地,如果修改第一文件的某数据页,则接收用于写入第一文件的请求消息以及该数据页对应的新数据页,获取该数据页在第一文件中对应的存储区域,如果获取的存储区域包括的数据区域中存在该数据页,则获取获取的存储区域包括的指针区域内存在的副本指针,将该数据页存储到该副本指针指向的第二存储区域包括的数据区域中,将该数据页对应的新数据页存储在获取的存储区域包括的数据区域中。
进一步地,如果获取的存储区域包括的数据区域中存在数据指针,则获取获取的存储区域包括的指针区域内存在的副本指针,获取该数据指针指向的一个存储区域和该副本指针指向的第二存储区域,设置该第二存储区域包括的数据指针指向该数据指针指向的一个存储区域,以及设置该数据指针指向的一个存储区域包括的副本指针指向第二存储区域,将该数据页对应的新数据存储在该数据页在第一文件对应的存储区域包括的数据区域中。
例如,参见图11,如果修改第一文件包括的数据页1,接收用于写入第一文件的请求消息以及数据页1对应的新数据页1,获取数据页1在第一文件中对应的存储区域b1,判断获取的存储区域b1包括的数据区域中存在数据指针11,则获取存储区域b1包括的指针区域内存在的副本指针21,获取数据指针11指向的一个存储区域a1和副本指针21指向的第二存储区域c1,设置第二存储区域c1包括的数据指针指向存储区域a1,以及设置存储区域a1包括的副本指针指向第二存储区域c1,将数据页1对应的新数据页1存储在数据页1在第一文件对应的存储区域b1包括的数据区域中。
其中,当用户或应用程序需要读取第二文件包括的某数据页时,用户或应用程序提交需要读取的数据页的标识和用于读取第二文件的请求消息给文件系统驱动模块,文件系统驱动模块执行如下步骤(1)至(4),分别为:
(1):接收需要读取的数据页的标识和用于读取第二文件的请求消息,根据该数据页的标识获取该数据页在第二文件中对应的第二存储区域;
(2):在获取的第二存储区域包括的数据区域中获取该数据页对应的数据指针,判断该数据指针指向的存储区域;
(3):如果该数据指针指向的存储区域为副本文件的第二存储区域时,则获取该数据指针指向的第二存储区域,返回(2);
(4):如果该数据指针指向的存储区域为源文件的第一存储区域,则从数据指针指向的第一存储区域中获取该数据页。
其中,当用户或应用程序需要修改第二文件包括的某数据页时,用户或应用程序提交需要修改的该数据页对应的新数据页和用于写入第二文件的请求消息给文件系统驱动模块,文件系统驱动模块接收该数据页对应的新数据页和用于写入第二文件的请求消息,然后执行如下步骤:
进一步地,接收用于写入第二文件的请求消息以及该数据页对应的新数据页,将该数据页对应的新数据页存储在该数据页在第二文件中对应的第二存储区域包括的数据区域中;
具体地,接收用于写入第二文件的请求消息以及该数据页对应的新数据页,获取该数据页在第二文件中的第二存储区域,从获取的第二存储区域包括的数据区域中获取数据指针,获取该数据指针指向的一个存储区域,将该一个存储区域包括的指针区域内存储的副本指针清空,将该数据页对应的新数据存储在获取的第二存储区域包括的数据区域中。
例如,参见图12,当需要修改第二文件的数据页2时,数据页2对应的新数据页为新数据页2,在第二文件中获取数据页2对应的第二存储区域c2,获取第二存储区域c2包括的数据指针22,获取该数据指针22指向的存储区域b2,清空存储区域b2包括的指针区域内存储的副本指针,以及将数据页2对应的新数据页2存储在第二文件中的数据页2对应的第二存储区域b2包括的数据区域中。
其中,当用户或应用程序需要修改源文件包括的某数据页时,用户或应用程序提交需要该数据页对应的新数据页和用于写入源文件的请求消息给文件系统驱动模块,文件系统驱动模块接收该数据页对应的新数据和用于写入源文件的请求消息,然后执行如下步骤:
进一步地,接收用于写入源文件的请求消息以及该数据页对应的新数据页,获取该数据页在源文件中对应的第一存储区域包括的指针区域内存储的副本指针,根据获取的副本指针获取其指向的第二存储区域,将该数据页复制到该第二存储区域包括的数据区域中,以及清空该第一存储区域包括的指针区域内存储的副本指针。
例如,参见图13,当需要修改源文件的数据页3时,数据页3对应的新数据页为新数据页3,在源文件中的数据页3对应的第一存储区域a3包括的数据区域中读取数据页3和副本指针13,根据副本指针13获取指向的在第一文件中对应的存储区域b3,将数据页3复制到数据页3对应的存储区域b3包括的数据区域中,将数据页3对应的新数据页3存储在第一存储区域a3包括的数据区域中,并清空第一存储区域a3包括的指针区域内存储的副本指针。
在本发明实施例中,对源文件的文件结构进行复制得到副本文件的文件结构,在该数据页对应的第一存储区域包括的指针区域中设置副本指针,该副本指针用于指向该数据页对应的第二存储区域,在该数据页对应的第二存储区域包括的数据区域中设置数据指针,该数据指针用于指向该数据页对应的第一存储区域,此时可以根据副本文件中存储的数据指针来读写副本文件,从而减少用户等待复制副本文件的时间,另外,将源文件包括的数据页复制到该数据页对应的第二存储区域包括的数据区域中,如此当源文件和副本文件存储在不同的存储介质中,移走源文件所在的存储介质时,副本文件还可用。
参见图13,本发明实施例提供了一种复制文件的装置,装置包括:
第一复制模块401,用于对所述源文件的文件结构进行复制得到副本文件的文件结构,所述源文件的文件结构包括第一存储区域,所述副本文件的文件结构包括第二存储区域,所述第一存储区域和所述第二存储区域分别与所述源文件包括的数据页一一对应,所述第一存储区域包括数据区域和指针区域,所述第二存储区域包括数据区域和指针区域,所述第一存储区域包括的数据区域用于存储所述第一存储区域对应的数据页;
第一设置模块402,用于在所述数据页对应的第一存储区域包括的指针区域中设置副本指针,所述副本指针用于指向所述数据页对应的第二存储区域,在所述数据页对应的第二存储区域包括的数据区域中设置数据指针,所述数据指针用于指向所述数据页对应的第一存储区域;
第二复制模块403,用于将所述数据页复制到所述数据页对应的第二存储区域包括的数据区域中。
进一步地,所述装置还包括:
第一存储模块,用于如果修改所述副本文件的某数据页,则接收用于写入副本文件的请求消息以及所述数据页对应的新数据页,将所述数据页对应的新数据页存储在所述数据页对应的第二存储区域包括的数据区域中。
进一步地,所述装置还包括:
第一获取模块,用于在所述副本文件中获取所述数据页对应的第二存储区域包括的数据区域内存储的数据指针,根据所述获取的数据指针在所述源文件中获取所述数据页对应的第一存储区域,清空所述第一存储区域包括的指针区域内存储的副本指针。
进一步地,所述装置还包括:
第二获取模块,用于如果修改所述源文件的某数据页,则接收用于写入源文件的请求消息以及所述数据页对应的新数据页,在所述源文件中的所述数据页对应的第一存储区域中读取所述数据页和副本指针,根据所述副本指针在所述副本文件中获取所述数据页对应的第二存储区域,将所述数据页复制到所述数据页对应的第二存储区域包括的数据区域中,以及将所述数据页对应的新数据页存储在所述数据页对应的第一存储区域包括的数据区域中。
进一步地,所述装置还包括:
第一清空模块,用于清空所述数据页对应的第一存储区域包括的指针区域中存储的副本指针。
进一步地,所述装置还包括:
第三复制模块,用于接收需要复制的第一文件和用于复制所述第一文件的请求消息,对所述第一文件的文件结构进行复制得到第二文件的文件结构,所述第一文件包括一个或多个存储区域,所述第二文件包括一个或多个第二存储区域,所述第一文件包括的存储区域分别与所述第一文件包括的数据页一一对应,所述第二文件包括的第二存储区域分别与所述第一文件包括的数据页一一对应;
第二设置模块,用于扫描所述第一文件包括的数据页对应的存储区域,如果所述扫描的存储区域包括的指针区域为空,在所述扫描的存储区域包括的指针区域中设置副本指针,所述副本指针用于指向所述数据页在所述第二文件中对应的第二存储区域,在所述数据页在所述第二文件中对应的第二存储区域包括的数据区域设置数据指针,所述数据指针用于指向所述扫描的存储区域;
第四复制模块,用于将所述第一文件包括的数据页分别复制到所述第二文件中对应的第二存储区域包括的数据区域中。
进一步地,所述装置还包括:
第三设置模块,用于如果所述扫描的存储区域包括的指针区域中存储有副本指针,获取所述副本指针指向的第二存储区域,如果所述获取的副本指针指向的第二存储区域包括的指针区域为空,则在所述获取的存储区域包括的指针区域中设置副本指针,所述副本指针用于指向所述数据页在所述第二文件中对应的第二存储区域,在所述数据页在所述第二文件中对应的第二存储区域包括的数据区域设置数据指针,所述数据指针用于指向所述获取的第二存储区域,如果所述获取的第二存储区域包括的指针区域存储有副本指针,则获取所述副本指针指向的第二存储区域。
进一步地,所述装置还包括:
第四设置模块,用于如果修改所述第一文件的某数据页,则接收用于写入第一文件的请求消息以及所述数据页对应的新数据页,获取所述数据页在所述第一文件中对应的存储区域,如果所述获取的存储区域包括的数据区域中存在所述数据页,则获取所述获取的存储区域包括的指针区域内存在的副本指针,将所述数据页存储到所述副本指针指向的第二存储区域包括的数据区域中,将所述数据页对应的新数据页存储在所述获取的存储区域包括的数据区域中。
进一步地,所述装置还包括:
第五设置模块,用于如果所述获取的存储区域包括的数据区域中存在数据指针,则获取所述获取的存储区域包括的指针区域内存在的副本指针,获取所述数据指针指向的一个存储区域和所述副本指针指向的第二存储区域,设置所述第二存储区域包括的数据指针指向所述一个存储区域,以及设置所述一个存储区域包括的副本指针指向所述第二存储区域。
其中,所述第二复制模块403包括:
第一获取单元,用于在所述数据页对应的第一存储区域包括的指针区域中获取副本指针;
第二获取单元,用于根据所述获取的副本指针,在所述副本文件中获取所述数据页对应的第二存储区域;
复制单元,用于将所述数据页复制到所述数据页对应的第二存储区域包括的数据区域中。
在本发明实施例中,对源文件的文件结构进行复制得到副本文件的文件结构,在该数据页对应的第一存储区域包括的指针区域中设置副本指针,该副本指针用于指向该数据页对应的第二存储区域,在该数据页对应的第二存储区域包括的数据区域中设置数据指针,该数据指针用于指向该数据页对应的第一存储区域,此时可以根据副本文件中存储的数据指针来读写副本文件,从而减少用户等待复制副本文件的时间,另外,将源文件包括的数据页复制到该数据页对应的第二存储区域包括的数据区域中,如此当源文件和副本文件存储在不同的存储介质中,移走源文件所在的存储介质时,副本文件还可用。
参见图14,本发明实施例提供了一种复制文件的装置,装置包括:
存储器501和处理器502,用于执行如下的一种复制文件的方法:
对所述源文件的文件结构进行复制得到副本文件的文件结构,所述源文件的文件结构包括第一存储区域,所述副本文件的文件结构包括第二存储区域,所述第一存储区域和所述第二存储区域分别与所述源文件包括的数据页一一对应,所述第一存储区域包括数据区域和指针区域,所述第二存储区域包括数据区域和指针区域,所述第一存储区域包括的数据区域用于存储所述第一存储区域对应的数据页;
在所述数据页对应的第一存储区域包括的指针区域中设置副本指针,所述副本指针用于指向所述数据页对应的第二存储区域,在所述数据页对应的第二存储区域包括的数据区域中设置数据指针,所述数据指针用于指向所述数据页对应的第一存储区域;
将所述数据页复制到所述数据页对应的第二存储区域包括的数据区域中。
所述在所述数据页对应的第二存储区域包括的数据区域中设置数据指针之后,还包括:
如果修改所述副本文件的某数据页,则接收用于写入副本文件的请求消息以及所述数据页对应的新数据页,将所述数据页对应的新数据页存储在所述数据页对应的第二存储区域包括的数据区域中。
所述将所述数据页对应的新数据页存储在所述数据页对应的第二存储区域包括的数据区域中之前,还包括:
在所述副本文件中获取所述数据页对应的第二存储区域包括的数据区域内存储的数据指针,根据所述获取的数据指针在所述源文件中获取所述数据页对应的第一存储区域,清空所述第一存储区域包括的指针区域内存储的副本指针。
所述在所述数据页对应的第二存储区域包括的数据区域中设置数据指针之后,还包括:
如果修改所述源文件的某数据页,则接收用于写入源文件的请求消息以及所述数据页对应的新数据页,在所述源文件中的所述数据页对应的第一存储区域中读取所述数据页和副本指针,根据所述副本指针在所述副本文件中获取所述数据页对应的第二存储区域,将所述数据页复制到所述数据页对应的第二存储区域包括的数据区域中,以及将所述数据页对应的新数据页存储在所述数据页对应的第一存储区域包括的数据区域中。
所述将所述数据页复制到所述数据页对应的第二存储区域包括的数据区域中之后,还包括:
清空所述数据页对应的第一存储区域包括的指针区域中存储的副本指针。
所述方法还包括:
接收需要复制的第一文件和用于复制所述第一文件的请求消息,对所述第一文件的文件结构进行复制得到第二文件的文件结构,所述第一文件包括一个或多个存储区域,所述第二文件包括一个或多个第二存储区域,所述第一文件包括的存储区域分别与所述第一文件包括的数据页一一对应,所述第二文件包括的第二存储区域分别与所述第一文件包括的数据页一一对应;
扫描所述第一文件包括的数据页对应的存储区域,如果所述扫描的存储区域包括的指针区域为空,在所述扫描的存储区域包括的指针区域中设置副本指针,所述副本指针用于指向所述数据页在所述第二文件中对应的第二存储区域,在所述数据页在所述第二文件中对应的第二存储区域包括的数据区域设置数据指针,所述数据指针用于指向所述扫描的存储区域;
将所述第一文件包括的数据页分别复制到所述第二文件中对应的第二存储区域包括的数据区域中。
所述方法还包括:
如果所述扫描的存储区域包括的指针区域中存储有副本指针,获取所述副本指针指向的第二存储区域,如果所述获取的副本指针指向的第二存储区域包括的指针区域为空,则在所述获取的存储区域包括的指针区域中设置副本指针,所述副本指针用于指向所述数据页在所述第二文件中对应的第二存储区域,在所述数据页在所述第二文件中对应的第二存储区域包括的数据区域设置数据指针,所述数据指针用于指向所述获取的第二存储区域,如果所述获取的第二存储区域包括的指针区域存储有副本指针,则获取所述副本指针指向的第二存储区域。
所述在所述数据页在所述第二文件中对应的第二存储区域包括的数据区域设置数据指针之后,还包括:
如果修改所述第一文件的某数据页,则接收用于写入第一文件的请求消息以及所述数据页对应的新数据页,获取所述数据页在所述第一文件中对应的存储区域,如果所述获取的存储区域包括的数据区域中存在所述数据页,则获取所述获取的存储区域包括的指针区域内存在的副本指针,将所述数据页存储到所述副本指针指向的第二存储区域包括的数据区域中,将所述数据页对应的新数据页存储在所述获取的存储区域包括的数据区域中。
所述方法还包括:
如果所述获取的存储区域包括的数据区域中存在数据指针,则获取所述获取的存储区域包括的指针区域内存在的副本指针,获取所述数据指针指向的一个存储区域和所述副本指针指向的第二存储区域,设置所述第二存储区域包括的数据指针指向所述一个存储区域,以及设置所述一个存储区域包括的副本指针指向所述第二存储区域。
所述将所述数据页复制到所述数据页对应的第二存储区域包括的数据区域中,包括:
在所述数据页对应的第一存储区域包括的指针区域中获取副本指针;
根据所述获取的副本指针,在所述副本文件中获取所述数据页对应的第二存储区域;
将所述数据页复制到所述数据页对应的第二存储区域包括的数据区域中。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。