Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
METHOD FOR JUDGING APPENDING WRITING OF WORM, AND STORAGE DEVICE
Document Type and Number:
WIPO Patent Application WO/2015/039496
Kind Code:
A1
Abstract:
Provided are a method for judging the appending writing of WORM, and a storage device, which relate to the field of communications, and can more accurately judge whether a writing operation of a WORM file is an appending writing operation or not. The method specifically comprises: obtaining an initial pointer position of this writing operation; receiving a WRITE instruction sent by a user equipment, the WRITE instruction carrying the data size of this writing operation; according to the WRITE instruction, identifying the writing range of this writing operation; detecting whether the protection range of a WORM file and the writing range of this writing operation intersect or not; if an intersection is detected, detecting whether the data of this writing operation and the data of the WORM file in the intersecting part are the same or not; if yes, then judging that this writing operation is an appending writing operation; otherwise, judging that this writing operation is an modifying writing operation.

Inventors:
QIU FENGLI (CN)
PENG YONG (CN)
WAN YONG (CN)
Application Number:
PCT/CN2014/083042
Publication Date:
March 26, 2015
Filing Date:
July 25, 2014
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
HUAWEI TECH CO LTD (CN)
International Classes:
G06F9/44
Foreign References:
CN103500092A2014-01-08
CN1952869A2007-04-25
CN101278289A2008-10-01
CN1783342A2006-06-07
CN101996237A2011-03-30
Download PDF:
Claims:
权利要求

1、 一种单写多读 WORM追加写判断方法, 其特征在于, 包括: 获得本次写操作的起始指针位置;

接收用户设备发送的写 WRI TE指令,所述 WRI TE指令中携带有本 次写操作的数据大小;

根据所述 WRI TE指令识别所述本次写操作的写入范围, 其中, 所 述写操作的写入范围是大于等于所述本次写操作的起始指针位置值, 小于等于所述本次写操作的起始指针位置值加上所述本次写操作的 数据大小;

检测 WORM文件的保护范围和所述本次写操作的写入范围是否有 交集;

若检测到有交集, 则检测所述本次写操作与所述 WORM文件在交 集部分的数据是否一样;

若一样, 则判断所述本次写操作是追加写; 若不一样, 则判断所 述本次写操作是修改写。

2、 根据权利要求 1所述的方法, 其特征在于, 所述方法还包括: 若检测到没有交集, 则判断所述本次写操作是追加写。

3、 根据权利要求 1或 2所述的方法, 其特征在于, 所述获得本 次写操作的起始指针位置之前, 所述方法还包括:

获得所述用户设备发送的打开 OPEN指令,所述 OPEN指令中携带 有文件打开标识;

则, 所述获得本次写操作的起始指针位置, 包括:

若所述文件打开标识中携带有追加写标识,则获得的本次写操作 的起始指针位置为所述 WORM文件的结束位置。

4、 根据权利要求 3所述的方法, 其特征在于, 若所述文件打开 标识中没有携带追加写标识,则获得的本次写操作的起始指针位置为 所述 WORM文件的起始位置。

5、 根据权利要求 3所述的方法, 其特征在于, 所述接收所述用 户设备发送的 OPEN指令之后, 若所述文件打开标识中没有携带追加 写标识, 则所述方法还包括:

接收所述用户设备发送的 SEEK指令,所述 SEEK指令中携带有目 标指针位置;

则, 获得的本次写操作的起始指针位置为所述 SEEK指令中的所 述目标指针位置。

6、 根据权利要求 3所述的方法, 其特征在于, 所述获得所述用 户设备发送的 OPEN指令之后, 在所述文件打开标识中携带有追加写 标识但被转化掉的情况下, 所述方法还包括:

接收所述用户设备发送的 SEEK指令,所述 SEEK指令中携带有所 述 WORM文件的结束位置;

则, 获得的本次写操作的起始指针位置为所述 SEEK指令中的所 述 WORM文件的结束位置。

7、 根据权利要求 1-6任意一项所述的方法, 其特征在于, 在判 断所述本次写操作是追加写之后, 所述方法还包括:

从所述本次写操作的起始指针位置处,写入所述本次写操作的数 据。

8、 一种存储设备, 其特征在于, 包括:

获得单元, 用于获得本次写操作的起始指针位置;

接收单元, 用于接收用户设备发送的写 WRITE指令, 所述 ITE 指令中携带有本次写操作的数据大小;

识别单元,用于根据所述接收单元接收的 WRI TE指令识别所述本 次写操作的写入范围, 其中, 所述写操作的写入范围是大于等于所述 本次写操作的起始指针位置值,小于等于所述本次写操作的起始指针 位置值加上所述本次写操作的数据大小;

检测单元, 用于检测 WORM文件的保护范围和所述识别单元识别 出的本次写操作的写入范围是否有交集;

