CN117763636A - 数据写入方法,恢复方法,读取方法以及对应装置 - Google Patents
数据写入方法,恢复方法,读取方法以及对应装置 Download PDFInfo
- Publication number
- CN117763636A CN117763636A CN202311689327.XA CN202311689327A CN117763636A CN 117763636 A CN117763636 A CN 117763636A CN 202311689327 A CN202311689327 A CN 202311689327A CN 117763636 A CN117763636 A CN 117763636A
- Authority
- CN
- China
- Prior art keywords
- metadata
- log
- data
- block
- disk
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
- 238000000034 method Methods 0.000 title claims abstract description 61
- 238000011084 recovery Methods 0.000 title claims description 24
- 230000001360 synchronised effect Effects 0.000 claims abstract description 20
- 230000002688 persistence Effects 0.000 claims abstract description 8
- 238000012986 modification Methods 0.000 claims description 20
- 230000004048 modification Effects 0.000 claims description 20
- 230000004044 response Effects 0.000 claims description 5
- 230000002085 persistent effect Effects 0.000 claims description 4
- 238000003780 insertion Methods 0.000 claims description 3
- 230000037431 insertion Effects 0.000 claims description 3
- 238000005192 partition Methods 0.000 claims 2
- 230000008569 process Effects 0.000 description 18
- 238000010586 diagram Methods 0.000 description 17
- 238000002657 hormone replacement therapy Methods 0.000 description 8
- 230000006835 compression Effects 0.000 description 7
- 238000007906 compression Methods 0.000 description 7
- 238000013523 data management Methods 0.000 description 6
- 238000005516 engineering process Methods 0.000 description 5
- 238000012423 maintenance Methods 0.000 description 5
- 230000006870 function Effects 0.000 description 4
- 238000012217 deletion Methods 0.000 description 3
- 230000037430 deletion Effects 0.000 description 3
- 238000007726 management method Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 238000012795 verification Methods 0.000 description 3
- 239000002253 acid Substances 0.000 description 2
- 230000008859 change Effects 0.000 description 2
- 238000013500 data storage Methods 0.000 description 2
- 230000003111 delayed effect Effects 0.000 description 2
- 238000001514 detection method Methods 0.000 description 2
- 230000007246 mechanism Effects 0.000 description 2
- 230000008520 organization Effects 0.000 description 2
- 238000009825 accumulation Methods 0.000 description 1
- 238000013459 approach Methods 0.000 description 1
- 230000008901 benefit Effects 0.000 description 1
- 238000013524 data verification Methods 0.000 description 1
- 230000007812 deficiency Effects 0.000 description 1
- 238000011161 development Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 238000002955 isolation Methods 0.000 description 1
- 238000013507 mapping Methods 0.000 description 1
- 238000013175 transesophageal echocardiography Methods 0.000 description 1
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本说明书实施例提供一种数据写入,数据恢复,数据读取的方法和相应的安全磁盘装置。数据写入方法包括,先将用户数据块写入写缓存,在一定条件下,读取写缓存中以逻辑地址标识的多个用户数据块。针对各用户数据块,为其分配物理地址,并对其进行认证加密,生成加密数据块和认证信息,进而生成该用户数据块对应的第一元数据,所述第一元数据组织为KV对的形式,并包括逻辑地址,物理地址以及认证信息。向主机磁盘提交针对多个用户数据块的多条写命令,使得磁盘按照对应的物理地址存储加密数据块。此外,还将各个用户数据块对应的第一元数据写入通过LSM树维护的第一元数据表中。然后,向LSM树和主机磁盘发出同步操作命令,使其完成数据写入的持久化。
Description
技术领域
本说明书一个或多个实施例涉及计算机中的数据读写安全领域,尤其涉及一种安全的数据写入方法,读取方法以及数据读写管理装置。
背景技术
随着各行业计算技术的发展,以及云端和终端用户的增加,人们将大量数据存储在各种计算机设备中。在行业发展的同时,人们对于设备和数据安全的关注也在日益增加。为了确保设备和数据的安全性,各个架构厂商也分别提出了各自的解决方案,如ARM提出了可信区技术(TrustZone),AMD提出了安全虚拟机加密技术(SEV),英特尔提出了软件防护扩展(SGX)技术,等等。这些解决方案为用户提供一个安全的可信执行环境TEE,用于机密地保存和处理数据,使其免受不可信的内核与传统应用程序的损害。
然而,对于磁盘数据的安全性保护仍然存在不足,存在对此进行改进的需求。
发明内容
本说明书一个或多个实施例描述了一种安全虚拟磁盘方案,以及根据该安全虚拟磁盘进行数据写入,数据恢复和数据读取的方法及装置。该方案能够增强对磁盘数据安全性的保护。
根据第一方面,提供一种数据写入方法,包括:
在预设触发条件下,读取写缓存中的多个用户数据块,各用户数据块以其逻辑地址标识;
针对各用户数据块,为其分配物理地址,并对其进行认证加密,生成加密数据块和认证信息,进而生成该用户数据块对应的第一元数据,所述第一元数据组织为KV对的形式,并包括逻辑地址,物理地址以及所述认证信息;
向主机磁盘提交针对所述多个用户数据块的多条写命令,使得磁盘按照对应的物理地址,将所述加密数据块存储于磁盘的第一存储区;
将各个用户数据块对应的所述第一元数据写入通过LSM树维护的第一元数据表中;
向所述LSM树和主机磁盘发出同步操作命令,使其完成数据写入的持久化。
根据第二方面,提供了一种数据恢复方法,包括:
从磁盘中恢复出通过LSM树维护的第一元数据表,其中记录各个用户数据块对应的第一元数据,各条第一元数据包括,用户数据块的逻辑地址,物理地址以及认证信息,并附加有同步ID;
根据各条第一元数据的同步ID,确定出未完成同步的第一元数据;
丢弃未完成同步的第一元数据的相关数据。
根据第三方面,提供了一种数据读取方法,包括:
接收读取请求,其中包括目标逻辑地址;
以所述目标逻辑地址为键,查询第一元数据表,读取目标元数据,该目标元数据还包括目标物理地址和目标认证信息;其中,上述第一元数据表通过LSM树的方式维护,其中记录各个用户数据块对应的元数据;
根据所述目标物理地址,从磁盘中读取加密数据块,并根据所述目标认证信息,对所述加密数据块进行解密和认证,得到用户数据块。
根据第四方面,提供了一种数据写入装置,包括:
读取单元,配置为在预设触发条件下,读取写缓存中的多个用户数据块,各用户数据块以其逻辑地址标识;
生成单元,配置为针对各用户数据块,为其分配物理地址,并对其进行认证加密,生成加密数据块和认证信息,进而生成该用户数据块对应的第一元数据,所述第一元数据组织为KV对的形式,并包括逻辑地址,物理地址以及所述认证信息;
第一写入单元,配置为向主机磁盘提交针对所述多个用户数据块的多条写命令,使得磁盘按照对应的物理地址,将所述加密数据块存储于磁盘的第一存储区;
第二写入单元,配置为将各个用户数据块对应的所述第一元数据写入通过LSM树维护的第一元数据表中;
同步单元,配置为向所述LSM树和主机磁盘发出同步操作命令,使其完成数据写入的持久化。
根据第五方面,提供了一种数据恢复装置,包括:
恢复单元,配置为从磁盘中恢复出通过LSM树维护的第一元数据表,其中记录各个用户数据块对应的第一元数据,各条第一元数据包括,用户数据块的逻辑地址,物理地址以及认证信息,并附加有同步ID;
确定单元,配置为根据各条第一元数据的同步ID,确定出未完成同步的第一元数据;
丢弃单元,配置为丢弃未完成同步的第一元数据的相关数据。
根据第六方面,提供了一种数据读取装置,包括:
接收单元,配置为接收读取请求,其中包括目标逻辑地址;
查询单元,配置为以所述目标逻辑地址为键,查询第一元数据表,读取目标元数据,该目标元数据还包括目标物理地址和目标认证信息;其中,上述第一元数据表通过LSM树的方式维护,其中记录各个用户数据块对应的元数据;
获取单元,配置为根据所述目标物理地址,从磁盘中读取加密数据块,并根据所述目标认证信息,对所述加密数据块进行解密和认证,得到用户数据块。
根据第七方面,提供了一种计算设备,包括存储器和处理器,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现第一方面至第三方面所述的方法。
在本说明书实施例提供的方案中,提出一种通过分层log结构实现的安全磁盘,或称为安全虚拟磁盘。该安全磁盘通过多个层级的基于log的数据结构实现安全性。每个层级都在更低层级提供的数据抽象结构的基础上,添加越来越高级的存储功能和/或具有更强安全属性的新的数据抽象结构,从而逐层具有更高的安全性和功能性。可以验证,通过这样分层级实现的安全磁盘,能够实现数据的核心安全要求:写私密性和读正确性,具有全方位的CIFCAI安全性。并且,该安全磁盘方案可以抵御回滚攻击。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其它的附图。
图1示出根据一个实施例的数据写入过程的流程图;
图2示出安全磁盘的L5层级的数据结构示意图;
图3示出安全磁盘的L4层级的数据管理结构示意图;
图4示出了主同步ID随同步轮次的变化示例;
图5示出安全磁盘的L3层级的数据管理结构示意图;
图6示出安全磁盘的L2层级的数据管理结构示意图;
图7示出根据一个实施例安全磁盘中的数据存储示意图;
图8示出在一个实施例中基于安全磁盘的数据恢复过程流程图;
图9示出根据一个实施例的数据读取方法流程图;
图10示出根据一个实施例的数据写入装置的结构示意图;
图11示出根据一个实施例的数据恢复装置的结构示意图。
具体实施方式
下面结合附图,对本说明书提供的方案进行描述。
在描述实施例方案之前,首先对相关的技术术语进行解释和介绍。
可信执行环境(TEE):一种新兴的基于硬件的安全技术。TEE使用户能够在特权对手无法窥探或篡改的专用内存区域中运行其敏感应用程序。
软件保护扩展插件SGX:是一组指令代码,用于实现一些英特尔中央处理器(CPU)中内置的可信执行环境。
文件***:通常缩写为FS,是操作***OS用来控制数据存储和检索方式的方法和数据结构。
消息身份认证码MAC:有时被称为身份认证标签,是用于对消息进行身份验证和完整性检查的一小段信息。
Merkle默克哈希树MHT:或称为默克树,是一种二叉树,其中每个叶都是数据块的哈希,每个内部节点都是其两个子节点串联的哈希。
日志结构合并树:也称为LSM树,或LSMT,是一种存储键值对KV的数据结构,能够对具有高***量的文件提供快速索引和存取。
如前所述,为保护数据安全,提出可信执行环境TEE的方案。现代TEE可分为两类:基于飞地Enclave的TEE(例如,Intel的SGX)和基于虚拟机VM的TEE(例如,AMD的SEV)。Enclave在用户进程中创建隔离和加密的内存区域,而基于VM的TEE应用内存隔离和加密来保护潜在恶意虚拟机监控程序上的VM。
虽然TEE硬件可以保护内存中的数据,但是对磁盘上的数据保护不足。一种有吸引力的方法是利用安全的虚拟磁盘,因为其可以透明地保护文件***的磁盘I/O。然而,现有的解决方案在安全性和性能方面都不令人满意。
若有特权敌手控制着非可信的主机磁盘以及TEE的生命周期,它可能会发起各种攻击,包括但不限于:窥探攻击(窃取数据)、篡改攻击(修改数据)、崩溃攻击(迫使TEE离线)、重放攻击(在TEE在线时用旧数据替换新数据),回滚攻击(在TEE离线时用旧磁盘状态替换整个磁盘状态)。回滚攻击对TEE的防御比重放攻击更具挑战性,因为TEE离线时内存数据会丢失,无法利用其中的数据进行攻击检测和防御。
具体的,在一种相关TEE技术中,采用默克树MHT的变体进行数据安全验证。MHT是一种分层树状结构,其中叶节点存储数据,每个非叶节点通过维护其加密密钥和MAC来保护其子节点。MHT确保整个文件的机密性、完整性和新鲜性。然而,如果TEE崩溃或重新启动,MHT的根MAC将丢失。当TEE离线时,整个磁盘可能会被回滚攻击逆转。因此,相关技术中对磁盘数据的保护仍有不足。
有鉴于此,在本说明书的实施例中,提出一种通过分层log结构实现的安全磁盘,或称为安全虚拟磁盘。该安全磁盘通过多个层级的基于log的数据结构实现安全性。更具体而言,在具体的典型例子中,安全磁盘可以由6个层级构成,从低层级到高层级可以标记或划分为L0至L5。每个层级都在更低层级提供的数据抽象结构的基础上,添加越来越高级的存储功能和/或具有更强安全属性的新的数据抽象结构,从而逐层具有更高的安全性和功能性。
可以理解的是,在已有的操作***中,***内核底层通过调用物理磁盘提供的接口,与磁盘通信,向磁盘写入数据,或从中读取数据。这部分功能可以抽象为设备映射器(device mapper)。在Linux***中,该设备映射器是***提供的逻辑卷管理子***,允许在物理存储设备和逻辑卷之间建立映射关系,是重要的存储管理组件之一。为实现上述安全虚拟磁盘的功能,根据本说明书实施例,可以对设备映射器调用磁盘接口的方式/数据等进行修改,从而控制和管理存入磁盘的数据结构,实现分层的log结构的安全虚拟磁盘。
下面结合数据写入过程,描述安全磁盘的各个层级的数据结构、功能和安全特点。
图1示出根据一个实施例的数据写入过程的流程图。在数据写入过程中,产生的用户数据首先以逻辑块为单位,存入写缓存中。这里需要说明的是,这里的用户数据是指,来自操作***上层的文件***的数据。后续提及的“用户”,也并非终端用户个人,而是指代文件***或操作***上层,即设备映射器的使用方。
在一个实施例中,上述写缓存是处于可信执行环境TEE的内存区段,具有指定大小。可以理解,在TEE***中,将内存划分出一个安全区段,归属于TEE。存储于该安全区段的数据具有TEE所提供的安全保障。或者,写缓存也可以是处于TEE中的高速缓存。如此,存入写缓存的用户数据处于TEE中,安全性得到保证。
根据图1的步骤S11,响应于预设触发条件,读取写缓存中的多个用户数据块,各用户数据块以其逻辑地址LBA(logical block address)标识;其中触发条件可以收到同步操作的指令,或者指示写缓存已满的指令。换而言之,在接收到同步操作指令Sync时,或者写缓存已写满时,从写缓存中读取其中的用户数据块,准备同步到磁盘。一般的,这里的同步操作指令Sync可以是由用户(例如文件***)或操作***发出的。
接着,在步骤S12,针对各用户数据块,为其分配物理地址,并对其进行认证加密,生成加密数据块和认证信息,进而生成该用户数据块对应的第一元数据。该第一元数据组织为KV对的形式,并包括逻辑地址,物理地址以及上述认证信息。
具体而言,针对任意用户数据块U,一方面,为其分配物理地址HBA(host blockaddress)。为此,可以维护块分配信息,用于记录磁盘中块空间的分配状态。通过查询该块分配信息,可以知晓当前块空间中空闲的物理块,将其分配给当前的用户数据块U。在分配之后,还需修改上述块分配信息,使其记录更新后的最新块分配状态。在一个实施例中,上述块分配信息包括,块状态表BVT(block validity table),和块分配日志BAL(blockallocation/deallocation log),块状态表BVT以位图bitmap形式记录各个块当前是否被占用,块分配日志BAL用于记录块被分配和解分配(回收)的事件。若干条块分配日志BAL被定期合并,以更新块状态表BVT。
另一方面,对于用户数据块U,使用随机加密密钥sk,采用认证加密算法(authenticated encryption)对其进行加密,产生加密数据块EnU以及消息认证码MAC。其中,消息认证码MAC和加密密钥sk用于对加密数据块EnU进行认证,称为该数据块的认证信息。在一个具体例子中,在上述步骤中,采用AES-GCM加密算法产生加密数据块EnU和消息认证码MAC。根据该加密算法,将明文拆分为多个片段,逐段进行加密后聚合。在其他例子中,可以采用已有的各种认证加密算法,实现上述加密和MAC码生成。
以上针对用户数据块U确定的信息构成该数据块U的元数据,为了清楚和区分,将其称为第一元数据。该第一元数据可以组织为键值对Key-Value对的形式,其中包括,该数据块U的逻辑地址LBA,物理地址HBA以及上述认证信息。更具体的,第一元数据可以写为下面的KV对形式:
(Key=LBA,Value=(HBA,sk,MAC))
即,第一元数据中的Key为数据块U的逻辑地址,Value包括物理地址,加密密钥和MAC码。
接着,在步骤S13,向主机磁盘提交提交针对所述多个用户数据块的多条写命令,使得磁盘按照对应的物理地址,将所述加密数据块存储于磁盘的第一存储区。
例如,若步骤S11中读取n个用户数据块U1,U2,…Ui,Un,则在步骤S13提交的命令序列中包括n条写指令W1,W2,…Wi,Wn,其中,用户数据块Ui对应的写指令Wi中包含该数据块Ui对应的物理地址HBA,使得磁盘将该数据块Ui对应的加密数据块EnUi存储于HBA指示的存储位置。
此外,在步骤S14,将上述第一元数据写入以LSM树方式维护的第一元数据表中。其中,LSM树是许多文件***常常采用来维护KV对数据的数据结构。结合本步骤的具体维护方式将在下文中详述。
较优地,在确保步骤S13中磁盘执行上述写命令序列后,执行步骤S14。或者,在一种实施方式中,步骤S13和S14也可以并行执行,或不区分顺序。
在将第一元数据写入LSM树之后,在步骤S15,向所述LSM树和主机磁盘发出同步操作命令,使其完成数据写入的持久化。针对LSM树发出同步操作命令,使得LSM树结构记录并完成本次同步操作。向主机磁盘提交同步操作命令,使得磁盘确保本次写入的所有数据得到持久化。
下面结合安全磁盘的多层级数据结构,描述数据写入过程中各层级的数据结构和数据状态。
图2示出安全磁盘的L5层级的数据结构示意图。如图所示,当从写缓存中将用户数据块写入磁盘时,根据块状态表BVT和块分配日志BAL所构成的块分配信息,为用户数据块分配物理地址HBA,并更新块分配信息。此外,还通过认证加密生成用户数据块对应的加密数据块和认证信息(sk和MAC)。基于这些信息,生成用户数据块的第一元数据,即KV对:(Key=LBA,Value=(HBA,sk,MAC))。
KV对形式的第一元数据被添加到逻辑块表(即第一元数据表)中,该数据表通过LSM树的方式维护。具体的,存储第一元数据的LSM树的数据结构在L4层进行维护。
另一方面,在L0层,将磁盘中非可信的物理块组织为多个不同性质的存储区,不同存储区支持通过不同加密格式加密的数据,通过不同接口进行数据写入。具体的,上述不同性质的存储区包括BlockSet和BlockLog。其中,BlockSet用于存储块状加密格式的数据,适于存储用户数据块。BlockLog用于存储上述LSM树中各种加密信息,这将在下文中详细描述。因此,在L5层,将用户数据块对应的加密数据块存储于性质为BlockSet的第一存储区。
关于块状态表BVT和块分配日志BAL,其可以记录为log日志的形式。具体的,块状态表BVT为位图形式,可以将其中的比特值序列化,形成log日志。块分配日志BAL用于记录各次块分配/解分配事件,每个事件可以对应于位图中某个位的0/1变化。每个事件记录为一条log日志。在为某个用户数据块U分配物理地址HBA后,需要在块分配日志BAL中添加一条反映该分配事件的log日志。为节省磁盘空间,可以定期地将当前的块状态表BVT和在其之后的块分配日志BAL进行合并,生成新的BVT。Log日志在L3层进行维护。
下面依层级顺序,依次描述以上数据结构的维护。
图3示出安全磁盘的L4层级的数据管理结构示意图。如前所述,L4层级主要用于维护LSM树形式的第一元数据表。
参见图3,该LSM树的主要工作流程遵循现代LSM树的工作流程。最初,新的键值对KV被缓冲或添加到一个名为MemTable的内存组件中,该组件可以认为是在内存中维护的一个临时表。根据本方案的一个实施例,MemTable也位于内存的TEE区段中。当MemTable的大小增长超过阈值时,这个变化(active)的MemTable将转换为不可变状态(immutable),并按照KV对中Key的顺序,将不可变的MemTable中的KV对排序为字符串表SST或SSTable,然后持久化到磁盘。此过程称为轻压缩(minor compaction)。为了回收磁盘空间并增强查询处理能力,在持久化介质(磁盘)中将SST组织为多个文件级别,这些文件级别的容量呈指数级增长。轻压缩会在最高级别l0处产生SST(为区别于安全磁盘的数据结构层级,这里SST存储的文件级别用小写表示)。一旦在级别li处SST的数量超过阈值,则来自级别li和li+1的一些SST将被选择用于合并排序,从而在级别li+1处生成新的SST以替换旧的SST。这样的操作被称为主压缩(major compaction)。为了防止MemTables中的数据丢失,还将新的KV添加到预写日志WAL(Write-Ahead Log)中。
上述LSM树内部的所有操作,如***KV,读取KV,写WAL日志,SST间的压缩操作,都具有事务(简称Tx)的特性(即ACID),因此该LSM树可称为是一个TxLsmTree。相应的,L4层又可称为(事务)LSM树层。
以上LSM树的维护方式和工作流程与已有的LSM树是一致的,区别在于,已有的LSM树所处理的KV对内容是用户数据本身,而图3中的TxLsmTree所维护的KV对,是用户数据块对应的元数据,如图2的逻辑块表所示。当将写缓存中的n个用户数据块写入磁盘时,针对这n个数据块生成n个元数据KV对,添加到LSM树中。
预写日志WAL本身为log日志形式,将元数据KV对写入预写日志WAL通过追加log日志的方式实现。KV对***到SST,以及SST相应产生的压缩事务,构成SST操作事务,产生SST操作事务日志。因此,KV对在SST中的***也是以log日志的方式实现。Log日志数据在L3层进行维护。
为了确保同步的不可逆性,如图3所示,在TxLsm树中引入了主同步ID。可以看到,图3中的TxLsm树具有Sync接口和Put接口。Put接口用于传入KV对,Sync接口用于接收Sync同步操作命令。如之前的步骤S15所述,每次将一批用户数据块的加密数据存储于磁盘,元数据写入Lsm树之后,会向Lsm树发出Sync同步操作命令。响应于该命令,主同步ID进行一次递增,例如加1。该主同步ID存储于磁盘之外的独立的可信持久存储设备中。该存储设备可以是第三方可信存储器,甚至区块链***。
另一方面,在步骤S14将各个用户数据块的元数据KV对添加到LSM树时,会首先读取当前的同步ID,即上述主同步ID的当前值,将该同步ID附加到每一个KV对上,然后才写入预写日志WAL,***MemTable。具体的,在一个例子中,可以将同步ID以后缀或其他形式,附着在KV对的Value值后。在后续基于Memtable和SST进行压缩时,该同步ID一直附着于KV对上。
需要理解的是,在每轮数据写入和同步过程中,如图1所示,都会先将元数据KV写入LSM树,才会向LSM树发出Sync同步操作命令,因此,元数据KV对读取的同步ID是上一轮同步递增后、本轮递增前的值。
图4示出了主同步ID随同步轮次的变化示例。在图4的例子中,主同步ID初始值为0,每次递增1。因此,在最初一轮的数据写入过程中,写入的各个用户数据块(示例性的,假定第一轮写入4个块)的元数据KV对,都附着上同步ID:0。完成该轮数据写入后,通过Sync同步操作命令,主同步ID递增为1。在第二轮的数据写入过程中,写入的各个元数据KV对都附着上同步ID:1。以此类推。在第i+1轮的数据写入过程中,写入的元数据KV对都附着有同步ID:i。
如此可以发现,通过对比某个KV对的同步ID是否小于主同步ID,即可确定该KV对及其对应的用户数据是否已经完成同步。如果KV对附着的同步ID小于主同步ID,则该KV对必然已经完成同步;如果同步ID等于主同步ID,则说明其尚未完成同步。这使得数据恢复和回滚攻击的检测变得非常简单。在崩溃后的恢复过程中,可以从上述可信持久存储设备中读出主同步ID,并将其与WAL中存储的KV对的同步ID进行比较,以检测回滚攻击。可以安全地丢弃所有未同步的KV对,从而将LSM树状态恢复到上次完成的同步操作的状态。
综合以上,在L4层的LSM树中,通过同步ID实现同步的原子性和不可逆性。其中,LSM树相关的数据变更事务均通过log日志的形式维护。下面描述通过L3层级对log日志数据的维护。
图5示出安全磁盘的L3层级的数据管理结构示意图。在L3层级,提供一个事务性的、面向log日志的文件***TxLogFs,该Log文件***专为安全磁盘的需求而定制。
TxLogFs支持创建、删除、列出、读取和写入Log日志文件。所管理的Log日志包括,图2中L5层涉及的块状态表BVT和块分配日志BAL,图3中L4层涉及的预写日志WAL和SST的操作事务日志。每条Log日志具有唯一日志id,不同类型的Log日志通过不同分箱(bucket)来管理。例如,分箱1用于存储及标识预写日志WAL,分箱2用于存储及标识SST操作事务日志。更进一步的,如前所述,SST的写入也是分层的,因此在一个示例中,可以按照SST的层级划分更加细粒度的分箱。
根据安全磁盘的需求,文件***TxLogFs可以规定以下要求:(1)I/O必须块对齐;(2)文件是仅追加的log日志;(3)文件存储在预先确定的分箱中(不是动态创建的文件夹)。为了获得较佳的效率,TxLogFs应用于中等大小文件(<1GB)数量相对较少(<10K)的工作负载情况。
TxLogFs内置了对事务(TX)的支持,保证了ACID之中的原子性、并发性和持久性。为了最小化事务TX之间冲突的概率,TxLogFs文件***可以进行以下设定:(1)禁止并发事务打开同一log日志文件进行写入,从而避免写入冲突;(2)对日志文件采用延迟删除(或称为懒删除)机制来处理TxLog的并发删除情况,该机制可以推迟对象真正的删除时机。类比UNIX FS中对文件的删除,其中,一个文件在被“删除”后,其对于已经使用该文件的当前程序仍然可用,直到进程退出该文件才被真正删除。通过采用延迟删除机制,可以避免删除一个日志文件时干扰使用该日志文件的其他事务TX,从而避免删除冲突。(3)通过***生成的ID识别log日志,使得每条Log日志具有唯一日志id,避免名称冲突。
下面描述数据写入过程中,TxLogFs文件***的数据维护方式。如图5所示,TxLogFs文件***中的日志文件由TxLog表示。随着用户数据向磁盘的写入,L5层的块状态表BVT和块分配日志BAL,L4层的预写日志WAL和SST的操作事务日志,均会产生新的log日志数据。在追加Log日志数据时,通过RawLog为追加的Log日志数据分配磁盘空间。这里的Rawlog可以认为是设备映射器中用于管理log日志的组件,可以视为log管理器。在一个实施例中,Rawlog可以以块为单位分配空间。在另一实施例中,Rawlog以分块或大块Chunk为单位分配空间。一个分块Chunk可以包括固定数量M个连续的物理块。例如,该固定数量M可以是256个物理块。如图5所示意的,当确定当前追加的log日志数据需要N个块,则RawLog从磁盘中分配N:M个chunk。与单个块为单位进行分配相比,以chunk为单位分配空间,可以将多次小型逻辑写入转换为大型顺序写入,具有性能上的优势。
TxLogFs文件***中维护分块状态表CVT(chunk validity table),用于记录各个分块的分配状态。该状态表CVT可以是位图bitmap的形式。Rawlog通过查询该分块状态表CVT进行空间的分配,并在为当前log日志数据分配若干chunk后,更新该分块状态表CVT。
在Rawlog为当前log日志数据分配若干chunk后,可以将当前log日志数据加密存储于所分配的chunk中。在一个实施例中,对log日志数据的加密可以采用CryptoLog格式进行加密。CryptoLog加密格式是支持随机读的、加密保护的log数据,加密后的数据块通过组织成默克树MHT进行验证和保护。
此外,TxLogFs文件***中维护log元数据信息,用于记录log日志数据的存储状态。Log元数据信息具体可以记录,各条log日志的基本信息,例如ID,所属的分箱等,还记录log日志的存储信息,例如包括存储于哪个chunk,加密认证信息等。随着当前log日志数据被加密存储于所分配的chunk,log元数据信息也随之进行更新。
在一个例子中,如图5所示,log元数据信息具体包括log信息表和log分配表。更具体的,log信息表中记录各条log日志的日志id,日志分箱(对应于日志类别),加密存储后形成的默克树MHT的树根值(用于数据验证)。Log分配表可以记录,日志id,字节长度,为其分配的分块的chunk id。
Log元数据信息和前述的分块状态表CVT共同构成与log日志文件TxLog相关的第二元数据。可以理解,在追加log日志数据时,第二元数据中的各个表也随之进行更新。为了确保log日志文件的安全,采用journal日志的形式,安全地维护第二元数据,将第二元数据的持久化状态作为一系列增量更改安全地存储在Journal日志中。Journal日志的数据结构在L2层提供。
图6示出安全磁盘的L2层级的数据管理结构示意图。在L2层级,提供一个安全的Journal日志,称为EditJournal,用于记录前述第二元数据的状态。可以理解,相比于log日志的文本存储形式,Journal日志是更底层的日志形式。
根据EditJournal,记录对象(这里即为第二元数据)的每次数据更新或修改称为一个修改单元(Edit)。如图6所示,EditJournal通过记录对象的一系列修改单元(Edit)对应的增量更改来维护对象的最新状态。当修改单元数目超过某个阈值时,将创建表示所有修改单元的累积的状态快照。在此快照记录之后,快照之前发生的所有修改单元所占用的空间将不再需要,并且可以释放。最新的快照连同在它之后添加的所有修改单元,共同表示记录对象的最新状态。
因此,整个Journal日志记录可体现为一个记录序列,其中包括按时间顺序排列的多条记录。该多条记录中可以包括最近的快照记录,以及在该快照记录之后依时间顺序依次添加的若干修改记录,一条修改记录对应一个修改单元。相应的,当图5中的分块状态表CVT,log信息表和log分配表中任意一项进行一次更新时,在Journal日志的记录序列中追加一条与本次更新的增量内容有关的修改记录即可。
若最近连续的修改记录的数目达到预设阈值,则读取记录序列中距离当前时间最近的第一快照记录1以及自该第一快照记录以来的多条修改记录,在第一快照记录对应的第一快照数据上累加多条修改记录的信息,生成第二快照数据,并根据第二快照数据生成第二快照记录2,追加到记录序列。
该Journal日志的记录序列通过CryptoChain格式进行加密,存储于磁盘的性质为BlockLog的存储区。CryptoChain格式是一种链式加密,其中,按序排列的数据块通过在每个块中存储前一个块的认证信息(例如MAC)而“链接”。BlockLog是磁盘的多个存储区之一,用于存储组织为链式或树状的加密数据。
需说明的是,尽管记录序列中包含快照记录,但是快照记录仅存储快照的元数据,而不存储快照数据本身。具体的,快照记录中保存快照数据的存储位置和认证信息(例如MAC),并引用或指向对应的快照数据。快照数据则通过CryptoBlob格式加密,存储于磁盘的BlockSet存储区。CryptoBlob格式是另外一种块状加密格式,支持就地更新,并使用认证加密进行保护。
根据一个较佳实施方式,在BlockSet存储区设置两个块空间,用于存储快照数据。每当产生一个份新的快照数据,将其写入到两个块空间中最近的快照版本更旧的那个。或者说,将相继产生的快照数据版本交替写入两个块空间。例如,相继产生的快照数据1存储于块空间1,快照数据2存储于块空间2,快照数据3回到块空间1进行存储。这确保了始终可以获取到快照数据用于恢复最新状态。即使某一个块空间被写坏/攻击而无法读出,也可以从另一个块空间恢复出接近最新状态的快照数据,连同修改单元的数据恢复出最新状态。
综合以上,在用户数据块写入磁盘过程中,相关的各种元数据(KV对形式的第一元数据,第一元数据相关的log日志,log日志相关的第二元数据,第二元数据对应的Journal日志)在各层数据结构的支持下,以各自对应的加密格式,写入磁盘的不同区域。在完成这些写入之后,如图1中步骤S15所示,会向磁盘提交sync同步命令。磁盘响应于sync同步命令,将该sync命令之前写入的数据进行持久化。
如上所述,各种不同数据在不同层级以不同加密格式写入磁盘的不同区域。对此,安全磁盘的L1层用于维护和支持不同的加密格式,L0层提供磁盘的分区存储。
具体的,L1层提供了至少三种加密格式,以确保数据的机密性、完整性和新鲜性。
一种格式是CryptoBlob,它表示一个安全的数据blob,可以就地更新,并使用经过身份认证的加密进行保护。图6中journal日志中的快照数据采用这种加密格式进行加密。
第二种格式是CryptoChain,它是一种链式加密数据格式。按照此格式组织的数据通过在每个块中存储前一个块的认证信息(包括MAC)来形成数据链。图6中Journal日志的记录序列采用CryptoChain格式进行加密。
第三种格式是CryptoLog,这是一种随机读取的、受加密保护的日志。此日志中的加密数据块组织为默克树MHT,通过MHT进行验证和保护。图5中的log日志数据采用CryptoLog格式进行加密。
如前所述,在L0层,将非可信的物理块组织成不同性质的存储区,通过不同接口进行数据写入。具体的,上述不同性质的存储区包括BlockSet和BlockLog。
BlockSet存储区通过对操作***OS原生的块进行封装而实现,对应的Blockset接口用于读或写固定的一组非可信物理块。前述数据写入过程中,通过认证加密生成的块状加密数据可以存储于BlockSet存储区。
BlockLog存储区则将非可信的物理块组织成块序列,对应的BlockLog接口用于实现从块序列读数据和追加数据。具体的,前述通过CryptoChain格式和CryptoLog格式加密的数据均存储于BlockLog存储区。
图7示出根据一个实施例安全磁盘中的数据存储示意图。如图所示,主机磁盘中的非可信物理块被组织为两个存储区BlockSet和BlockLog。BlockSet的大部分存储空间,用于存储数据量较大的加密用户数据块,一小部分空间存储加密blob。具体的,加密blob可以是图6中以CryptoBlob格式对快照数据加密得到的加密块。用户数据块和加密blob均为采用认证加密方式产生的块状加密数据,但是加密数据的组织上有所不同。根据CryptoBlob格式得到的加密blob中,包含加密后的数据,版本id,MAC等数据作为一个整体。而加密的用户块中仅包含加密数据本身,MAC等认证信息则存储于图2所示的KV对中,写入LSM树。
BlockLog则用于存储通过CryptoChain格式加密的Journal日志,以及通过CryptoLog格式加密的Log日志。
通过以上对L5到L0层中各个层数据结构和处理过程的描述,安全磁盘各个层所提供的抽象数据结构,数据特点以及安全性可示出于如下的表1。
表1中的CIFCAI为以下安全性因子的简写:机密性confidentiality,完整性integrity,新鲜性freshness,一致性consistency,原子性atomicity,和不可逆性irreversibility.
通过表1可见,每个层级都在更低层级提供的数据抽象结构的基础上,组织出更上层更抽象的数据结构,添加更高级的存储功能和/或具有更强安全属性,从而逐层具有更高的安全性和功能性。可以验证,通过这样分层级实现的安全磁盘,能够实现数据的核心安全要求:写私密性和读正确性,具有全方位的CIFCAI安全性。并且,该安全磁盘方案可以抵御回滚攻击。对回滚攻击的抵御可以通过数据恢复过程更清楚的阐明。
图8示出在一个实施例中基于安全磁盘的数据恢复过程流程图。数据恢复一般可发生于主机因为各种原因宕机、崩溃的情况下。此时,内存中的数据丢失,部分数据还没有能够写入磁盘,磁盘的同步过程可能还没最终完成。这都会造成数据的不一致。为此,本说明书实施例中的安全磁盘,可以提供一种安全的数据恢复过程,该数据恢复的目的是将该***维护的所有数据恢复到上一次完整同步操作时的状态。如图8所示,数据恢复过程包括以下步骤。
在主机宕机重启后,首先在步骤S81,从磁盘中恢复出通过LSM树维护的第一元数据表,其中记录各个用户数据块对应的第一元数据,单条第一元数据包括,用户数据块的逻辑地址,物理地址以及认证信息,并附加有同步ID;
在步骤S82,根据各条第一元数据的同步ID,确定出未完成同步的第一元数据;
在步骤S83,丢弃未完成同步的第一元数据的相关数据。
具体的,第一元数据表是通过LSM树维护的,LSM树在写入时KV对首先缓存在内存的MemTable中,会随着主机宕机而丢失。因此,在一个实施例中,通过从磁盘中恢复预写日志WAL,恢复出第一元数据表中的各条第一元数据。
为了恢复出预写日志WAL,在一个实施例中,可以从磁盘第一存储区(BlockSet)的预定块空间中读取快照数据,从第二存储区(BlockLog)读取加密的Journal日志的记录序列(如图6所示)。在一个实施例中,如图6所示,采用两个块空间分别交替存储依次产生的快照数据。如此,读取快照数据具体为,优先读取最新的快照数据。若存储最近的快照数据的块空间无法读取,则从另一块空间读取次新的快照数据。
然后,通过读取的快照数据和记录序列,恢复得到最新的第二元数据,如前所述,第二元数据是与log日志文件TxLog相关的元数据,其中包括记录log日志数据的存储状态的Log元数据信息。具体的,log元数据信息包括如图5所示的log信息表,log分配表。因此,基于恢复出的第二元数据中的log元数据信息,可以确定出构成预写日志WAL的各条log日志在磁盘中的存储位置,从而从磁盘中读取出预写日志WAL。于是,通过预写日志WAL可以得到第一元数据表中的各个元数据KV对。
接着,在步骤S82,从可信存储介质读取当前的主同步ID,并将其与各条第一元数据的同步ID进行比较。
如之前结合图3所描述,在将第一元数据(即元数据KV对)添加到LSM树时,各个元数据KV对都会附加上主同步ID的当前值作为同步ID,然后才添加到Memtable和预写日志WAL,而主同步ID存储于独立的可信存储介质,并在每个同步命令后递增。如此,通过对比某个KV对的同步ID是否小于主同步ID,即可确定该KV对及其对应的用户数据是否已经完成同步。如果KV对附着的同步ID小于主同步ID,则该KV对必然已经完成同步;如果同步ID等于主同步ID,则说明其尚未完成同步。
因此,在步骤S82,可以将同步ID等于主同步ID的第一元数据,确定为未完成同步的第一元数据。相应的,在步骤S83,丢弃未完成同步的第一元数据的相关数据。这包括,丢弃未完成同步的KV对,使得LSM树恢复到上一次完成同步后的状态。此外,可选的,还可以丢弃与上述KV对相关的其他数据,例如对应的用户数据块,以及与这些KV对的添加相关的log日志,第二元数据等。
通过以上过程,可以检测回滚攻击,并可以在主机崩溃之后将磁盘数据安全地恢复到上一次同步后的状态。
根据另一方面的实施例,还提供一种数据读取方法。图9示出根据一个实施例的数据读取方法流程图。如图9所示,该读取过程包括以下步骤。
在步骤S91,接收读取请求,其中包括目标逻辑地址LBA。该目标逻辑地址LBA是用户(上层文件***)指定要读取的数据块的逻辑地址。
在步骤S92,以所述目标逻辑地址LBA为键,查询第一元数据表,读取目标元数据,该目标元数据还包括目标物理地址HBA和目标认证信息。其中,上述第一元数据表通过LSM树的方式维护,其中记录各个用户数据块对应的第一元数据。在一个实施例中,目标认证信息可以包括,加密密钥sk,消息认证码MAC。
在步骤S93,根据所述目标物理地址HBA,从磁盘中读取加密数据块,并根据所述目标认证信息,对所述加密数据块进行解密和认证,得到用户数据块。
如此,实现正确、安全地读取用户数据。
根据又一方面的实施例,提供一种数据写入装置,即安全虚拟磁盘中用于进行数据写入的逻辑部分。图10示出根据一个实施例的数据写入装置的结构示意图。如图10所示,该写入装置100包括:
读取单元101,配置为在预设触发条件下,读取写缓存中的多个用户数据块,各用户数据块以其逻辑地址标识;
生成单元102,配置为针对各用户数据块,为其分配物理地址,并对其进行认证加密,生成加密数据块和认证信息,进而生成该用户数据块对应的第一元数据,所述第一元数据组织为KV对的形式,并包括逻辑地址,物理地址以及所述认证信息;
第一写入单元103,配置为向主机磁盘提交针对所述多个用户数据块的多条写命令,使得磁盘按照对应的物理地址,将所述加密数据块存储于磁盘的第一存储区;
第二写入单元104,配置为将各个用户数据块对应的所述第一元数据写入通过LSM树维护的第一元数据表中;
同步单元105,配置为向所述LSM树和主机磁盘发出同步操作命令,使其完成数据写入的持久化。
该写入装置中各个单元的执行方式可以参见前述结合图1-图7对数据写入过程的描述,此处不复赘述。
根据另一方面,还提供一种数据恢复装置,即安全虚拟磁盘中用于进行数据恢复的逻辑部分。图11示出根据一个实施例的数据恢复装置的结构示意图。如图11所示,该恢复装置110可以包括:
恢复单元111,配置为从磁盘中恢复出通过LSM树维护的第一元数据表,其中记录各个用户数据块对应的第一元数据,各条第一元数据包括,用户数据块的逻辑地址,物理地址以及认证信息,并附加有同步ID;
确定单元112,配置为根据各条第一元数据的同步ID,确定出未完成同步的第一元数据;
丢弃单元113,配置为丢弃未完成同步的第一元数据的相关数据。
该恢复装置中各个单元的执行方式可以参见前述结合图8对数据恢复过程的描述,此处不复赘述。
根据又一方面,还提供一种数据读取装置,即安全虚拟磁盘中用于数据读取的逻辑部分。该读取装置可以包括:
接收单元,配置为接收读取请求,其中包括目标逻辑地址;
查询单元,配置为以所述目标逻辑地址为键,查询第一元数据表,读取目标元数据,该目标元数据还包括目标物理地址和目标认证信息;其中,上述第一元数据表通过LSM树的方式维护,其中记录各个用户数据块对应的元数据;
获取单元,配置为根据所述目标物理地址,从磁盘中读取加密数据块,并根据所述目标认证信息,对所述加密数据块进行解密和认证,得到用户数据块。
根据再又方面的实施例,还提供一种计算设备,包括存储器和处理器,所述计算设备形成机密计算架构,所述机密计算架构包括,安全世界,领域世界,非安全世界和根世界;所述根世界包括前述的根监视器。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、固件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (23)
1.一种数据写入方法,包括:
在预设触发条件下,读取写缓存中的多个用户数据块,各用户数据块以其逻辑地址标识;
针对各用户数据块,为其分配物理地址,并对其进行认证加密,生成加密数据块和认证信息,进而生成该用户数据块对应的第一元数据,所述第一元数据组织为KV对的形式,并包括逻辑地址,物理地址以及所述认证信息;
向主机磁盘提交针对所述多个用户数据块的多条写命令,使得磁盘按照对应的物理地址,将所述加密数据块存储于磁盘的第一存储区;
将各个用户数据块对应的所述第一元数据写入通过LSM树维护的第一元数据表中;
向所述LSM树和主机磁盘发出同步操作命令,使其完成数据写入的持久化。
2.根据权利要求1所述的方法,其中,所述预设触发条件包括,所述写缓存写满;或者,收到进行同步操作的指令。
3.根据权利要求1所述的方法,其中,所述认证信息包括加密密钥以及产生的消息认证码MAC。
4.根据权利要求1所述的方法,其中,为其分配物理地址包括:
查找并修改用于记录磁盘中块空间的分配状态的块分配信息,所述块分配信息记录为若干条log日志的形式。
5.根据权利要求4所述的方法,其中,所述块分配信息包括,位图形式的块状态表,以及若干条块分配日志;所述若干条块分配日志被定期合并,以更新所述块状态表。
6.根据权利要求1所述的方法,其中,将所述第一元数据写入以LSM树方式维护的第一元数据表中,包括:
获取主同步ID的当前值作为同步ID,所述主同步ID被设置为,响应于所述同步操作命令而递增;
将附加有所述同步ID的所述第一元数据写入预写日志WAL中,并***到所述LSM树结构,所述LSM树结构响应于数据***在预设条件下执行排序字符表SST操作事务,产生操作事务日志。
7.根据权利要求6所述的方法,其中,所述主同步ID存储于独立于所述磁盘的可信持久化存储介质。
8.根据权利要求6所述的方法,将所述第一元数据写入以LSM树方式维护的第一元数据表中,还包括:
针对log日志形式的目标日志数据,从所述第一存储区分配数据分块chunk;所述目标日志数据包括以下中的至少一项:所述预写日志WAL,所述操作事务日志,以及,在为各用户数据块分配物理地址时所使用的、用于记录磁盘中块空间的分配状态的块分配信息;
将所述目标日志数据加密存储于分配的数据分块中,并更新与log日志相关的第二元数据,所述第二元数据包括,用于记录log日志数据的存储状态的log元数据信息,以及用于记录各个分块的分配状态的分块状态表。
9.根据权利要求8所述的方法,其中,所述log元数据信息包括,log信息表和log分配表,所述log信息表至少记录日志id,日志类别;所述日志分配表至少记录日志id及其分配的分块id。
10.根据权利要求8所述的方法,其中,将所述目标日志数据加密存储于分配的数据分块中,包括:
通过第一加密格式,将所述目标日志数据加密存储于磁盘的第二存储区;所述第一加密格式包括,将数据密文整理为默克树形式。
11.根据权利要求8所述的方法,其中,所述第二元数据记录为journal日志的形式,所述journal日志包括按时间顺序排列的多条记录的记录序列;
所述更新与log日志相关的第二元数据,包括:
向所述记录序列追加与本次更新的增量内容有关的修改记录。
12.根据权利要求11所述的方法,其中,所述journal日志通过第二加密格式存储于磁盘的第二存储区;所述第二加密格式为链式加密,其中按序排列的每一数据块存储前一数据块的认证信息。
13.根据权利要求11所述的方法,其中,所述更新与log日志相关的第二元数据,还包括:
若最近连续的修改记录的数目达到预设阈值,则读取所述记录序列中距离当前时间最近的第一快照记录以及自所述第一快照记录以来的若干条修改记录,在所述第一快照记录对应的第一快照数据上累加所述若干条修改记录的信息,生成第二快照数据,并根据第二快照数据生成第二快照记录,追加到所述记录序列。
14.根据权利要求13所述的方法,其中,所述第一快照数据加密存储于所述第一存储区的第一块空间;所述更新与log日志相关的第二元数据,还包括:
将第二快照数据加密存储于所述第一存储区的第二块空间;所述第二块空间不同于第一块空间。
15.根据权利要求13所述的方法,其中,根据第二快照数据生成第二快照记录,包括:
获取所述第二快照数据的第三元数据,基于第三元数据生成第二快照记录;所述第三元数据中包括,所述第二快照数据的存储位置和认证信息。
16.根据权利要求1所述的方法,其中,所述写缓存是位于可信执行环境TEE中的内存区段。
17.一种数据恢复方法,包括:
从磁盘中恢复出通过LSM树维护的第一元数据表,其中记录各个用户数据块对应的第一元数据,各条第一元数据包括,用户数据块的逻辑地址,物理地址以及认证信息,并附加有同步ID;
根据各条第一元数据的同步ID,确定出未完成同步的第一元数据;
丢弃未完成同步的第一元数据的相关数据。
18.根据权利要求17所述的方法,其中,从磁盘中恢复出通过LSM树维护的第一元数据表,包括:
从磁盘第一存储区的预定块空间中读取快照数据,从第二存储区读取加密的Journal日志的记录序列;
通过所述快照数据和记录序列,恢复得到最新的第二元数据,其中包括记录log日志数据的存储状态的log元数据信息;
基于恢复出的log元数据信息,确定构成预写日志WAL的各条log日志在磁盘中的存储位置,从而从磁盘中读取出预写日志WAL,所述预写日志WAL中记录有所述LSM树的各条第一元数据。
19.根据权利要求17所述的方法,其中,确定出未完成同步的第一元数据,包括:
从可信存储介质读取当前的主同步ID,并将其与各条第一元数据的同步ID进行比较;
将同步ID等于主同步ID的第一元数据,确定为未完成同步的第一元数据。
20.一种数据读取方法,包括:
接收读取请求,其中包括目标逻辑地址;
以所述目标逻辑地址为键,查询第一元数据表,读取目标元数据,该目标元数据还包括目标物理地址和目标认证信息;其中,上述第一元数据表通过LSM树的方式维护,其中记录各个用户数据块对应的元数据;
根据所述目标物理地址,从磁盘中读取加密数据块,并根据所述目标认证信息,对所述加密数据块进行解密和认证,得到用户数据块。
21.一种数据写入装置,包括:
读取单元,配置为在预设触发条件下,读取写缓存中的多个用户数据块,各用户数据块以其逻辑地址标识;
生成单元,配置为针对各用户数据块,为其分配物理地址,并对其进行认证加密,生成加密数据块和认证信息,进而生成该用户数据块对应的第一元数据,所述第一元数据组织为KV对的形式,并包括逻辑地址,物理地址以及所述认证信息;
第一写入单元,配置为向主机磁盘提交针对所述多个用户数据块的多条写命令,使得磁盘按照对应的物理地址,将所述加密数据块存储于磁盘的第一存储区;
第二写入单元,配置为将各个用户数据块对应的所述第一元数据写入通过LSM树维护的第一元数据表中;
同步单元,配置为向所述LSM树和主机磁盘发出同步操作命令,使其完成数据写入的持久化。
22.一种数据恢复装置,包括:
恢复单元,配置为从磁盘中恢复出通过LSM树维护的第一元数据表,其中记录各个用户数据块对应的第一元数据,各条第一元数据包括,用户数据块的逻辑地址,物理地址以及认证信息,并附加有同步ID;
确定单元,配置为根据各条第一元数据的同步ID,确定出未完成同步的第一元数据;
丢弃单元,配置为丢弃未完成同步的第一元数据的相关数据。
23.一种计算设备,包括存储器和处理器,其特征在于,所述存储器中存储有可执行代码,所述处理器执行所述可执行代码时,实现权利要求1-20中任一项所述的方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311689327.XA CN117763636A (zh) | 2023-12-08 | 2023-12-08 | 数据写入方法,恢复方法,读取方法以及对应装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202311689327.XA CN117763636A (zh) | 2023-12-08 | 2023-12-08 | 数据写入方法,恢复方法,读取方法以及对应装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN117763636A true CN117763636A (zh) | 2024-03-26 |
Family
ID=90317212
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202311689327.XA Pending CN117763636A (zh) | 2023-12-08 | 2023-12-08 | 数据写入方法,恢复方法,读取方法以及对应装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN117763636A (zh) |
-
2023
- 2023-12-08 CN CN202311689327.XA patent/CN117763636A/zh active Pending
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10129222B2 (en) | Trusted storage systems and methods | |
US7152165B1 (en) | Trusted storage systems and methods | |
US9817582B2 (en) | Offload read and write offload provider | |
US8805788B2 (en) | Transactional virtual disk with differential snapshots | |
US10810162B2 (en) | Physical file verification | |
US9742564B2 (en) | Method and system for encrypting data | |
US8631203B2 (en) | Management of external memory functioning as virtual cache | |
US8205049B1 (en) | Transmitting file system access requests to multiple file systems | |
US8010543B1 (en) | Protecting a file system on an object addressable storage system | |
US20150046398A1 (en) | Accessing And Replicating Backup Data Objects | |
WO1999014652A1 (en) | Encrypting file system and method | |
WO2016117022A1 (ja) | ログの管理方法及び計算機システム | |
Sinha et al. | Veritasdb: High throughput key-value store with integrity | |
WO2023216783A1 (zh) | 日志结构的安全数据存储方法及装置 | |
US8095804B1 (en) | Storing deleted data in a file system snapshot | |
US10678460B2 (en) | Detecting and managing collisions in storage | |
Chakraborti et al. | Dm-x: protecting volume-level integrity for cloud volumes and local block devices | |
CN117763636A (zh) | 数据写入方法,恢复方法,读取方法以及对应装置 | |
Mullen | CapsuleDB: A Secure Key-Value Store for the Global Data Plane | |
KR100623553B1 (ko) | 분산 저장장치 기반 침입 탐지 시스템 및 방법 | |
Fujita et al. | Arbre: A file system for untrusted remote block-level storage | |
IABG et al. | Hybris: Consistency Hardening in Robust Hybrid Cloud Storage |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |