发明内容
本发明实施例一方面提供了一种将数据写入硬盘的方法,另一方面提供了一种计算机系统中的主机、硬盘以及一种计算机系统,能够保证硬盘写入数据的安全性。
本发明实施例提供一种将数据写入硬盘的方法,用以保证将数据写入硬盘时写入数据的安全性,该方法包括:
在硬盘向主机返回写请求命令执行成功的报告时,保留主机向硬盘发送所述写请求命令时占用的系统资源;
在确定写缓存中数据写入硬盘失败时,根据所述系统资源进行所述数据的恢复处理。
本发明实施例还提供一种计算机系统中的主机,用以保证将数据写入硬盘时写入数据的安全性,该主机包括:
发送模块,用于向硬盘发送写请求命令;
接收模块,用于接收硬盘返回的写请求命令执行报告;
资源处理模块,用于在所述接收模块接收到硬盘返回的写请求命令执行成功的报告时,保留向硬盘发送所述写请求命令时占用的系统资源;
数据处理模块,用于在确定写缓存中数据写入硬盘失败时,根据所述资源处理模块保留的系统资源进行所述数据的恢复处理。
本发明实施例还提供一种计算机系统中的硬盘,用以保证将数据写入硬盘时写入数据的安全性,该硬盘包括:
接收模块,用于在向主机返回写请求命令执行成功的报告后,接收主机发来的清缓存命令;
命令执行模块,用于执行所述清缓存命令;
发送模块,用于在所述清缓存命令执行失败时,向主机返回清缓存命令执行失败的报告,触发主机根据发送所述写请求命令时占用的系统资源进行写缓存中数据的恢复处理。
本发明实施例还提供一种计算机系统,包括上述的主机和硬盘。
本发明实施例中,在硬盘向主机返回写请求命令执行成功的报告时,保留主机向硬盘发送所述写请求命令时占用的系统资源;与现有技术中在硬盘向主机返回写请求命令执行成功的报告时,立即释放主机向硬盘发送所述写请求命令时占用的系统资源相比,在确定写缓存中数据写入硬盘失败时,可以根据所述系统资源进行所述数据的恢复处理,从而避免开启硬盘写缓存时出现数据丢失的情况,很好的解决了现有技术开启硬盘写缓存与数据丢失风险的矛盾,保证了硬盘写入数据的安全性。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
实施例一
如图1所示,本实施例中将数据写入硬盘的方法流程可以如下:
步骤101、在硬盘向主机返回写请求命令执行成功的报告时,主机保留主机向硬盘发送所述写请求命令时占用的系统资源;
步骤102、在确定写缓存中数据写入硬盘失败时,主机根据所述系统资源进行所述数据的恢复处理。
图1所示流程中所述的硬盘可以包括:硬盘驱动器(Hard Disk Drive,HDD)等传统硬盘、固态硬盘(Solid State Disk,SSD)等新型硬盘,也可以包括当前、或以后可能的其它具备数据存储永久性特点的硬盘。图1所示流程中写缓存中数据写入硬盘失败,包括:写缓存中全部数据写入硬盘失败,或,写缓存中部分数据写入硬盘失败。
由图1所示流程可以看出,与现有技术中在硬盘向主机返回写请求命令执行成功的报告时,立即释放主机向硬盘发送所述写请求命令时占用的系统资源不同的是,本实施例中在硬盘向主机返回写请求命令执行成功的报告时,仍然保留主机向硬盘发送所述写请求命令时占用的系统资源,为后续在确定写缓存中数据写入硬盘失败时进行数据恢复处理提供了前提条件。
由于现有技术中在硬盘向主机返回写请求命令执行成功的报告时,立即释放主机向硬盘发送所述写请求命令时占用的系统资源,因此在出现写缓存中数据写入硬盘失败的可能情况下,已无法进行数据恢复处理;而本实施例中,在确定写缓存中数据写入硬盘失败时,可以根据之前保留的系统资源进行数据的恢复处理,从而在开启写缓存的情况下避免了数据丢失的可能,同时保证了写入数据的安全性。
实施例二
本实施例具体说明图1所示流程的实施:
实施中,确定写缓存中数据写入硬盘失败可以有多种实施方式,只要能够实现确定写缓存中数据写入硬盘失败均可,例如:在硬盘向主机返回清缓存命令执行失败的报告时,可以确定写缓存中数据写入硬盘失败;又如,在检测到硬盘掉电时,也可以确定写缓存中数据写入硬盘失败。当然,这些实施方式既可以单独使用,也可以结合使用,以实现确定写缓存中数据写入硬盘失败。
利用清缓存命令执行失败的报告,确定写缓存中数据写入硬盘失败,是考虑到:硬盘在提供了缓存的同时,也提供了操作缓存的命令,其中包括清缓存命令。当主机将清缓存命令发送到硬盘时,硬盘会在将写缓存中的数据全部写入后才返回清缓存命令执行成功的报告;若写缓存中数据未全部成功写入硬盘,即数据写入硬盘失败,则会返回清缓存命令执行失败的报告。
清缓存命令在不同的协议中有不同的表达形式,比如在SCSI(SmallComputer System Interface,小型计算机系统接口)协议中为同步缓存(SYNCHRONIZE CACHE)命令,在ATA(高级技术附属)协议中为扩展刷写缓存(FLUSH CACHE(EXT))命令。
在检测到硬盘掉电时,确定写缓存中数据写入硬盘失败,是考虑到:在主机向硬盘发送写请求命令后,硬盘先将数据存入写缓存,在确定写缓存中数据全部成功写入硬盘之前,可能会出现硬盘掉电的情况。实施中可以用主机或一单独的设备对硬盘的供电情况进行检测,在检测到硬盘掉电时,则可以确定写缓存中数据写入硬盘失败,此时可以利用主机向硬盘发送所述写请求命令时占用的系统资源进行数据恢复处理。该检测可以是周期性的、不定期的、或实时的,为了保证检测的准确率,可采用实时检测的方式。
在确定写缓存中数据写入硬盘失败,例如在硬盘被下电了或出现其它异常使清缓存命令执行失败时,可以利用主机向硬盘发送所述写请求命令时占用的系统资源进行数据恢复处理。利用主机向硬盘发送所述写请求命令时占用的系统资源进行数据恢复处理的方式可以有多种:例如,将该系统资源所对应数据保存到其他存储介质上面,待硬盘故障消除后或者故障硬盘更换或者硬盘再次上电时,再从其他存储介质上将数据取出,重试写回硬盘;又如,将该系统资源所对应数据暂存在内存中,待硬盘故障消除后或者故障硬盘更换或者硬盘再次上电时,再从内存中将数据取出,重试写回硬盘。
实施中,步骤101之后,有可能:可以确定写缓存中数据已全部成功写入硬盘,此时可释放主机向硬盘发送所述写请求命令时占用的系统资源,从而在保证数据写入安全性的同时,可以节省系统资源占用,提高命令执行效率。
实施中,前述确定写缓存中数据全部成功写入硬盘也可以有多种实施方式,只要能够实现确定写缓存中数据全部成功写入硬盘均可,例如:在硬盘向主机返回清缓存命令执行成功的报告时,可以确定写缓存中数据全部成功写入硬盘;又如,在未检测到硬盘掉电时,也可以确定写缓存中数据未全部成功写入硬盘。当然,如前所述,这里的清缓存命令也可以包括:小型计算机接口协议中的同步缓存命令(SYNCHRONIZE CACHE);或者,高级技术附属协议中的扩展刷写缓存命令(FLUSH CACHE(EXT))。
实施中,若多次执行主机向硬盘发送写请求命令、硬盘向主机返回写请求命令执行报告的过程,则可以在硬盘向主机返回每个写请求命令执行成功的报告时,由主机对应该请求命令执行成功的报告将清缓存命令发送至硬盘;为了减少系统中命令执行次数,提高命令处理速度,也可以在硬盘完成多次写操作并向主机返回多个写请求命令执行成功的报告后,由主机一次将多个写请求命令执行成功的报告对应的一个清缓存命令发送至硬盘。
实施例三
本实施例举一具体实施说明前述实施例方法如何实现将数据写入硬盘,参考附图2,包括以下步骤。
步骤201、开启硬盘写缓存,主机将写请求命令下发给硬盘。
步骤202、主机保留主机向硬盘发送写请求命令时占用的系统资源。
步骤203、硬盘向主机返回写请求命令执行成功的报告。
步骤204、主机向硬盘下发FULSH CACHE(EXT)或者SYNCHRONIZECACHE命令。
步骤205、主机接收硬盘返回的写请求命令执行报告;当硬盘返回命令执行成功(表明写缓存中数据确实已经写入硬盘)的报告时,执行步骤206将这条命令之前未释放的系统资源释放;如果硬盘执行FLUSH CACHE(EXT)或者SYNCHRONIZE CACHE失败,向主机返回命令执行失败的报告,执行步骤207。
步骤206、主机将保留的主机向硬盘发送写请求命令时占用的系统资源释放。
步骤207、主机则认为写缓存中数据写入硬盘失败,此时可通过未释放的系统资源进行数据恢复处理。
另外,如果硬盘突然掉电,被检测到后,主机同样认为写缓存中数据写入硬盘失败,也可通过未释放的系统资源进行数据恢复处理。
本例中,写请求命令可以下发多个,但相应的系统资源保留。在硬盘向主机返回多个写请求命令执行成功的报告后,主机发送与多个写请求命令执行成功的报告对应的一个清缓存命令至硬盘,硬盘向主机返回清缓存命令执行成功的报告后,再将之前未释放的系统资源释放掉。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件完成,所述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,可以包括上述实施例方法中的全部或部分步骤,所述的存储介质可以包括:ROM、RAM、磁盘、光盘等。
基于同一发明构思,本发明实施例中还提供了一种计算机系统中的主机和硬盘,如下面的实施例四、五所述。由于这些设备解决问题的原理与将数据写入硬盘的方法相似,因此这些设备的实施可以参见方法的实施,重复之处不再赘述。
实施例四
本实施例提供一种计算机系统中的主机,其结构如图3所示,可以包括:
发送模块301,用于向硬盘发送写请求命令;
接收模块302,用于接收硬盘返回的写请求命令执行报告;
资源处理模块303,用于在所述接收模块接收到硬盘返回的写请求命令执行成功的报告时,保留向硬盘发送所述写请求命令时占用的系统资源;
数据处理模块304,用于在确定写缓存中数据写入硬盘失败时,根据所述资源处理模块303保留的系统资源进行所述数据的恢复处理。
如图4所示,实施中,图3所示的数据处理模块304可以包括:第一确定单元401,用于在检测到硬盘掉电时,确定写缓存中数据写入硬盘失败;和/或,
第二确定单元402,用于在所述接收模块302接收到硬盘返回的清缓存命令执行失败的报告时,确定写缓存中数据写入硬盘失败。
如图5所示,实施中,图3所示的资源处理模块303可以包括:释放单元501,用于在所述接收模块302接收到硬盘返回的清缓存命令执行成功的报告时,释放所述系统资源。
实施中,发送模块301还可以用于在所述接收模块302接收到硬盘返回的多个写请求命令执行成功的报告后,向硬盘发送一个所述清缓存命令。
实施例五
本实施例提供一种计算机系统中的硬盘,其结构如图6所示,可以包括:
接收模块601,用于在向主机返回写请求命令执行成功的报告后,接收主机发来的清缓存命令;
命令执行模块602,用于执行所述清缓存命令;
发送模块603,用于在所述清缓存命令执行失败时,向主机返回清缓存命令执行失败的报告,触发主机根据发送所述写请求命令时占用的系统资源进行写缓存中数据的恢复处理。
实施中,发送模块603还可以用于在所述清缓存命令执行成功时,向主机返回清缓存命令执行成功的报告,触发主机释放发送所述写请求命令时占用的系统资源。
实施例四中的主机和实施例五中的硬盘可以组成计算机系统,其连接关系可以按照现有技术实现,在此不再赘述。
由上述实施例可以得知,本发明实施例中,在硬盘向主机返回写请求命令执行成功的报告时,保留主机向硬盘发送所述写请求命令时占用的系统资源;与现有技术中在硬盘向主机返回写请求命令执行成功的报告时,立即释放主机向硬盘发送所述写请求命令时占用的系统资源相比,在确定写缓存中数据写入硬盘失败时,可以根据所述系统资源进行所述数据的恢复处理,从而避免开启硬盘写缓存时出现数据丢失的情况,很好的解决了现有技术开启硬盘写缓存与数据丢失风险的矛盾,保证了硬盘写入数据的安全性。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。