所述检测单元还用于, 在检测到有交集后, 检测所述本次写操 作与所述 WORM文件在交集部分的数据是否一样;

判断单元, 用于在所述检测单元检测到所述本次写操作与所述 WORM文件在交集部分的数据一样时, 判断所述本次写操作是追加写; 在所述检测单元检测到所述本次写操作与所述 WORM文件在交集部分 的数据不一样时, 判断所述本次写操作是修改写。

9、 根据权利要求 8所述的存储设备, 其特征在于, 所述判断单 元还用于, 在所述检测单元检测到没有交集时, 判断所述本次写操作 是追加写。

1 0、 根据权利要求 8或 9所述的存储设备, 其特征在于, 所述获 得单元还用于, 在获得本次写操作的起始指针位置之前, 获得所述用 户设备发送的打开 OPEN指令,所述 OPEN指令中携带有文件打开标识; 所述获得单元具体用于,在所述文件打开标识中携带有追加写标 识时 ,获得本次写操作的起始指针位置为所述 WORM文件的结束位置。

1 1、 根据权利要求 1 0所述的存储设备, 其特征在于, 所述获得 单元具体用于, 在所述文件打开标识中没有携带追加写标识时, 获得 本次写操作的起始指针位置为所述 W 0 R M文件的起始位置。

1 2、 根据权利要求 1 0所述的存储设备, 其特征在于, 所述接收 单元还用于, 在所述获得单元获得所述用户设备发送的 OPEN指令之 后, 在所述文件打开标识中没有携带追加写标识时, 接收所述用户设 备发送的 SEEK指令, 所述 SEEK指令中携带有目标指针位置;

则, 所述获得单元具体用于, 从接收单元接收的 SEEK指令中获 得本次写操作的起始指针位置,所述本次写操作的起始指针位置为所 述目标指针位置。

1 3、 根据权利要求 1 0所述的存储设备, 其特征在于, 所述接收 单元还用于, 在所述获得单元获得所述用户设备发送的 OPEN指令之 后, 在所述文件打开标识中携带有追加写标识但被转化掉的情况下, 接收所述用户设备发送的 SEEK指令, 所述 SEEK指令中携带有所述 WORM文件的结束位置;

则, 所述获得单元具体用于, 从接收单元接收的 SEEK指令中获 得本次写操作的起始指针位置,所述本次写操作的起始指针位置为所 述 WORM文件的结束位置。

1 4、根据权利要求 8 - 1 3任意一项所述的存储设备, 其特征在于, 还包括写入单元;

所述写入单元,用于在所述判断单元判断所述本次写操作是追加 写之后, 从所述获得单元获得的本次写操作的起始指针位置处, 写入 所述本次写操作的数据。

Description:
一种 WORM追加写判断方法及存储设备

本申请要求于 2013 年 9 月 23 日提交中国专利局、 申请号 201310436864.3、 发明名称为 "一种 WORM 追加写判断方法及存储设备" 的中国专利申请的优先权, 其全部内容通过引用结合在本申请中。

技术领域

本发明涉及通信领域, 尤其涉及一种 WORM ( Wr i te once Read many , 单写多读) 追加写判断方法及存储设备。

背景技术

WORM是一种只能单次写入但允许多次读取的数 存储方式,能有效 避免数据被意外删除、 重写或更改。 因此, 许多企业单位依赖 WORM 存 储来存储关键数据, 防止关键数据遭到更改或删除。 以 WORM 形式保存 的文件 (即 WORM文件) 不能被改写, 因此认为 WORM文件的保护范围是 [ 0, 原始文件大小] 。 对 WORM文件的操作主要有修改写和追加写, 修改 写指的是某次写操作要修改 WORM文件保护范围之内的数据, 对于 WORM 文件修改写是不允许的;追加写指的是某次写 操作要写入的数据在 WORM 文件保护范围之外, 对于 WORM文件追加写是允许的。

用户设备在向存储设备的文件系统写入数据时 , 会先向所述存储设 备的文件系统发送 OPEN 指令, 通知所述存储设备的文件系统准备进行 数据写入, 然后在接收到用户设备发送的 I TE指令后, 就可以在判断 出本次写操作是对 WORM文件的追加写时将本次写操作的数据写入 WORM 文件中。

现有技术判断本次写操作是否为追加写的方法 主要有两种。 一种是 根据文件打开标识来判断, 用户设备发送的 OPEN 指令中携带有文件打 开标识。 如果该文件打开标识携带了追加写标识, 则存储设备的文件系 统就会判断出本次写操作为追加写操作, 否则, 就认为是修改写, 不允 许本次写操作。 但是, 在应用本方法时, 有的网络协议如 NFS ( Ne twork F i l e Sys tem,网络文件系统) V3中存储设备上的客户端会对 OPEN指令中携带的文件打开标识进行转换,不 将文件打开标识下发到 存储设备的服务端, 存储设备的服务端在写文件时就无法判断此次 写操 作是否是追加写, 导致存储设备的服务端不会按照追加写模式写 文件。

