本发明涉及通信技术领域,特别涉及一种磁盘清理方法和磁盘清理装置。
背景技术:
磁盘的存储空间被划分为多个数据块,每个数据块的数据区可以存放数据。当某个数据块中的数据被删掉时,该数据块形成空块。但是这个空块又不能被其它程序利用,因此该空块就形成了“碎片”。
现有技术中,清理磁盘碎片的方法通常为:从依次排列的数据块的对尾往队头一条一条的移动数据,使得数据移动的效率低下,从而降低了磁盘碎片清理的速度。
技术实现要素:
本发明提供一种磁盘清理方法和磁盘清理装置,用于提高磁盘碎片清理的速度。
为实现上述目的,本发明提供了一种磁盘清理方法,所述磁盘的存储空间划分为多个数据块;
所述磁盘清理方法包括:
从待移动数据块之前的其它存储数据未满的数据块中查询是否存在可用数据块,该可用数据块的可用容量大于或等于待移动数据块的已用容量且在可用容量大于或等于待移动数据块的已用容量的数据块中该可用数据块的可用容量最小,其中,待移动数据块为最后一个存储数据未满且存储数据不为空的数据块;
若查询出存在可用数据块,将待移动数据块中的数据移动至可用数据块中存储。
可选地,所述将待移动数据块中的数据移动至可用数据块中存储之后还包括:
判断可用数据块存储数据是否已满;
若判断出可用数据块存储数据已满,判断可用数据块之前是否存在存储数据未满的数据块;
若判断出可用数据块之前存在存储数据未满的数据块,将可用数据块与位于可用数据块之前的第一个存储数据未满的数据块进行位置交换。
可选地,所述将可用数据块与位于可用数据块之前的第一个存储数据未满的数据块进行位置交换之后还包括:
判断最后一个数据块之前的其余数据块存储数据是否均已满;
若判断出最后一个数据块之前的其余数据块存储数据不均是已满,继续执行所述从待移动数据块之前的其它存储数据未满的数据块中查询是否存在可用数据块的步骤。
可选地,每个数据块用于存放至少一个数据;
所述磁盘清理方法还包括:
若查询出不存在可用数据块,根据计数器的当前数值和待移动数据块中数据的当前总条数,计算出数据的可移动条数;
计算出可移动条数个数据对应的已用容量;
将计数器的当前数值加1;
从待移动数据块之前的其它存储数据未满的数据块中查询是否存在空闲数据块,该空闲数据块的可用容量大于或等于可移动条数个数据对应的已用容量且在可用容量大于或等于大于或等于可移动条数个数据对应的已用容量的数据块中该空闲数据块的可用容量最小;
若查询出存在空闲数据块,将可移动条数个数据移动至空闲数据块中存储。
可选地,所述将可移动条数个数据移动至空闲数据块中存储之后还包括:
判断空闲数据块存储数据是否已满;
若判断出空闲数据块存储数据已满,判断空闲数据块之前是否存在存储数据未满的数据块;
若判断出空闲数据块之前存在存储数据未满的数据块,将空闲数据块与位于空闲数据块之前的第一个存储数据未满的数据块进行位置交换。
可选地,所述将空闲数据块与位于空闲数据块之前的第一个存储数据未满的数据块进行位置交换之后还包括:
判断最后一个数据块之前的其余数据块存储数据是否均已满;
若判断出最后一个数据块之前的其余数据块存储数据不均是已满,继续执行所述从待移动数据块之前的其它存储数据未满的数据块中查询是否存在可用数据块的步骤。
可选地,所述从最后一个存储数据未满且存储数据不为空的数据块之前的其它存储数据未满的数据块中查询是否存在可用数据块之前还包括:
将磁盘的存储空间划分为多个数据块;
将存储数据已满的数据块排列于其余存储数据未满的数据块之前。
为实现上述目的,本发明提供了一种磁盘清理装置,所述磁盘的存储空间划分为多个数据块;
所述磁盘清理装置包括:
查询模块,用于从待移动数据块之前的其它存储数据未满的数据块中查询是否存在可用数据块,该可用数据块的可用容量大于或等于待移动数据块的已用容量且在可用容量大于或等于待移动数据块的已用容量的数据块中该可用数据块的可用容量最小,其中,待移动数据块为最后一个存储数据未满且存储数据不为空的数据块;
移动模块,用于若查询模块查询出存在可用数据块,将待移动数据块中的数据移动至可用数据块中存储。
可选地,还包括:
判断模块,用于判断可用数据块存储数据是否已满,若判断出可用数据块存储数据已满,判断可用数据块之前是否存在存储数据未满的数据块;
交换模块,用于若所述判断模块判断出可用数据块之前存在存储数据未满的数据块,将可用数据块与位于可用数据块之前的第一个存储数据未满的数据块进行位置交换。
可选地,所述判断模块还用于判断最后一个数据块之前的其余数据块存储数据是否均已满,若判断出最后一个数据块之前的其余数据块存储数据不均是已满,触发所述查询模块继续执行所述从待移动数据块之前的其它存储数据未满的数据块中查询是否存在可用数据块的步骤。
本发明具有以下有益效果:
本发明提供的磁盘清理方法和磁盘清理装置的技术方案中,从待移动数据块之前的其它存储数据未满的数据块中查询出存在可用数据块,将待移动数据块中的数据移动至可用数据块中存储,本发明中可批量移动数据,提高了数据移动的效率,从而提高了磁盘碎片清理的速度。
附图说明
图1为本发明实施例一提供的一种磁盘清理方法的流程图;
图2为本发明实施例二提供的一种磁盘清理方法的流程图;
图3为实施例二中数据块的一种示意图;
图4为实施例二中数据块的另一种示意图;
图5为实施例二中数据块的另一种示意图;
图6为实施例二中数据块的另一种示意图;
图7为本发明实施例三提供的一种磁盘清理装置的结构示意图。
具体实施方式
为使本领域的技术人员更好地理解本发明的技术方案,下面结合附图对本发明提供的磁盘清理方法和磁盘清理装置进行详细描述。
图1为本发明实施例一提供的一种磁盘清理方法的流程图,如图1所示,该方法包括:
步骤101、从待移动数据块之前的其它存储数据未满的数据块中查询出存在可用数据块,该可用数据块的可用容量大于或等于待移动数据块的已用容量且在可用容量大于或等于待移动数据块的已用容量的数据块中该可用数据块的可用容量最小,其中,待移动数据块为最后一个存储数据未满且存储数据不为空的数据块。
本实施例中,磁盘的存储空间划分为多个数据块。本实施例中,磁盘为oracle磁盘。
步骤102、将待移动数据块中的数据移动至可用数据块中存储。
本实施例提供的磁盘清理方法的技术方案中,从待移动数据块之前的其它存储数据未满的数据块中查询出存在可用数据块,将待移动数据块中的数据移动至可用数据块中存储,本实施例中可批量移动数据,提高了数据移动的效率,从而提高了磁盘碎片清理的速度。
图2为本发明实施例二提供的一种磁盘清理方法的流程图,如图2所示,该方法包括:
步骤201、将磁盘的存储空间划分为多个数据块,每个数据块用于存放至少一个数据。
图3为实施例二中数据块的一种示意图,如图3所示,如图3所示,将磁盘的存储空间划分为8个数据块,8个数据块依次排列,从左至右分别为第1个至第8个数据块。优选地,每个数据块的存储容量相同,即:每个数据块的存储容量为d。其中,存储容量为数据块的可存储数据的最大容量。本实施例中以每个数据块的存储容量均相同为例进行描述,则第1个数据块的已用容量为50%d,第2个数据块的已用容量为0%d,第3个的数据块的已用容量为100%d,以此类推。其中,第3个数据块存储数据已满,其余数据块存储数据未满,本实施例中,将存储数据未满的数据块称为“碎片”。
步骤202、将存储数据已满的数据块排列于其余存储数据未满的数据块之前。
具体地,依次执行将数据块中最后一个存储数据已满的数据块与第一个存储数据未满的数据块进行位置交换,以将存储数据已满的数据块排列于其余存储数据未满的数据块之前。
如图3所示,最后一个存储数据已满的数据块为第3个数据块,第一个存储数据未满的数据块为第1个数据块,将第3个数据块与第1个数据块交换位置。若还存储在其它容量已满的数据块则重复执行上述过程,以时限将存储数据已满的数据块排列于其余数据块的前方。图4为实施例二中数据块的另一种示意图,如图4所示,位置交换后,第1个数据块的已用容量为100%d,第2个数据块的已用容量为0%d,第3个的数据块的已用容量为50%d,其余数据块的排列顺序与图3中相同。
步骤203、从待移动数据块之前的其它存储数据未满的数据块中查询是否存在可用数据块,该可用数据块的可用容量大于或等于待移动数据块的已用容量且在可用容量大于或等于待移动数据块的已用容量的数据块中该可用数据块的可用容量最小,其中,待移动数据块为最后一个存储数据未满且存储数据不为空的数据块,若是,则执行步骤204;若否,则执行步骤209。
本步骤中,若查询出存在可用数据块,表明该可用数据块可容纳待移动数据块中存储的所有数据;若查询出不存在可用数据块,表明该可用数据块无法容纳待移动数据块中存储的所有数据。其中,可用容量为存储容量中已用容量之外的剩余容量。
如图4所示,第2个至第8个数据块为存储数据未满的数据块,其中,最后一个存储数据未满且存储数据不为空的数据块为第8个数据块,而第2个至第7个数据块为其它存储数据未满的数据块,因此第8个数据块为待移动数据块。第8个数据块的已用容量为50%d。第2个至第7个数据块的已用容量分别为100%d、50%d、30%d、40%d和90%d。第2个至第7个数据块中可用容量大于或等于50%d的数据块为第2个、第3个和第6个数据块,在第2个、第3个和第6个数据块中可用容量最小的数据块为第3个数据块,可用数据块为第3个数据块,因此查询出存在可用数据块。
步骤204、将待移动数据块中的数据移动至可用数据块中存储。
图5为实施例二中数据块的另一种示意图,如图5所示,将数据移动至可用数据块中之后,第3个数据块的已用容量为100%d,第8个数据块的已用容量为0%d,其余数据块的已用容量与图4中相同。
步骤205、判断可用数据块存储数据是否已满,若是,则执行步骤206;若否,则继续执行步骤203。
步骤206、判断可用数据块之前是否存在存储数据未满的数据块,若是,则执行步骤207;若否,则执行步骤208。
如图5所示,可用数据块为第3个数据块,第3个数据块之前存在已用容量为0%d的第2个数据块。
步骤207、将可用数据块与位于可用数据块之前的第一个存储数据未满的数据块进行位置交换。
图6为实施例二中数据块的另一种示意图,如图6所示,位置交换后,第2个数据块的已用容量为100%d,第3个数据块的已用容量为0%d,其余数据块的排列顺序与图5中相同。
步骤208、判断最后一个数据块之前的其余数据块存储数据是否均已满,若是,则流程结束;若否,则继续执行步骤203。
本步骤中,若判断出最后一个数据块之前的其余数据块存储数据均为已满,则表明数据块中存储的数据已移动完毕;若判断出最后一个数据块之前的其余数据块存储数据不均是已满,则表明数据块中存储的数据未移动完毕。
步骤209、根据计数器的当前数值和待移动数据块中数据的当前总条数,计算出数据的可移动条数。
当数据块的已用容量较大时,表明该数据中的数据太大,因此仅能先移动部分数据。
本步骤具体可包括:
步骤2091、通过公式cm*0.618n计算出条数数值,其中,cm为第m个数据块中数据的当前总条数,n为计数器的当前数值。
步骤2092、对条数数值进行取整计算,得出可移动条数。
本实施例中,可移动条数个数据可以为当前总条数中前移动条数个数据。
例如,当前总条数为10,表明数据块中存储有10条数据;可移动条数为3,表明此次可将10条数据中的3条数据进行移动,优选地,可将10条数据中的前3条数据进行移动。
步骤210、计算出可移动条数个数据对应的已用容量。
本实施例中,在将数据存储入数据块中时可预先记录下每条数据的数据量,再根据可移动条数个数据中每条数据的数据量以及数据块的存储空间计算出可移动条数个数据对应的已用容量。
步骤211、将计数器的当前数值加1。
步骤212、从待移动数据块之前的其它存储数据未满的数据块中查询是否存在空闲数据块,该空闲数据块的可用容量大于或等于可移动条数个数据对应的已用容量且在可用容量大于或等于大于或等于可移动条数个数据对应的已用容量的数据块中该空闲数据块的可用容量最小,若是,执行步骤213;若否,则继续执行209。
本步骤中,若查询出存在空闲数据块,表明该空闲数据块可容纳可移动条数个数据;若查询出不存在空闲数据块,表明该空闲数据块无法容纳可移动条数个数据。
步骤213、将可移动条数个数据移动至空闲数据块中存储。
步骤214、判断空闲数据块存储数据是否已满,若是,则执行步骤215;若否,则继续执行步骤203。
步骤215、判断空闲数据块之前是否存在存储数据未满的数据块,若是,则执行步骤216;若否,则执行步骤208。
步骤216、将空闲数据块与位于空闲数据块之前的第一个存储数据未满的数据块进行位置交换,并继续执行步骤208。
本实施例提供的磁盘清理方法的技术方案中,从待移动数据块之前的其它存储数据未满的数据块中查询出存在可用数据块,将待移动数据块中的数据移动至可用数据块中存储,本实施例中可批量移动数据,提高了数据移动的效率,从而提高了磁盘碎片清理的速度。本实施例中,将存储数据已满的数据块排列于其余存储数据未满的数据块之前,这样在数据移动过程中存储数据已满的数据块不参与数据移动过程,进一步减少了数据移动的次数,从而进一步提高了磁盘碎片清理的速度。
图7为本发明实施例三提供的一种磁盘清理装置的结构示意图,如图7所示,磁盘的存储空间划分为多个数据块,该磁盘清理装置包括:查询模块11和移动模块12。
查询模块11用于从待移动数据块之前的其它存储数据未满的数据块中查询是否存在可用数据块,该可用数据块的可用容量大于或等于待移动数据块的已用容量且在可用容量大于或等于待移动数据块的已用容量的数据块中该可用数据块的可用容量最小,其中,待移动数据块为最后一个存储数据未满且存储数据不为空的数据块。
移动模块12用于若查询模块11查询出存在可用数据块,将待移动数据块中的数据移动至可用数据块中存储。
进一步地,该装置还包括:判断模块13和交换模块14。
判断模块13用于判断可用数据块存储数据是否已满,若判断出可用数据块存储数据已满,判断可用数据块之前是否存在存储数据未满的数据块。交换模块14用于若判断模块13判断出可用数据块之前存在存储数据未满的数据块,将可用数据块与位于可用数据块之前的第一个存储数据未满的数据块进行位置交换。
进一步地,判断模块13还用于判断最后一个数据块之前的其余数据块存储数据是否均已满,若判断出最后一个数据块之前的其余数据块存储数据不均是已满,触发查询模块11继续执行所述从待移动数据块之前的其它存储数据未满的数据块中查询是否存在可用数据块的步骤。
进一步地,每个数据块用于存放至少一个数据;所述装置还包括:计算模块15和计数模块16。
计算模块15用于若查询模块11查询出不存在可用数据块,根据计数器的当前数值和待移动数据块中数据的当前总条数,计算出数据的可移动条数,并计算出可移动条数个数据对应的已用容量。计数模块16用于将计数器的当前数值加1。查询模块11还用于从待移动数据块之前的其它存储数据未满的数据块中查询是否存在空闲数据块,该空闲数据块的可用容量大于或等于可移动条数个数据对应的已用容量且在可用容量大于或等于大于或等于可移动条数个数据对应的已用容量的数据块中该空闲数据块的可用容量最小。移动模块12还用于若查询模块11查询出存在空闲数据块,将可移动条数个数据移动至空闲数据块中存储。
进一步地,判断模块13用于判断空闲数据块存储数据是否已满,若判断出空闲数据块存储数据已满,判断空闲数据块之前是否存在存储数据未满的数据块。交换模块14用于若判断模块13判断出空闲数据块之前存在存储数据未满的数据块,将空闲数据块与位于空闲数据块之前的第一个存储数据未满的数据块进行位置交换。
进一步地,判断模块13还用于判断最后一个数据块之前的其余数据块存储数据是否均已满;若判断出最后一个数据块之前的其余数据块存储数据不均是已满,触发查询模块11继续执行所述从待移动数据块之前的其它存储数据未满的数据块中查询是否存在可用数据块的步骤。
进步一地,该装置还包括:划分模块17。
划分模块17用于将磁盘的存储空间划分为多个数据块。交换模块14用于将存储数据已满的数据块排列于其余存储数据未满的数据块之前。
本实施例提供的磁盘清理装置的技术方案中,从待移动数据块之前的其它存储数据未满的数据块中查询出存在可用数据块,将待移动数据块中的数据移动至可用数据块中存储,本实施例中可批量移动数据,提高了数据移动的效率,从而提高了磁盘碎片清理的速度。
可以理解的是,以上实施方式仅仅是为了说明本发明的原理而采用的示例性实施方式,然而本发明并不局限于此。对于本领域内的普通技术人员而言,在不脱离本发明的精神和实质的情况下,可以做出各种变型和改进,这些变型和改进也视为本发明的保护范围。