一种可跨磁盘转移数据的方法及系统与流程

文档序号:31894519发布日期:2022-10-22 02:13阅读:77来源:国知局
一种可跨磁盘转移数据的方法及系统与流程

1.本发明属于磁盘分区管理技术领域,尤其涉及一种能够跨磁盘转移数据以对系统分区进行扩展的方法及系统。


背景技术:

2.windows操作系统以及第三方管理磁盘管理软件仅支持使用系统分区所在磁盘上的空闲空间来对系统分区进行扩容,如果该磁盘上已经没有更多可用空间,就只能使用文件搬运的方式来释放系统分区的空间,难以有效利用其它磁盘的空间。
3.中国专利201010143006.6公开了一种搬移软件的方法及装置,通过将待搬移软件对应的文件拷贝到搬移的目标文件夹,并通过在原文件夹所在位置建立指向目标文件夹所在路径的链接文件,其使用拷贝的方法来搬移可以保证软件数据不丢失,且使用链接文件的方式可以保证在搬移前位置仍可以访问该软件,不影响软件性能。但该专利存在以下缺陷:1)未对目标位置进行限制,用户很容易因为误操作而删除掉目标位置,因而影响所搬运数据的正常使用;2)未对搬运后软件的权限和属性进行处理,存在软件搬运成功后无法正常运行的情况;3)未对搬运不成功的数据进行处理,存在数据不完整的缺陷。
4.4)同时,该专利是单纯搬运软件,描述的过滤名单基于软件路径、软件名称和注册表键值,为xml结构较为静态。
5.中国专利201010586809.9公开了一种应用程序文件搬移方法及系统根据收集的待搬移应用程序文件占用信息,当删除应用程序文件所在源文件夹失败时,对应用程序文件进行解锁,从而实现应用程序文件的搬移,解决了搬移成功率低的问题,简化了应用程序文件的搬移操作,提高了应用程序文件搬移的自动化程度,及搬移的成功率。
6.但该专利仍然存在目标位置可能被误删导致数据无法使用、未处理搬运后文件目录的权限导致无法正常运行,和数据不完整的缺陷。同时,该专利提到当待搬移应用程序被占用,导致删除或搬运失败时,通过解锁的方式来处理,但此种方式对文件和程序有一定的破坏性。


技术实现要素:

7.有鉴于此,本发明提供一种可跨磁盘转移数据的方法及系统,可实现跨磁盘转移数据以扩展系统分区。
8.为解决以上技术问题,本发明的技术方案为采用一种可跨磁盘转移数据的方法,包括:根据数据转移策略对系统分区中的数据进行扫描,排除数据转移策略中指定不转移的数据,统计可转移的数据量,并将可转移数据的路径复制到内存;所述数据包括文件和
目录;根据可转移的数据量从系统分区所在磁盘以外的磁盘上的分区分割足够的空闲存储区域;在分割出来的存储区域上建立新分区并分配未使用的盘符;根据内存中存储的可转移数据的路径遍历可转移的数据,根据数据中的目录在新分区中创建同名目录,将系统分区中的可转移数据转移到新分区中对应的目录下,并对转移后的数据设置与原始数据相同的属性和权限;对已转移的数据删除其系统分区中的原始数据;若某个数据转移失败,则对该数据所在的一级子目录进行回滚操作;若某个一级子目录成功转移,则在该一级子目录的原始位置新建一个符号链接,所述符号链接指向数据转移后的位置;若转移成功的目录为shell目录,建立符号链接后创建对应的desktop.ini文件;对于进行回滚操作的一级子目录,在pe系统下进行数据转移。
9.作为一种改进,建立新分区后对新分区进行隐藏。
10.作为一种进一步的改进,在根据数据中的目录在新分区中创建同名目录之前,先对待转移的目录进行重命名,若重命名失败则认为该目录被占用,将该目录列为转移失败;若重命名成功则认为该目录未被占用,将目录名重新命名为原始目录名。
11.作为另一种更进一步的改进,根据数据转移策略创建配置文件,所述配置文件包括若干对需要进行转移数据进行记录的配置项以及排除条件;逐个处理配置文件中的配置项,读取对应的环境变量,统计每个配置项下所有的数据量;若数据为文件则直接累计,若数据为目录则进行递归累计;将统计好的数据设置为待转移项。
12.作为一种改进,从系统分区所在磁盘以外的磁盘上的分区分割足够的空闲存储区域的方法包括:根据统计到的可转移的数据量设置所需空间大小;遍历系统分区所在磁盘以外磁盘上的其他分区,若该分区空闲存储区域大于所需空间且空闲存储空间为已占用空间的n倍,则将该分区添加到分区列表;从分区列表中选择一个分区;从被选择的分区中分割一部分存储空间用于数据转移。
13.作为一种进一步的改进,所述所需空间为可转移数据量的1.2~1.5倍,所述n为1.1~1.3。
14.作为一种改进,数据转移完毕后将系统分区中对应的原始数据的权限设置为当前用户所有,属性设置可读写。
15.作为一种改进,所述在pe系统下进行数据转移的方法包括:创建pe系统,生成iso文件;修改系统启动项为pe系统优先;重启设备进入pe系统,在pe系统内进行数据转移。
16.本发明还提供一种可跨磁盘转移数据的系统,包括:扫描模块,用于根据数据转移策略对系统分区中的数据进行扫描,排除数据转移
策略中指定不转移的数据,统计可转移的数据量,并将可转移数据的路径复制到内存;所述数据包括文件和目录;存储空间分割模块,用于根据可转移的数据量从系统分区所在磁盘以外的磁盘上的分区分割足够的空闲存储区域;并在分割出来的存储区域上建立新分区并分配未使用的盘符;数据转移模块,用于将系统分区中的可转移数据转移到新分区中;pe系统模块,用于对于进行回滚操作的一级目录,在pe系统下进行数据转移。
17.作为一种改进,所述数据转移模块包括:重命名模块,用于在根据数据中的目录在新分区中创建同名目录之前,先对待转移的目录进行重命名,若重命名失败则认为该目录被占用,将该目录列为转移失败;若重命名成功则认为该目录未被占用,将目录名重新命名为原始目录名。
18.新目录创建模块,用于根据数据中的目录在新分区中创建同名目录;转移模块,用于根据内存中存储的可转移数据的路径将系统分区中的可转移数据复制到新分区中对应的目录下,并对转移后的数据设置与原始数据相同的属性;数据操作模块,用于对已转移的数据删除其系统分区中的原始数据;回滚模块,用于在某个数据转移失败,对该数据所在的一级目录进行回滚操作;链接设置模块,用于在某个一级目录成功转移后,在该一级目录的原始位置新建一个符号链接,所述符号链接指向数据转移后的位置;若转移成功的目录为shell目录,建立符号链接后创建对应的desktop.ini文件。
19.本发明的有益之处在于:1、本发明不仅可以转移program file中的软件还能转移如program data、user home、shell目录(“下载”、“视频”之类)等占用存储空间较大的数据目录,且搬运和排除项需要在运行时根据环境动态获取。具体需要转移的数据在运行时获取,提高了数据转移的准确性,与软件路径、软件名称和注册表键值都无关。
20.2、本发明通过对目录进行重命名操作的方式来监测所搬运的目录和文件被占用情况,跳过重命名失败的目录,以降低遇到正在被占用目录的情况减少无效操作。对于搬运到一半失败的目录,设置回滚程序和创建进入pe系统的程序,以保证搬运后的数据的一致性,和所搬运数据的完整性,减小了破坏数据的几率。
附图说明
21.图1为本发明总体流程图。
22.图2为扫描流程图。
23.图3为新分区创建流程图。
24.图4为数据转移流程图。
25.图5为本发明的结构原理图。
具体实施方式
26.为了使本领域的技术人员更好地理解本发明的技术方案,下面结合具体实施方式对本发明作进一步的详细说明。
27.windows系统分区除了安装系统以外一般还用于安装软件存储软件数据和用户数据,而一般系统分区都不会划分得很大,因此在使用一段时间后随着数据的膨胀系统分区经常会出现空间不足的现象。
28.针对上述问题,如图1所示,本发明提供一种可跨磁盘转移数据的方法,包括:s1根据数据转移策略对系统分区中的数据进行扫描,排除数据转移策略中指定不转移的数据,统计可转移的数据量,并将可转移数据的路径复制到内存;所述数据包括文件和目录。由于文件几乎很少直接存储在根目录下尤其是在系统分区的根目录下,因此本实施例主要针对根目录下的一级目录进行扫描,当然也可指定其他目录。
29.如图2所示,具体又包括:s11根据数据转移策略创建配置文件,所述配置文件包括若干对需要进行转移数据进行记录的配置项以及排除条件。配置文件中可指定需要转移的数据如program files、user home以及program data目录,当然也可以是其他需要转移的数据。排除条件可以包括系统目录、boot目录以及名称中带有microsoft的目录,或者是其他不需要转移的目录如自身就是符号链接的目录。
30.s12逐个处理配置文件中的配置项,读取对应的环境变量,统计每个配置项下所有的数据量;若数据为文件则直接累计,若数据为目录则进行递归累计。
31.根据配置项读取对应的环境变量,例如program data读取的环境变量是allusersprofile,program files读取的是programfiles和programw6432。此外,在读取以后,还要跟另外一个环境变量systemdrive比较,判断上述目录到底在不在系统盘上。最后得到program data的值为:c:\programdata,而program files的值为:c:\program files和c:\program files (x86)。此外,如果配置文件还指定搬运“下载”、“视频”、“图片”等shell目录,则需要读取系统设置,判断这些shell目录是否本来就位于系统分区,如果没有则直接忽略。由于环境变量是实时动态的,使得本步骤的操作也是实时动态的,提高了数据的准确性。
32.具体统计的时候以c:\program files为例,首先枚举其中的全部项,如:其中有git、microsoft office、intel等目录。
33.其中microsoft office触发了排除条件,不需要分析,而另外一个目录intel本身就是符号链接,也不分析。git等目录没有被排除,则对这些目录进行递归分析,首先打开git目录,遍历其中的项。遇到.exe等文件时,直接获得这些文件的大小并累计,遇到bin等目录时,递归进入这些目录,并用同样的方法进行大小累计。
34.所谓递归统计就是指假如有一个目录a,目录a下面有1、2、3这3个文件,还有一个子目录b,这些数据的顺序是1、b、2、3。统计的时候首先统计文件1的大小,然后遇到目录b的时候,进入目录b统计,直到目录b中的项统计完了,再接着统计2和3,如果目录b中还有子目录c,也采用一样的方法,遇到目录c先统计目录c内的数据。
35.s13将统计好的数据设置为待转移项。当某个目录如c:\programdata中的数据统计完毕后,就将c:\programdata下的一级子目录设为待转移项复制到内存中。
36.步骤s2~s3为新分区创建过程,如图3所示。
37.s2根据可转移的数据量从系统分区所在磁盘以外的磁盘上的分区分割足够的空闲存储区域;具体包括:
s21根据统计到的可转移的数据量设置所需空间大小;本实施例中,所需空间为可转移数据量的1.2~1.5倍,当然上限可以不做限制,只不过占用太多空间没有必要。
38.s22遍历系统分区所在磁盘以外磁盘上的其他分区,若该分区空闲存储区域大于所需空间且空闲存储空间为已占用空间的n倍,则将该分区添加到分区列表;所述n为1.1~1.3,即选择的分区中闲置空间为已占用空间的1.1~1.3倍。例如,步骤1中统计的可转移数据为30gb,其所需空间为30*1.2~30*~1.5gb即36~45gb,此处推荐45gb。假设共有c、d、e、f、g、h六个分区,其中c、d分区在系统盘上直接略过,假设e分区总大小为1tb(1024gb),但已使用了900gb的空间,按照闲置空间为已占用空间的1.1~1.3倍(此处取1.2倍)的要求,需要留下至少1080gb空间,显然不能满足,于是e分区也被跳过。f分区大小为40gb,已使用空间为10gb,保留1.2倍空间后可用空间为28gb,不满足45gb的最小要求,也被跳过。g分区和h分区大小也都为1tb,已使用空间同样为10gb,剩余可用空间充足,可以被当作数据转移的目标分区。
39.s23从分区列表中选择一个分区;接上方实例,g分区或者h分区以及要从选中的分区上划分下来的大小都可由用户来指定。
40.s24从被选择的分区中分割一部分存储空间用于数据转移。假设用户选择了g分区,指定大小为50gb,则在用户选择了分区和大小后,调用已有的分区resize/move模块在g分区末尾划分出一片50gb大小的空间。
41.s3在分割出来的存储区域上建立新分区并分配未使用的盘符;利用上述划分出来的50gb空间新建一个ntfs分区,并分配一个未使用的盘符如i。另外,通过修改注册表,重启explorer.exe,以实现隐藏新建分区i,其目的在于避免用户误操作新分区内的数据。隐藏分区只是在windows下不可见,实际上可通过其他方式操作,并不影响本发明的后续步骤。
42.步骤s4~s7为数据转移过程,如图4所示。
43.s4根据内存中存储的可转移数据的路径遍历可转移的数据,根据数据中的目录在新分区中创建同名目录,将系统分区中的可转移数据转移到新分区中对应的目录下,并对转移后的数据设置与原始数据相同的属性;在创建同名目录之前,对待转移的目录进行重命名,若重命名失败则认为该目录被占用,将该目录列为转移失败;若重命名成功则认为该目录未被占用,将目录名重新命名为原始目录名。
44.对待转移目录重命名的目的在于判断其是否被系统或者其他程序占用,如果被占用会导致数据转移失败。通过提前判断占用与否能减小系统开销。具体地,通过调用api movefile进行重命名。重命名可以是随机的,但为了避免重名,本实施例中通过读取精确到毫秒的本地时间进行重命名,例如将目录git重命名为git_2022_08_10_15_21_01。
45.若待转移目录c:\program files\git被占用,则直接记录为失败等待后续处理。
46.若待转移目录c:\program files\git未被占用,则在新建分区i上创建一个同路径同名目录i:\program files\git。然后读取c:\program files\git的权限和属性,并设置给i:\program files\git,保证拥有c:\program files\git读写权限的windows账户也能对i:\program files\git进行读写。然后遍历git目录,如果遇到文件如.exe等,则直接拷贝到新分区中新的同名目录下,并同样设置权限和属性,确保文件访问正常,且文件的隐藏、只读等属性保留。例如git目录下的license.txt是压缩文件,则需要调用api,将i:\program files\git下的同名文件设置压缩属性,避免拷贝过程中的解压造成更多的空间
占用,稀疏文件同理。
47.如果遇到bin等目录,则同样在目标位置建立bin目录,然后递归遍历bin目录进行转移。递归转移与递归统计类似,可参考上文,本步骤不再赘述。
48.s5对已转移的数据删除其系统分区中的原始数据;一个文件或目录转移完成后,则将系统分区中对应的原始数据的权限设置为当前用户所有,属性设置为可读写(方便删除),然后删除文件或目录。
49.s6若某个数据转移失败,则对该数据所在的一级子目录进行回滚操作;如果c:\program files\git中有原始文件删除失败,则说明该文件正在被占用,此时git目录无法被转移,需要进行回滚。回滚操作与转移操作相同,只不过数据转移方向相反,从i:\program files\git往c:\program files\git转移,同样需要设置权限等。如果有回滚的目录,还需要记录失败,方便后续处理。
50.另外,所谓一级子目录是指例如c:\program files\下的第一层子目录如git。由于不同程序的数据一般都是通过一级子目录进行分别存储,因此回滚操作时以一级子目录为单位最为经济。回滚太多影响转移效率,回滚不够的话会导致数据的完整性受到损害。
51.s7若某个一级子目录成功转移,则在该一级子目录的原始位置新建一个符号链接,所述符号链接指向数据转移后的位置。当c:\program files\git被成功搬运后,删除c:\program files\git,然后在c:\program files下建立一个符号链接。这样,c:\program files\git依然可以正常访问,但是实际上访问的目标目录已经是i:\program files\git,该目录不再占用c分区的空间。
52.若转移成功的目录为shell目录,建立符号链接后创建对应的desktop.ini文件。shell目录(shell folders)如图片、文档、下载、桌面等目录的搬运相对特殊,这些目录本质上是分区上的某个目录,但是它们包含一个desktop.ini文件,desktop.ini文件指定了一些参数,当shell目录被显示的时候,相对于普通的目录它们会有特定的图标和文字,比如叫做桌面、下载等。在转移后为了使其仍然能拥有特定的图标和文字,则需要调用系统api对这些shell目录进行重定向,重定向完成后还需要设置shell目录下的desktop.ini文件,确保shell目录能正确显示图标和本地化。
53.s8对于进行回滚操作的一级子目录,在pe系统下进行数据转移。具体包括:创建pe系统,生成iso文件;修改系统启动项为pe系统优先;重启设备进入pe系统,在pe系统内进行数据转移。
54.windows pe系统(windows preinstallation environment),即windows预安装环境,是带有有限服务的最小win32子系统,基于以保护模式运行的windows xp professional及以上内核。 pe系统作为原有系统以外的系统,不会占用磁盘上的数据,因此在pe系统下对转移失败的数据重新进行转移,保证数据能够完全转移。转移时读取转移失败列表,然后按照上述转移方法进行转移即可。
55.如图5所示,本发明还提供一种可跨磁盘转移数据的系统,包括:扫描模块,用于根据数据转移策略对系统分区中的数据进行扫描,排除数据转移策略中指定不转移的数据,统计可转移的数据量,并将可转移数据的路径复制到内存;所述数据包括文件和目录;存储空间分割模块,用于根据可转移的数据量从系统分区所在磁盘以外的磁盘上
的分区分割足够的空闲存储区域;并在分割出来的存储区域上建立新分区并分配未使用的盘符;数据转移模块,用于将系统分区中的可转移数据转移到新分区中;pe系统模块,用于对于进行回滚操作的一级子目录,在pe系统下进行数据转移。
56.其中,所述数据转移模块又具体包括:重命名模块,用于在根据数据中的目录在新分区中创建同名目录之前,先对待转移的目录进行重命名,若重命名失败则认为该目录被占用,将该目录列为转移失败;若重命名成功则认为该目录未被占用,将目录名重新命名为原始目录名。
57.新目录创建模块,用于根据数据中的目录在新分区中创建同名目录;转移模块,用于根据内存中存储的可转移数据的路径将系统分区中的可转移数据复制到新分区中对应的目录下,并对转移后的数据设置与原始数据相同的属性;数据操作模块,用于对已转移的数据删除其系统分区中的原始数据;并对转移后的数据设置与原始数据相同的属性;回滚模块,用于在某个数据转移失败,对该数据所在的一级目录进行回滚操作;链接设置模块,用于在某个一级目录成功转移后,在该一级目录的原始位置新建一个符号链接,所述符号链接指向数据转移后的位置;若转移成功的目录为shell目录,建立符号链接后创建对应的desktop.ini文件。
58.本发明通过对系统分区中的数据进行转移实现了跨磁盘对系统分区进行扩容,不管系统分区所在的磁盘上是否还有可用空间,只要有其他容量较大的磁盘就可以实现。本发明将在系统磁盘外的磁盘上划分出一块区域,并创建一个隐藏的分区,然后对系统分区的软件目录、用户个人目录等进行扫描,然后将大部分数据转移到隐藏分区中,并在系统分区中建立相应的符号链接,使得软件可以正常使用,文件也可以正常访问。
59.对比普通的文件转移方法,这种做法在逻辑上实现了扩容,隐藏分区中的空间也可以被系统分区使用,而不需要在之后的使用中反复进行转移。
60.同时,当检测到有指定的目录转移不成功,可通过进入pe系统继续执行,以保证选中的目录能够转移成功,解决了现有技术中转移数据不完整的问题。
61.以上仅是本发明的优选实施方式,应当指出的是,上述优选实施方式不应视为对本发明的限制,本发明的保护范围应当以权利要求所限定的范围为准。对于本技术领域的普通技术人员来说,在不脱离本发明的精神和范围内,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1