另一种方法是根据文件指针位置来判断, 存储设备的文件系统接收 到 WRITE指令后会从调度后当前文件指针位置开始 入, 如果当前文件 指针位置在先前写入的 WORM 文件的保护范围内, 就认为是修改写, 否 则就是追加写。 如果存储设备的文件系统在进行的两次写操作 时, 都没 有进行文件指针调度, 则两次写操作都会从文件初始位置开始写入, 此 时, 若第二次写入的内容包含第一次写入的内容, 则第二次写操作实际 上是追加写, 但是存储设备的文件系统检测出第二次写操作 的指针在第 一次写入的 WORM 文件的保护范围内, 因此错误地将第二次写操作判断 为修改写, 无法准确判断出第二次写操作为追加写, 导致写操作无法进 行。

发明内容

本发明的实施例提供一种 WORM 追加写判断方法及存储设备, 可以 更加准确地判断对 WORM文件的写操作是否是追加写。

为达到上述目的, 本发明的实施例釆用如下技术方案:

第一方面, 公开了一种 WORM追加写判断方法, 包括:

获得本次写操作的起始指针位置;

接收用户设备发送的写 WRI TE指令, 所述 I TE指令中携带有本次 写操作的数据大小;

根据所述 WRI TE指令识别所述本次写操作的写入范围, 其中, 所述 写操作的写入范围是大于等于所述本次写操作 的起始指针位置值, 小于 等于所述本次写操作的起始指针位置值加上所 述本次写操作的数据大 小;

检测 WORM 文件的保护范围和所述本次写操作的写入范围 是否有交 若检测到有交集, 则检测所述本次写操作与所述 WORM 文件在交集 部分的数据是否一样;

若一样, 则判断所述本次写操作是追加写; 若不一样, 则判断所述 本次写操作是修改写。

结合第一方面, 在第一种可能的实现方式中, 所述方法还包括: 若检测到没有交集, 则判断所述本次写操作是追加写。

结合第一方面或第一方面的第一种可能的实现 方式, 在第二种可能 的实现方式中, 所述获得本次写操作的起始指针位置之前, 所述方法还 包括:

获得所述用户设备发送的打开 OPEN指令, 所述 OPEN指令中携带有 文件打开标识;

则, 所述获得本次写操作的起始指针位置, 包括:

若所述文件打开标识中携带有追加写标识, 则获得的本次写操作的 起始指针位置为所述 WORM文件的结束位置。

结合第一方面的第二种可能的实现方式, 在第三种可能的实现方式 中, 若所述文件打开标识中没有携带追加写标识, 则获得的本次写操作 的起始指针位置为所述 WORM文件的起始位置。

结合第一方面的第二种可能的实现方式, 在第四种可能的实现方式 中, 所述接收所述用户设备发送的 OPEN 指令之后, 若所述文件打开标 识中没有携带追加写标识, 则所述方法还包括:

接收所述用户设备发送的 SEEK指令, 所述 SEEK指令中携带有目标 指针位置;

则, 获得的本次写操作的起始指针位置为所述 SEEK 指令中的所述 目标指针位置。

结合第一方面的第二种可能的实现方式, 在第五种可能的实现方式 中, 所述接收所述用户设备发送的 OPEN 指令之后, 若所述文件打开标 识中携带有追加写标识但被转化掉的情况下, 所述方法还包括:

接收所述用户设备发送的 SEEK指令, 所述 SEEK指令中携带有所述 WORM文件的结束位置;

则, 获得的本次写操作的起始指针位置为所述 SEEK 指令中的所述 WORM文件的结束位置。

结合第一方面、 第一方面的第一种可能的实现方式、 第一方面的第 二种可能的实现方式、 第一方面的第三种可能的实现方式、 第一方面的 第四种可能的实现方式或第一方面的第五种可 能的实现方式, 在第六种 可能的实现方式中, 在判断所述本次写操作是追加写之后, 所述方法还 包括:

从所述本次写操作的起始指针位置处, 写入所述本次写操作的数 据。

第二方面, 公开了一种存储设备, 包括:

获得单元, 用于获得本次写操作的起始指针位置;

接收单元, 用于接收用户设备发送的写 WR I TE指令, 所述 I TE指 令中携带有本次写操作的数据大小;

识别单元, 用于根据所述接收单元接收的 WR I TE指令识别所述本次 写操作的写入范围, 其中, 所述写操作的写入范围是大于等于所述本次 写操作的起始指针位置值, 小于等于所述本次写操作的起始指针位置值 加上所述本次写操作的数据大小; 检测单元, 用于检测 WORM 文件的保护范围和所述识别单元识别出 的本次写操作的写入范围是否有交集;

所述检测单元还用于, 在检测到有交集后, 检测所述本次写操作与 所述 WORM文件在交集部分的数据是否一样;

判断单元,用于在所述检测单元检测到所述本 次写操作与所述 WORM 文件在交集部分的数据一样时, 判断所述本次写操作是追加写; 在所述 检测单元检测到所述本次写操作与所述 WORM 文件在交集部分的数据不 一样时, 判断所述本次写操作是修改写。

结合第二方面,在第一种可能的实现方式中, 所述判断单元还用于, 在所述检测单元检测到没有交集时, 判断所述本次写操作是追加写。

结合第二方面、 第二方面的第一种可能的实现方式, 在第二种可能 的实现方式中, 所述获得单元还用于, 在获得本次写操作的起始指针位 置之前, 获得所述用户设备发送的打开 OPEN指令, 所述 OPEN指令中携 带有文件打开标识;

所述获得单元具体用于, 在所述文件打开标识中携带有追加写标识 时, 获得本次写操作的起始指针位置为所述 WORM文件的结束位置。

结合第二方面, 在第三种可能的实现方式中, 在所述文件打开标识 中没有携带追加写标识时, 所述获得单元获得的本次写操作的起始指针 位置为所述 WORM文件的起始位置

结合第二方面,在第四种可能的实现方式中, 所述接收单元还用于, 在所述获得单元获得所述用户设备发送的 OPEN 指令之后, 在所述文件 打开标识中没有携带追加写标识时, 接收所述用户设备发送的 SEEK 指 令, 所述 SEEK指令中携带有目标指针位置;

则, 所述获得单元具体用于, 从接收单元接收的 SEEK 指令中获得 本次写操作的起始指针位置, 所述本次写操作的起始指针位置为所述目 标指针位置。

结合第二方面,在第五种可能的实现方式中, 所述接收单元还用于, 在所述获得单元获得所述用户设备发送的 OPEN 指令之后, 在所述文件 打开标识中携带有追加写标识但被转化掉的情 况下, 接收所述用户设备 发送的 SEEK指令, 所述 SEEK指令中携带有所述 WORM文件的结束位置; 则, 所述获得单元具体用于, 从接收单元接收的 SEEK 指令中获得 本次写操作的起始指针位置, 所述本次写操作的起始指针位置为所述 WORM文件的结束位置。

结合第一方面、 第一方面的第一种可能的实现方式、 第一方面的第 二种可能的实现方式、 第一方面的第三种可能的实现方式、 第一方面的 第四种可能的实现方式或第一方面的第五种可 能的实现方式, 在第六种 可能的实现方式中, 还包括写入单元;

所述写入单元, 用于在所述判断单元判断所述本次写操作是追 加写 之后, 从所述获得单元获得的本次写操作的起始指针 位置处, 写入所述 本次写操作的数据。

本发明实施例提供的 WORM 追加写判断方法和存储设备, 根据获得 的本次写操作的起始指针位置和本次写操作的 数据大小, 获得本次写操 作的写入范围, 然后检测 WORM 文件的保护范围和本次写操作的写入范 围是否有交集, 若有交集, 则检测所述本次写操作与所述 WORM 文件在 交集部分的数据是否一样, 若一样, 则判断本次写操作为追加写, 否则 判断本次写操作为修改写, 这样, 在追加写标识被转换掉的情况下, 本 发明实施例提供的方法可以根据本次写操作的 起始指针位置判断本次 写操作是否为追加写, 在没有追加写标识, 且本次写操作的写入范围与 所述 WORM 文件的保护范围有交集的情况下, 本发明实施例提供的方法 可以根据两者在交集部分的数据是否一样, 来准确地判断对 WORM 文件 的写操作是否是追加写, 故本发明实施例提供的方法就可以在各种场景 下更加准确地判断对 WORM文件的写操作是否是追加写。

附图说明

图 1为本发明实施例 1提供的一种 WORM追加写判断方法流程示意 图;

图 2为本发明实施例 2提供的一种 WORM追加写判断方法流程示意 图;

图 3为本发明提供的一种 WORM追加写过程示意图;

图 4为本发明实施例 3提供的一种存储设备的结构框图;

图 5为本发明实施例 3提供的另一种存储设备的结构框图; 图 6为本发明实施例 3提供的一种存储设备的结构框图。

具体实施方式

下面将结合本发明实施例中的附图, 对本发明实施例中的技术方案 进行清楚、 完整地描述, 显然, 所描述的实施例仅仅是本发明一部分实 施例, 而不是全部的实施例。 基于本发明中的实施例, 本领域普通技术 人员在没有做出创造性劳动前提下所获得的所 有其他实施例, 都属于本 发明保护的范围。

实施例 1 :

本发明实施例提供了一种 WORM追加写判断方法, 如图 1 所示, 所 述方法包括以下步骤:

101、 获得本次写操作的起始指针位置。

用户设备在向存储设备的文件系统写入数据时 , 会先向所述存储设 备的文件系统发送 OPEN 指令, 通知所述存储设备的文件系统准备进行 数据写入。

在用户设备向存储设备发送的 OPEN指令中有追加写标识的情况下, 所述 OPEN 指令中携带有文件打开标识, 所述文件打开标识中携带追加 写标识, 若因为在某些场景下 (如在应用了 NFS V 3 协议的场景下) , 所述文件打开标识中的追加写标识被存储设备 的客户端转化, 所述存储 设备的服务端就不会接收到所述追加写标识, 此时, 所述存储设备的文 件系统可以根据用户设备随后发送的, 携带有所述本次写操作的起始指 针位置的 SEEK 指令来获得所述本次写操作的起始指针位置, 这时, 用 户设备发送的本次写操作的起始指针位置为 WORM 文件的结束位置。 若 在其他场景下该追加写标识未被转化, 并发送给了所述存储设备的服务 端, 则所述存储设备会认为本次写操作为追加写, 则存储设备的文件系 统获得本次写操作的起始指针位置为所述 WORM文件的结束位置。

在用户设备向存储设备发送的 OPEN 指令中没有追加写标识的情况 下, 若所述用户设备没有向所述存储设备发送 SEEK 指令, 则本次写操 作的起始指针位置为所述 WORM 文件的起始位置; 若所述用户设备向所 述存储设备发送 SEEK指令, 则本次写操作的起始指针位置为所述 SEEK 指令中携带的指针位置。

1 02、 接收用户设备发送的 WR I TE指令, 所述 I TE指令中携带有 本次写操作的数据大小。

用户设备向存储设备的文件系统发送 OPEN 指令, 通知所述存储设 备的文件系统准备进行数据写入, 可以向所述存储设备的文件系统发送 SEEK指令, 通知本次写操作的起始指针位置, 也可以不发送 SEEK指令, 在这里, 所述 SEEK 指令是根据用户的需要来发送的, 在此不做限定。 在此之后, 所述用户设备就会向所述存储设备的文件系统 发送 WR I TE指 令, 通知所述存储设备的文件系统开始进行数据写 入, 所述 I TE指令 携带本次写操作的数据大小。

1 03、 根据所述 W R I T E指令识别所述本次写操作的写入范围。

其中, 所述写操作的写入范围是大于等于所述本次写 操作的起始指 针位置值, 小于等于所述本次写操作的起始指针位置值加 上所述本次写 操作的数据大小。

104、 检测 WORM文件的保护范围和所述本次写操作的写入 围是否 有交集。

所述 WORM文件的存储方式是单写多读, 不允许改变 WORM文件的原 有内容。 用户设备对 WORM 文件的写操作分为修改写和追加写, 其中追 加写允许的, 修改写是不允许的, 故所述 WORM 文件的保护范围指的是 大于等于 0小于等于原始 WORM文件的大小。

存储设备的文件系统可以检测 WORM 文件的保护范围和所述本次写 操作的写入范围是否有交集, 若检测到所述 WORM 文件的保护范围和所 述本次写操作的写入范围有交集, 则进行步骤 105 , 若检测到所述 WORM 文件的保护范围和所述本次写操作的写入范围 没有交集, 则进行步骤 106。

105、 检测所述本次写操作与所述 WORM文件在交集部分的数据是否 一样。

若一样, 则进行步骤 1 06 , 若不一样, 则进行步骤 107。

106、 判断所述本次写操作是追加写。

若检测到所述本次写操作与所述 WORM文件在交集部分的数据一样 , 则判断本次写操是在原有 WORM 文件中的数据的基础上进行的追加写, 允许执行本次写操作, 所述存储设备的文件系统就可以写入所述本次 写 操作的数据。

107、 判断所述本次写操作是修改写。

若检测到所述本次写操作与所述 WORM 文件在交集部分的数据不一 样, 则判断本次写操是对原有 WORM 文件中的数据的修改写, 所述存储 设备的文件系统不允许执行本次写操作。

在一些场景下, 例如 NFS V3协议, 所述 OPEN指令携带的追加写标 识会被存储设备的客户端转化, 本发明实施例提供的方法, 可以获得本 次写操作的起始指针位置为所述 WORM 文件的结束位置, 这样存储设备 的服务端就可以判断此次写操作为追加写; 若某次写操作的起始指针位 置为所述 WORM文件的起始位置, 且写入的内容包括 WORM文件的原有内 容, 本发明实施例提供的方法, 可以识别出 WORM 文件的保护范围和所 述本次写操作的写入范围的交集就是 [ 0 , WORM文件原有内容的大小] , 进而检测出二者在交集部分的数据一样, 就可以判断此次写操作为追加 写。 本发明实施例提供的 WORM 追加写判断方法, 可以在各种场景下更 加准确地判断对 WORM文件的写操作是否是追加写。

实施例 2 :

本发明实施例提供了一种 WORM追加写判断方法, 如图 2所示, 所 述方法包括以下步骤:

201、 用户设备发送 OPEN指令给存储设备, 所述 OPEN指令携带文 件打开标识。

用户设备在向存储设备的文件系统写入数据时 , 会先向所述存储设 备的文件系统发送 OPEN 指令, 通知所述存储设备服务端的文件系统准 备进行数据写入。 所述 OPEN 指令中携带有文件打开标识, 所述文件打 开标识可能会携带追加写标识。 但在某些场景下 (如在应用了 NFS V3 协议的场景下) , 所述追加写标识会被存储设备的客户端转化, 这样所 述存储设备的服务端就不会接收到所述追加写 标识。

202、 获得本次写操作的起始指针位置。

在用户设备向存储设备发送的 OPEN指令中有追加写标识的情况下, 获得本次写操作包括两种情况: 若所述追加写标识没有被转化, 就可以 获得本次写操作的起始指针位置为所述 WORM 文件的结束位置; 若在某 些场景下 (如在应用了 NFS V 3 协议的场景下) , 所述文件打开标识中 的追加写标识被存储设备的客户端转化, 这时就会接收所述用户设备发 送的 SEEK指令, 所述 SEEK指令中携带有所述 WORM文件的结束位置, 这样获得的本次写操作的起始指针位置为所述 SEEK指令中的所述 WORM 文件的结束位置。

在用户设备向存储设备发送的 OPEN 指令中没有追加写标识的情况 下, 获得本次写操作包括两种情况: 若所述用户设备没有发送 SEEK 指 令调动指针, 则获得本次写操作的起始指针位置为所述 WORM 文件的起 始位置; 若所述用户设备发送 SEEK指令, 所述 SEEK指令中携带有目标 指针位置, 则获得本次写操作的起始指针位置为所述 SEEK 指令中的所 述目标指针位置。

总之, 通过用户设备发送的 OPEN指令或者 SEEK指令就可以获得本 次写操作的起始指针位置。

203、 接收用户设备发送的 WR I TE指令, 所述 I TE指令中携带有 本次写操作的数据大小。

当用户设备向所述存储设备服务端的文件系统 发送的 OPEN 指令, 或者, OPEN指令和 SEEK指令后, 就会向所述存储设备的文件系统发送 WR I TE 指令, 通知所述存储设备的文件系统开始进行数据写 入, 所述 WR I TE指令携带本次写操作的数据大小。

204、 根据所述 WR I TE指令识别所述本次写操作的写入范围。

在这里, 所述写操作的写入范围是大于等于所述本次写 操作的起始 指针位置值, 小于等于所述本次写操作的起始指针位置值加 上所述本次 写操作的数据大小。 接收到用户设备发送的 WR I TE指令后, 就可以获得 所述 WR I TE指令中携带的本次写操作的数据大小, 然后结合步骤 202所 获得本次写操作的起始指针位置就可以得到本 次写操作的写入范围。

示例的, 如图 3所示, 本次写操作的文件指针是 51 2 , WR I TE指令 中携带的本次写操作的大小为 1024 字节, 则本次写操作的写入范围是 大于等于 512小于等于 512加上 1024 , 即写入范围为 [512 , 1536] 。

205、 检测 WORM文件的保护范围和所述本次写操作的写入 围是否 有交集。

这里, 所述 WORM文件的存储方式是单写多读, 不允许改变 WORM文 件的原有内容。 用户设备对 WORM 文件的写操作分为修改写和追加写, 其中追加写是允许的, 修改写是不允许的, 故所述 WORM 文件的保护范 围指的是大于等于 0小于等于原始 WORM文件的大小。

示例的, 如图 3所示, 所述 WORM文件的保护范围是 [ 0, 1 024] , 而 本次写操作的写入范围为 [512 , 1536] , 故可以检测到 WORM 文件的保护 范围和所述本次写操作的写入范围是有交集的 , 所以交集部分为 [512, 1 024] 。

若检测到有交集, 则进行步骤 206 , 若检测到没有交集, 则进行步 骤 208。

206、 检测所述本次写操作与所述 WORM文件在交集部分的数据是否 一样。

若一样, 则进行步骤 207 , 若不一样, 则进行步骤 208。

207、 判断所述本次写操作是修改写。

若检测到所述本次写操作与所述 WORM 文件在交集部分的数据不一 样, 则判断本次写操是对原有 WORM 文件中的数据的修改写, 所述存储 设备不允许执行本次写操作。

208、 判断所述本次写操作是追加写。

若检测到所述本次写操作与所述 WORM文件在交集部分的数据一样 , 则判断本次写操是在原有 WORM 文件中的数据的基础上进行的追加写, 允许执行本次写操作, 所述存储设备的文件系统就可以写入所述本次 写 操作的数据。 示例的, 如图 3所示, 存储设备的文件系统检测出本次写 操作和 WORM文件保护范围的交集部分是 B [512, 1 024] ,所述存储设备可 以检测出所述 WORM文件与本次写操作在 B部分 的数据一样, 这样就可 以判断出所述本次写操作是追加写。

209、 从所述本次写操作的起始指针位置处, 写入所述本次写操作 的数据。

若所述存储设备判断出所述本次写操作是追加 写时, 所述存储设备 服务端就会从所述本次写操作的起始指针位置 处, 写入所述本次写操作 的数据, 示例的, 如图 3所示, 所述存储设备从 512开始写入所述本次 写操作的 1024 字节的数据 B+C , 最终得到本次写操作写入后的内容 A+B+C , 并未对原始内容 A+B进行修改。

在一些场景下, 例如 NFS V3协议, 所述 OPEN指令携带的追加写标 识会被存储设备的客户端转化, 本发明实施例提供的方法, 可以获得本 次写操作的起始指针位置为所述 WORM 文件的结束位置, 这样存储设备 的服务端就可以判断此次写操作为追加写; 若某次写操作的起始指针位 置为所述 WORM文件的起始位置, 且写入的内容包括 WORM文件的原有内 容, 本发明实施例提供的方法, 可以识别出 WORM 文件的保护范围和所 述本次写操作的写入范围的交集就是 [ 0 , WORM文件原有内容的大小] , 进而检测出二者在交集部分的数据一样, 就可以判断此次写操作为追加 写。 本发明实施例提供的 WORM 追加写判断方法, 可以在各种场景下更 加准确地判断对 WORM文件的写操作是否是追加写。

实施例 3 :

本发明实施例提供了一种存储设备, 如图 4所示, 包括: 获得单元 401、 接收单元 402、 识别单元 403、 检测单元 404和判断单元 405。

获得单元 401 ,用于获得本次写操作的起始指针位置;接收 元 402 , 用于接收用户设备发送的写 WRITE指令, 所述 ITE指令中携带有本次 写操作的数据大小; 识别单元 403 , 用于根据所述接收单元 402接收的 WRITE指令识别所述本次写操作的写入范围, 其中, 所述写操作的写入 范围是大于等于所述本次写操作的起始指针位 置值, 小于等于所述本次 写操作的起始指针位置值加上所述本次写操作 的数据大小; 检测单元 404 , 用于检测 WORM文件的保护范围和所述识别单元 403识别出的本次 写操作的写入范围是否有交集; 所述检测单元 404还用于, 在检测到有 交集后, 检测所述本次写操作与所述 WORM 文件在交集部分的数据是否 一样; 判断单元 405 , 用于在所述检测单元 404检测到所述本次写操作 与所述 WORM 文件在交集部分的数据一样时, 判断所述本次写操作是追 加写; 在所述检测单元 404检测到所述本次写操作与所述 WORM文件在 交集部分的数据不一样时, 判断所述本次写操作是修改写。

判断单元 405还用于, 在所述检测单元 404检测到没有交集时, 判 断所述本次写操作是追加写。

所述获得单元 401还用于, 在所述获得单元 401获得本次写操作的 起始指针位置之前,获得所述用户设备发送的 打开 OPEN指令,所述 OPEN 指令中携带有文件打开标识;

所述获得单元 401具体用于, 在所述文件打开标识中携带有追加写 标识时, 获得本次写操作的起始指针位置为所述 WORM文件的结束位置。

所述获得单元 401具体用于, 在所述文件打开标识中没有携带追加 写标识时, 获得本次写操作的起始指针位置为所述 WORM 文件的起始位 置。

所述接收单元 402还用于, 在所述获得单元 401获得所述用户设备 发送的 OPEN指令之后, 在所述文件打开标识中没有携带追加写标识时 , 接收所述用户设备发送的 SEEK指令, 所述 SEEK指令中携带有目标指针 位置; 则, 所述获得单元 401具体用于, 从接收单元 402接收的 SEEK指 令中获得本次写操作的起始指针位置, 所述 SEEK 指令中携带有目标指 针位置。

可选的, 如图 5所示, 还包括写入单元 406 , 所述写入单元 406用 于在所述判断单元 405判断所述本次写操作是追加写之后, 从所述获得 单元 401获得的本次写操作的起始指针位置处, 写入所述本次写操作的 数据。

本发明实施例还提供了一种存储设备, 如图 6所示, 包括: 接收接 口 601 , 存储器 602 , 处理器 603 , 和磁盘 604。 当然, 存储设备还可以 包括基带处理部件、 中射频处理部件、 输入输出存储设备等通用部件, 本发明实施例在此不做任何限制。 其中, 存储器 603中存储一组程序代 码, 且处理器 602用于调用存储器 603中存储的程序代码, 用于执行以 下操作:

所述处理器 603 , 用于获得本次写操作的起始指针位置所述处理 器 603通过接收接口 601接收用户设备发送的写 WRI TE指令, 所述 WR ITE 指令中携带有本次写操作的数据大小; 所述处理器 603 , 还用于根据所 述接收接口接收的 WRI TE指令识别所述本次写操作的写入范围, 其中, 所述写操作的写入范围是大于等于所述本次写 操作的起始指针位置值, 小于等于所述本次写操作的起始指针位置值加 上所述本次写操作的数 据大小; 所述处理器 603 , 还用于检测 WORM文件的保护范围和所述处理 器 603识别出的本次写操作的写入范围是否有交集 ; 所述处理器 603还 用于, 在检测到有交集后, 检测所述本次写操作与所述 WORM 文件在交 集部分的数据是否一样; 所述处理器 603还用于, 在所述检测单元检测 到所述本次写操作与所述 WORM 文件在交集部分的数据一样时, 判断所 述本次写操作是追加写; 在所述检测单元检测到所述本次写操作与所述 WORM文件在交集部分的数据不一样时, 判断所述本次写操作是修改写。 磁盘 604 , 用于在所述处理器 603判断所述本次写操作是追加写之后, 从所述处理器 603获得的本次写操作在磁盘 604上的起始指针位置处, 在所述磁盘 604上写入所述本次写操作的数据。

所述处理器 603还用于, 在所述处理器 603检测到没有交集时, 判 断所述本次写操作是追加写。

所述处理器 603还用于, 在所述处理器 603获得本次写操作的起始 指针位置之前, 获得所述用户设备发送的打开 OPEN指令, 所述 OPEN指 令中携带有文件打开标识; 所述处理器 603具体用于, 在所述文件打开 标识中携带有追加写标识时, 获得本次写操作的起始指针位置为所述 WORM文件的结束位置。

所述处理器 603具体用于, 在所述文件打开标识中没有携带追加写 标识时, 获得本次写操作的起始指针位置为所述 WORM文件的起始位置。

所述处理器 603还用于, 在获得所述用户设备发送的 OPEN指令之 后, 在所述文件打开标识中没有携带追加写标识时 , 通过所述接收接口 601接收所述用户设备发送的 SEEK指令, 所述 SEEK指令中携带有目标 指针位置; 则, 所述处理器 603具体用于, 从接收接口 601接收的 SEEK 指令中获得本次写操作的起始指针位置, 所述本次写操作的起始指针位 置为所述目标指针位置。

所述处理器 603还用于, 在获得所述用户设备发送的 OPEN指令之 后, 在所述文件打开标识中携带有追加写标识但被 转化掉的情况下, 通 过所述接收接口 601接收所述用户设备发送的 SEEK指令, 所述 SEEK指 令中携带有所述 WORM文件的结束位置; 则, 所述处理器 603具体用于, 从接收接口 601接收的 SEEK指令中获得本次写操作的起始指针位置, 所述本次写操作的起始指针位置为所述 WORM文件的结束位置。

本发明实施例提供的存储设备, 根据获得的本次写操作的起始指针 位置和本次写操作的数据大小, 获得本次写操作的写入范围, 然后检测

WORM文件的保护范围和本次写操作的写入范 是否有交集, 若有交集, 则检测所述本次写操作与所述 WORM 文件在交集部分的数据是否一样, 若一样, 则判断本次写操作为追加写, 否则判断本次写操作为修改写, 这样, 在追加写标识被转换掉的情况下, 本发明实施例提供的方法可以 根据本次写操作的起始指针位置判断本次写操 作是否为追加写, 在没有 追加写标识, 且本次写操作的写入范围与所述 WORM 文件的保护范围有 交集的情况下, 本发明实施例提供的方法可以根据两者在交集 部分的数 据是否一样, 来准确地判断对 WORM 文件的写操作是否是追加写, 故本 发明实施例提供的方法就可以在各种场景下更 加准确地判断对 WORM 文 件的写操作是否是追加写。

本领域普通技术人员可以理解: 实现上述方法实施例的全部或部分 步骤可以通过程序指令相关的硬件来完成, 前述的程序可以存储于一计 算机可读取存储介质中, 该程序在执行时, 执行包括上述方法实施例的 步骤; 而前述的存储介质包括: R0M、 RAM , 磁碟或者光盘等各种可以存 储程序代码的介质。

以上所述, 仅为本发明的具体实施方式, 但本发明的保护范围并不 局限于此, 任何熟悉本技术领域的技术人员在本发明揭露 的技术范围 内, 可轻易想到变化或替换, 都应涵盖在本发明的保护范围之内。 因此, 本发明的保护范围应所述以权利要求的保护范 围为准。