CN110297781B - 一种基于写时复制来恢复apfs中被删除数据的方法 - Google Patents

一种基于写时复制来恢复apfs中被删除数据的方法 Download PDF

Info

Publication number
CN110297781B
CN110297781B CN201910596825.7A CN201910596825A CN110297781B CN 110297781 B CN110297781 B CN 110297781B CN 201910596825 A CN201910596825 A CN 201910596825A CN 110297781 B CN110297781 B CN 110297781B
Authority
CN
China
Prior art keywords
volume
apfs
block
node
address
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.)
Active
Application number
CN201910596825.7A
Other languages
English (en)
Other versions
CN110297781A (zh
Inventor
梁效宁
许超明
何丽萍
朱星海
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xly Salvationdata Technology Inc
Original Assignee
Xly Salvationdata Technology Inc
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Xly Salvationdata Technology Inc filed Critical Xly Salvationdata Technology Inc
Priority to CN201910596825.7A priority Critical patent/CN110297781B/zh
Publication of CN110297781A publication Critical patent/CN110297781A/zh
Application granted granted Critical
Publication of CN110297781B publication Critical patent/CN110297781B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/14Error detection or correction of the data by redundancy in operation
    • G06F11/1402Saving, restoring, recovering or retrying
    • G06F11/1471Saving, restoring, recovering or retrying involving logging of persistent data for recovery
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/064Management of blocks
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Quality & Reliability (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明公开了一种基于写时复制来恢复APFS中被删除数据的方法,其特征在于包括以下步骤:S100:加载磁盘数据;S200:检测所述磁盘数据并判断所述磁盘数据是否为APFS文件系统格式的数据,如果是,执行步骤S300,否则执行步骤S100;S300:获取APFS容器的各个检查点超级块CSB;S400:解析APFS容器检查点超级块CSB数据;S500:解析宗卷检查点超级块VCSB数据;S600:解析宗卷B‑树结构;S700:确定被删除数据;S800:判断被删除数据的存储空间是否被分配,如果是,则执行步骤S900,否则执行步骤SA00;S900:判断被删除数据的被分配块是否被覆盖,如果是,执行步骤S700,否则,执行步骤SB00;SA00:提取未被分配块内的被删除数据,结束流程;SB00:提取被分配块中未被覆盖的数据,结束流程。

Description

一种基于写时复制来恢复APFS中被删除数据的方法
技术领域
本发明属于电子数据恢复与取证领域,涉及一种基于写时复制来恢复APFS中被删除数据的方法。
背景技术
APFS是AppleFileSystem的简称,是苹果公司在2016年6月14日的WWDC上正式发布了全新的文件格式,用以替代目前所使用的HFS+文件系统,其特征是“优化闪存/SSD存储,并以加密为主要功能”,在I/O联合上使用了“独特的写时复制COW(copy-on-write)设计”,在确保可靠性的基础上优化性能。该系统的核心为加密功能,其将为苹果旗下的每款设备提供统一的加密方法。该系统包含有多密钥加密功能,内置有针对每个文件的密钥,其针对敏感元数据也都有独立的密钥。
写时复制COW(Copy-on-Write),顾名思义,即写入时复制。是计算机程序设计领域中的一种优化策略。其核心思想是,如果有多个调用者(Callers)同时要求相同的资源(如内存或者是磁盘上的数据存储),它们会共同获取相同的指针指向相同的资源,直到某个调用者试图修改资源内容时,系统才会真正复制一份专用副本(privatecopy)给该调用者,而其他调用者所见到的最初的资源仍然保持不变。该过程对其他调用者都是透明的。此做法主要的优点是如果调用者没有修改资源,就不会有副本被创建,因此多个调用者只是读取操作时可以共享同一资源。
苹果公司的APFS文件系统利用了写时复制COW的思想,与HFS+文件系统中的日志相比提高了性能减少了开销。APFS文件系统数据被刷新,就会创建一个新的检查点(CheckPoint),每个检查点都有一个检查点超级块CSB(CheckPointSuperBlock)与之对应。
由于APFS的独特文件格式及高度的加密功能,对APFS中删除文件难以恢复和提取。而现有技术中尚无一种基于写时复制来恢复APFS中被删除数据的方法,给APFS的电子数据恢复与取证造成了巨大的困难。因此,急需一种基于写时复制来恢复APFS中被删除数据的方法,以弥补APFS的电子数据恢复与取证困难的不足。
发明内容
本发明针对现有技术的不足问题,提出了一种基于写时复制COW来恢复APFS中被删除数据的方法:通过对APFS文件系统的结构进行特定的解析,利用APFS文件系统每次写时复制COW都会创建检查点的思想,实现APFS文件系统文件数据被删除后的高效、便捷的数据恢复,达到恢复并提取APFS中删除数据的目的。
在APFS容器中,存储数据使用B-树数据结构。B-树是一种自平衡的树,能够保持数据有序,这种数据结构能够让查找数据、顺序访问、插入数据以及删除的动作,都在对数时间内完成。这样能够保证对APFS文件系统APFS容器中的数据进行快速操作。
为便于描述,本发明可能包含如下术语:
APFS容器:在磁盘上划分几个逻辑部分,每个存放APFS文件系统数据的逻辑部分都称之为APFS容器;
B-树:用于对宗卷中的文件信息进行存储管理的数据结构;
宗卷:一个APFS容器中划分的一个或多个物理部分;所有宗卷可以共享APFS容器中的空闲空间;
块:一个APFS容器被等分成多个存储单元,每个存储单元称为一个块;
位图结构BMS:管理APFS容器中所有块的使用情况(例如,0:表示未分配;1:表示已分配使用)。
本发明申请包括以下步骤:
S100:加载磁盘数据:加载所述磁盘并读取所述磁盘0扇区信息,所述0扇区信息包括:
具有标记“NXSB”的检查点超级块CSB、APFS容器写时复制COW的ID、APFS容器超级块信息及APFS容器描述块信息、APFS位图管理器块地址、APFS宗卷索引块地址、APFS宗卷ID,其中,所述APFS主超级块MSB用以描述APFS磁盘描述信息;所述标记“NXSB”用以判断所述磁盘数据是否为APFS文件系统格式数据;所述APFS容器写时复制COW的ID用以确定APFS容器中更新数据的先后顺序;所述APFS容器超级块信息及APFS容器描述块信息用以确定APFS容器在不同写时复制COW的ID时,APFS容器中数据存储的状态;所述APFS位图管理器用以存储APFS容器所有块的分配使用情况;所述APFS宗卷索引块用以寻址APFS容器中所有宗卷描述信息块;所述APFS宗卷ID用以描述APFS容器当前包含的所有APFS宗卷ID;
S200:检测所述磁盘数据并判断所述磁盘数据是否为APFS文件系统格式的数据,如果是,执行步骤S300,否则执行步骤S100;
S300:获取APFS容器的各个检查点超级块CSB:查找APFS容器的检查点超级块CSB的标记,并获取各个检查点超级块CBS的起始地址,以各个检查点超级块CBS的起始地址向后偏移0x08字节并读取连续8字节的内容作为对应的写时复制的ID,将各个对应的写时复制的ID按升序或降序排序;
S400:解析APFS容器检查点超级块CSB数据:根据所述步骤S300中所获取的各个检查点超级块CSB,解析各个APFS容器检查点超级块CSB包含的数据内容,包括各个APFS容器检查点超级块CSB中记录的当时的APFS容器宗卷索引块地址,根据宗卷索引块地址寻址宗卷根块,宗卷根块描述了APFS容器内包含的各个APFS宗卷ID及各个APFS宗卷ID对应的宗卷检查点超级块VCSB的地址;
S500:解析宗卷检查点超级块VCSB数据:根据宗卷检查点超级块VCSB的地址寻址宗卷检查点超级块VCSB的地址,读取APFS宗卷ID、宗卷B-树对象映射块地址、宗卷B-树根节点块ID、宗卷B-树节点存储的区间块extentblock;
S600:解析宗卷B-树结构:
根据所述步骤S500所读取的宗卷B-树对象映射块,确定宗卷B-树所有的节点块ID及对应的节点块地址;
根据所述步骤S500所读取的宗卷B-树根节点块ID,确定宗卷B-树所有叶节点块内存储的文件/文件夹对应的节点ID的取值范围及对应的叶节点块ID;
结合节点块ID、节点块地址、节点块存储的文件/文件夹节点ID取值范围,确定宗卷B-树结构中包含的各个文件/文件夹节点描述信息,根据文件/文件夹节点描述信息中的节点ID、父节点ID确定宗卷的文件目录结构;
S700:对比不同的检查点超级块CSB中各个宗卷内包含的文件目录结构,确定被删除数据:写时复制的ID中最大值所对应的APFS容器检查点超级块CSB描述了APFS容器宗卷最新的文件目录结构,将最新的文件目录结构与各个写时复制的ID所对应APFS容器检查点超级块CSB所描述的历史APFS容器宗卷的文件目录结构对比,历史宗卷的文件目录结构中比最新的文件目录结构多的文件/文件夹节点描述信息为被删除数据的描述信息;
S800:判断被删除数据的存储空间是否被分配,如果是,则执行步骤S900,否则执行步骤SA00;
S900:判断被删除数据的被分配块是否被覆盖,如果是,执行步骤S700,否则,执行步骤SB00;
SA00:提取未被分配块内的被删除数据,结束流程;
SB00:提取被分配块中未被覆盖的数据,结束流程。
优选地,所述步骤S200的具体步骤如下:
以所述磁盘的APFS容器0扇区的起始地址为首地址,检测第0x20地址开始的连续4字节内容是否为0x4E585352,如果是,则代表是ASCII码表示的“NXSB”,“NXSB”则表示磁盘数据为APFS文件系统格式的数据,执行步骤S300,否则执行步骤S100。
优选地,所述步骤S300中,各个检查点超级块CSB的标记同样为ASCII码表示的“NXSB”,查找连续4字节内容为0x4E585352以获取APFS容器的各个检查点超级块CSB,并获取各个检查点超级块CBS的起始地址;
写时复制ID越大表示对应的检查点超级块CSB的创建时间越靠后,各个检查点超级块CSB包含各自创建APFS容器超级块检查点时的当时的APFS容器超级块检查点的写时复制的ID取值范围、APFS容器超级块检查点的地址。
优选地,所述步骤S400的具体步骤如下:
S401:读取APFS容器中检查点超级块CSB数据:根据所述步骤S300所获取的各个APFS容器的检查点超级块CSB,
以各个检查点超级块CSB的起始地址为首地址,读取第0x20地址开始的连续4字节内容为0x4E585352,代表ASCII码表示的检查点超级块CSB标记“NXSB”;
以各个检查点超级块CSB的起始地址为首地址,读取第0x08地址开始的连续8字节内容为写时复制的ID,格式为小端存储;
确定各个APFS容器检查点超级块CSB创建的先后顺序,其中,写时复制ID越大表示对应的检查点超级块CSB的创建时间越靠后;
S402:以检查点超级块CSB的起始地址为首地址,读取第0xA0地址开始的连续8字节内容为APFS容器检查点超级块CSB中记录的宗卷索引块地址,格式为小端存储;
寻址宗卷索引块地址,并以宗卷索引块地址的起始地址为首地址,读取第0x30地址开始的连续8字节内容为宗卷根块的地址;
寻址宗卷根块的地址,读取宗卷根块包含的APFS容器的各个宗卷ID及对应的宗卷检查点超级块VCSB的块地址。
优选地,所述步骤S500的具体步骤如下:
S501:判断是否为宗卷检查点超级块VCSB,包括以下步骤:
S5011:根据当前宗卷ID及对应的宗卷检查点超级块VCSB的块地址,寻址宗卷检查点超级块;
S5012:以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x20地址开始的连续4字节内容,并判断所述连续4字节内容是否为0x41505342,如果是,执行步骤S502,否则执行步骤S5013,其中,0x41505342为宗卷检查点超级块VCSB的标记“APSB”的ASCII码表示的十六进制;
S5013:选取下一宗卷ID,执行步骤S5011;
S502:读取当前宗卷检查点超级块VCSB的宗卷描述:以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x02C0地址开始的连续0x30字节内容,所述连续0x30字节内容为当前宗卷名称的ASCII码所表示的十六进制数;
以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x0140地址开始的连续0x30字节内容为当前宗卷名称数据更新状态,包括写时复制的ID、宗卷数据被更新的时间点、执行更新操作的用户信息,其中,写时复制ID为小端格式存储的8字节内容,所述时间点为小端格式存储的8字节的UNIX时间戳,所述用户信息包括总字节长度不超过0x20字节的ASCII码表示的创建者名称及APFS的版本;
S503:读取宗卷检查点超级块VCSB的宗卷B-树描述,包括:
以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x80地址开始的连续0x8字节内容为宗卷B-树对象映射块地址;
以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x88地址开始的连续0x8字节内容为宗卷B-树根节点块的ID;
以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x90地址开始的连续0x8字节内容为宗卷B-树节点区间块extentblock的块地址。
优选地,所述步骤S600的具体步骤如下:
S601:获取宗卷B-树的节点块信息:根据所述步骤S500所读取的宗卷B-树对象映射块地址,寻址宗卷B-树对象映射块,所述宗卷B-树对象映射块记录宗卷B-树的节点块信息,包括宗卷B-树节点块ID及宗卷B-树节点块的块地址;
S602:获取宗卷B-树节点块描述节点信息:根据宗卷B-树根节点块ID及宗卷B-树节点块的块地址,寻址宗卷B-树根节点块;宗卷B-树根节点块记录了宗卷B-树各个叶节点块描述节点ID的取值范围及对应的叶节点块ID,根据叶节点块ID及宗卷B-树的节点块信息,确定宗卷B-树各个叶节点块的块地址;
S603:获取宗卷包含的文件目录结构,包括以下步骤:
S6031:APFS文件系统中宗卷存储空间根目录的节点ID为0x02,根据宗卷各个叶节点块描述的节点ID取值范围,确定节点ID为0x02所在的叶节点块;
S6032:读取叶节点块中的表索引区域,包括各个节点的表关键区域的偏移地址及字节长度、数据区域的偏移地址及字节长度;
S6033:读取表关键区域中各个记录节点的记录节点ID及节点描述记录类型,其中,记录节点ID为小端格式存储,字节长度为7字节,节点描述记录类型的字节长度为1字节;
S6034:判断节点描述记录类型值是否为0x30,如果是,执行步骤S6035,否则执行步骤S6036;
S6035:节点描述记录类型值为0x30,表示数据区域记录当前节点描述对象本身的信息,读取当前节点描述对象本身的信息,包括描述对象名称、父节点ID、时间信息,执行步骤S700;
S6036:节点描述记录类型值为0x90,表示数据区域记录当前记录节点包含子节点信息,读取当前记录节点包含子节点信息,包括子节点ID、子节点描述对象类型,其中,子节点描述对象类型为0x0800表示文件,若为0x0400则表示文件夹,执行步骤S700。
优选地,所述步骤S700的具体步骤如下:
S701:获取APFS容器包含的各个写时复制的ID对应的APFS容器检查点超级块CSB内各个宗卷文件目录结构:根据所述步骤S300至S600,确定各个写时复制的ID对应的APFS容器检查点超级块CSB内各宗卷的文件目录结构,其中,写时复制的ID中最大值所对应的APFS容器检查点超级块CSB描述了APFS容器宗卷最新的文件目录结构;
S702:对比各个写时复制ID下APFS容器宗卷的文件目录结构,确定被删除文件描述信息:将各个写时复制的ID对应的APFS容器检查点超级块CSB所描述的各个历史宗卷文件目录结构与APFS容器宗卷最新的文件目录结构进行对比,各个历史宗卷文件目录结构中比最新的文件目录结构多的文件/文件夹节点描述信息为被删除数据的描述信息;
S703:确定被删除数据类型:根据被删除数据的节点描述信息,确定被删除数据的类型,其中,如果节点描述记录包含的被删除数据类型的值为0x0400,表示被删除数据为文件夹,执行步骤S704,否则,节点描述记录包含的被删除数据类型的值为0x0800,表示被删除数据为文件,执行步骤S705;
S704:获取被删除文件夹下包含的被删除数据描述信息:根据被删除文件夹的节点描述信息,确定被删除文件夹的节点ID,根据节点ID,在相应的宗卷B-树叶节点块中读取相应的节点记录,包括子节点ID、子节点描述对象名称、子节点描述对象类型,根据子节点描述对象类型,再次进行子节点对象类型判断,如果被删除数据类型的值为0x0400,表示被删除数据为文件夹,执行步骤S704,否则,被删除数据类型的值为0x0800,表示被删除数据为文件,执行步骤S705;
S705:获取被删除数据的存储信息:根据被删除数据的节点描述信息,确定被删除数据的存储信息,包括被删除数据字节数、被删除数据存储起始地址,并根据被删除数据字节数、被删除数据存储起始地址获被删除数据在APFS容器中的存储空间。
优选地,所述步骤S800的具体步骤如下:
S801:获取APFS容器最新的位图管理器中块分配情况:写时复制的ID中最大值所对应的APFS容器检查点超级块CSB中获取最新的位图管理器信息,确定APFS容器块最新的分配情况;
S802:判断被删除文数据的存储空间是否被分配:确定被删除数据的存储块在位图管理器中的分配情况,0表示未分配,1表示已分配,如果为未被分配,则执行步骤SA00,否则执行步骤S900。
优选地,所述步骤S900的具体步骤如下:
判断是否存在可恢复的被删除数据的碎片数据:确定被分配块在APFS容器最新的宗卷文件目录结构中的使用情况,确定被删除文数据的存储空间被重新分配后的存储数据情况,计算公式为:块内未被覆盖字节数=被分配块的块号*块字节数-被重新分配后的块实际被使用字节数,如果块内未被覆盖字节数大于0,则表示被分配块未被完全覆盖,执行步骤SB00,如果块内未被覆盖字节数=0,则表示被分配块被完全覆盖,执行步骤S700,继续处理其他被删除数据。
本发明的有益效果是解决了现有技术中尚无一种基于写时复制来恢复APFS中被删除数据的方法的技术问题,且具有以下有益效果:
1.通过APFS文件系统数据块结构中特定的标记判断各个块存储的数据内容,从而快速便捷地确定磁盘描述的各类数据信息;
2.根据APFS文件系统的结构,确定检查点所描述的磁盘数据信息,从而快速便捷地确定磁盘数据的存储情况;。
3.将不同检查点的B-树节点数据结构进行对比,快速便捷分析出磁盘中的正常数据和被删除数据。
附图说明
图1为本发明中B-树块结构的数据结构示意图;
图2为本发明所提供的方法的总流程图;
图3为本发明所提供的方法中解析宗卷检查点超级块VCSB数据的流程图;
图4为本发明所提供的方法中判断是否为宗卷检查点超级块VCSB的流程图;
图5为本发明所提供的方法中解析宗卷B-树结构的流程图;
图6为本发明所提供的方法中获取宗卷包含的文件目录结构的流程图;
图7为本发明所提供的方法中确定删除数据的流程图。
具体实施方式
本发明申请提出针对APFS磁盘数据被删除数据的恢复方法。该方法可以对APFS磁盘中被删除数据在未被新数据覆盖的情况下,对被删除数据进行恢复提取。
基于APFS文件系统APFS容器的存储结构,本发明申请所采用的数据解析思路是:首先,通过APFS文件系统的写时复制COW功能创建的检查点确定APFS容器数据描述信息;其次,通过APFS容器数据描述信息,确定APFS容器中包含的各个宗卷的B-树结构;最后根据宗卷B-树结构中描述的宗卷中各个文件的属性信息以及存储地址信息来确定数据存储地址;从而实现被删除数据的恢复提取,该方法可以快速、有效的对APFS容器宗卷内的数据进行恢复及提取,下面结合附图和实施例对本发明作进一步阐述。
经解析,APFS的B-树块结构的数据结构示意图如图1所示。
图2示出了本发明所提供的方法的总流程图。
如图2所示,本发明的方法包括以下步骤:
S100:加载磁盘数据:加载磁盘并读取磁盘0扇区信息,0扇区信息包括:
具有标记“NXSB”的检查点超级块CSB、APFS容器写时复制COW的ID、APFS容器超级块信息及APFS容器描述块信息、APFS位图管理器块地址、APFS宗卷索引块地址、APFS宗卷ID,其中,APFS主超级块MSB用以描述APFS磁盘描述信息;标记“NXSB”用以判断磁盘数据是否为APFS文件系统格式数据;APFS容器写时复制COW的ID用以确定APFS容器中更新数据的先后顺序;APFS容器超级块信息及APFS容器描述块信息用以确定APFS容器在不同写时复制COW的ID时,APFS容器中数据存储的状态;APFS位图管理器用以存储APFS容器所有块的分配使用情况;APFS宗卷索引块用以寻址APFS容器中所有宗卷描述信息块;APFS宗卷ID用以描述APFS容器当前包含的所有APFS宗卷ID。
S200:检测磁盘数据并判断磁盘数据是否为APFS文件系统格式的数据,如果是,执行步骤S300,否则执行步骤S100。具体地,以磁盘的APFS容器0扇区的起始地址为首地址,检测第0x20地址开始的连续4字节内容是否为0x4E585352,如果是,则代表是ASCII码表示的“NXSB”,“NXSB”则表示磁盘数据为APFS文件系统格式的数据,执行步骤S300,否则执行步骤S100。
S300:获取APFS容器的各个检查点超级块CSB:查找APFS容器的检查点超级块CSB的标记,并获取各个检查点超级块CBS的起始地址,以各个检查点超级块CBS的起始地址向后偏移0x08字节并读取连续8字节的内容作为对应的写时复制的ID,将各个对应的写时复制的ID按升序或降序排序;其中,各个检查点超级块CSB的标记同样为ASCII码表示的“NXSB”,查找连续4字节内容为0x4E585352以获取APFS容器的各个检查点超级块CSB,并获取各个检查点超级块CBS的起始地址;
写时复制的ID越大表示对应的检查点超级块CSB的创建时间越靠后,各个检查点超级块CSB包含各自创建APFS容器超级块检查点时的当时的APFS容器超级块检查点的写时复制的ID取值范围、APFS容器超级块检查点的地址。其中,获取写时复制的ID取值范围的方法如下:
检查点超级块CSB的起始地址为首地址,读取第0x60地址开始的连续8字节内容为下一可用的写时复制的ID;
检查点超级块CSB的起始地址为首地址,读取第0x80地址开始的连续4字节内容再加0x02的和,作为写时复制的ID中最小值,写时复制的ID取值范围为大于或等于写时复制的ID中最小值且小于下一可用的写时复制的ID之间的自然数。
S400:解析APFS容器检查点超级块CSB数据:根据步骤S300中所获取的各个检查点超级块CSB,解析各个APFS容器检查点超级块CSB包含的数据内容,包括各个APFS容器检查点超级块CSB中记录的当时的APFS容器宗卷索引块地址,根据宗卷索引块地址寻址宗卷根块,宗卷根块描述了APFS容器内包含的各个APFS宗卷ID及各个APFS宗卷ID对应的宗卷检查点超级块VCSB的地址;S400的具体步骤如下:
S401:读取APFS容器中检查点超级块CSB数据:根据步骤S300所获取的各个APFS容器的检查点超级块CSB,
以各个检查点超级块CSB的起始地址为首地址,读取第0x20地址开始的连续4字节内容为0x4E585352,代表ASCII码表示的检查点超级块CSB标记“NXSB”;
以各个检查点超级块CSB的起始地址为首地址,读取第0x08地址开始的连续8字节内容为写时复制的ID,格式为小端存储;
确定各个APFS容器检查点超级块CSB创建的先后顺序,其中,写时复制ID越大表示对应的检查点超级块CSB的创建时间越靠后;
S402:以检查点超级块CSB的起始地址为首地址,读取第0xA0地址开始的连续8字节内容为APFS容器检查点超级块CSB中记录的宗卷索引块地址,格式为小端存储;
寻址宗卷索引块地址,并以宗卷索引块地址的起始地址为首地址,读取第0x30地址开始的连续8字节内容为宗卷根块的地址;
寻址宗卷根块的地址,读取宗卷根块包含的APFS容器的各个宗卷ID及对应的宗卷检查点超级块VCSB的块地址。
S500:解析宗卷检查点超级块VCSB数据:根据宗卷检查点超级块VCSB的地址寻址宗卷检查点超级块VCSB的地址,读取APFS宗卷ID、宗卷B-树对象映射块地址、宗卷B-树根节点块ID、宗卷B-树节点存储的区间块extentblock,图3示出了本发明所提供的方法中解析宗卷检查点超级块VCSB数据的流程图,如图3所示,步骤S500的具体步骤如下:
S501:判断是否为宗卷检查点超级块VCSB,包括以下步骤:
图4示出了本发明所提供的方法中判断是否为宗卷检查点超级块VCSB的流程图,如图3所示,步骤S501的具体步骤如下:
S5011:根据当前宗卷ID及对应的宗卷检查点超级块VCSB的块地址,寻址宗卷检查点超级块;
S5012:以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x20地址开始的连续4字节内容,并判断连续4字节内容是否为0x41505342,如果是,执行步骤S502,否则执行步骤S5013,其中,0x41505342为宗卷检查点超级块VCSB的标记“APSB”的ASCII码表示的十六进制;
S5013:选取下一宗卷ID,执行步骤S5011;
S502:读取当前宗卷检查点超级块VCSB的宗卷描述:以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x02C0地址开始的连续0x30字节内容,连续0x30字节内容为当前宗卷名称的ASCII码所表示的十六进制数;
以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x0140地址开始的连续0x30字节内容为当前宗卷名称数据更新状态,包括写时复制的ID、宗卷数据被更新的时间点、执行更新操作的用户信息,其中,写时复制ID为小端格式存储的8字节内容,时间点为小端格式存储的8字节的UNIX时间戳,用户信息包括总字节长度不超过0x20字节的ASCII码表示的创建者名称及APFS的版本;
S503:读取宗卷检查点超级块VCSB的宗卷B-树描述,包括:
以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x80地址开始的连续0x8字节内容为宗卷B-树对象映射块地址;
以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x88地址开始的连续0x8字节内容为宗卷B-树根节点块的ID;
以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x90地址开始的连续0x8字节内容为宗卷B-树节点区间块extentblock的块地址。
S600:解析宗卷B-树结构:
根据步骤S500所读取的宗卷B-树对象映射块,确定宗卷B-树所有的节点块ID及对应的节点块地址;
根据步骤S500所读取的宗卷B-树根节点块ID,确定宗卷B-树所有叶节点块内存储的文件/文件夹对应的节点ID的取值范围及对应的叶节点块ID;
获取节点ID的取值范围的方法如下:
宗卷B-树根节点块的表结构中每一记录对应一个叶节点块描述信息,以宗卷B-树根节点块的起始地址为首地址,读取第0x24地址开始的、以小端格式存储的连续2字节内容为表结构记录总数目N。表结构中每一记录包括表索引区域、表关键区域及表数据区域,以宗卷B-树根节点块的起始地址为首地址,读取第0x38地址开始的连续0x08*N字节内容为表索引区域的地址,每一记录的表索引长度为0x08字节,其中描述了该记录在宗卷B-树根节点块中的表关键区域及表数据区域的各自的偏移地址和字节长度,字节长度均为2字节,例如,该0x08字节的存储顺序为:字节长度为2字节的表关键区域内记录偏移地址+字节长度为2字节的表关键区域内记录字节长度+字节长度为2字节的表数据区域内记录偏移地址+字节长度为2字节的表数据区域内记录字节长度,均以小端格式存储。表关键区域内存储此条记录描述叶节点块内包含节点ID值的起始值,其为小端格式存储的、字节长度为0x08字节;表数据区域内存储此条记录描述叶节点块的ID值,其为小端格式存储的、字节长度为0x08字节;而关于该叶节点块内包含节点ID值的结束值为下一条叶节点块内包含节点ID值的起始值-1,由此可确定一个叶节点块内描述节点ID值的范围为大于或等于叶节点块内包含节点ID值的起始值,且小于或等于下一条叶节点块内包含节点ID值的起始值-1。
结合节点块ID、节点块地址、节点块存储的文件/文件夹节点ID取值范围,确定宗卷B-树结构中包含的各个文件/文件夹节点描述信息,根据文件/文件夹节点描述信息中的节点ID、父节点ID确定宗卷的文件目录结构,图5示出了本发明所提供的方法中解析宗卷B-树结构的流程图,如图5所示,S600的具体步骤如下:
S601:获取宗卷B-树的节点块信息:根据步骤S500所读取的宗卷B-树对象映射块地址,寻址宗卷B-树对象映射块,宗卷B-树对象映射块记录宗卷B-树的节点块信息,包括宗卷B-树节点块ID及宗卷B-树节点块的块地址;
S602:获取宗卷B-树节点块描述节点信息:根据宗卷B-树根节点块ID及宗卷B-树节点块的块地址,寻址宗卷B-树根节点块;宗卷B-树根节点块记录了宗卷B-树各个叶节点块描述节点ID的取值范围及对应的叶节点块ID,根据叶节点块ID及宗卷B-树的节点块信息,确定宗卷B-树各个叶节点块的块地址;
S603:获取宗卷包含的文件目录结构,图6示出了本发明所提供的方法中获取宗卷包含的文件目录结构的流程图,如图6所示,包括以下步骤:
S6031:APFS文件系统中宗卷存储空间根目录的节点ID为0x02,根据宗卷各个叶节点块描述的节点ID取值范围,确定节点ID为0x02所在的叶节点块;
S6032:读取叶节点块中的表索引区域,包括各个节点的关键区域的偏移地址及字节长度、数据区域的偏移地址及字节长度;
S6033:读取关键区域中各个记录节点的记录节点ID及节点描述记录类型,其中,记录节点ID为小端格式存储,字节长度为7字节,节点描述记录类型的字节长度为1字节;
S6034:判断节点描述记录类型值是否为0x30,如果是,执行步骤S6035,否则执行步骤S6036;
S6035:节点描述记录类型值为0x30,表示数据区域记录当前节点描述对象本身的信息,读取当前节点描述对象本身的信息,包括描述对象名称、父节点ID、时间信息,执行步骤S700;
S6036:节点描述记录类型值为0x90,表示数据区域记录当前记录节点包含子节点信息,读取当前记录节点包含子节点信息,包括子节点ID、子节点描述对象类型,其中,子节点描述对象类型为0x0800表示文件,若为0x0400则表示文件夹,执行步骤S700。
S700:对比不同的检查点超级块CSB中各个宗卷内包含的文件目录结构,确定被删除数据:写时复制的ID中最大值所对应的APFS容器检查点超级块CSB描述了APFS容器宗卷最新的文件目录结构,将最新的文件目录结构与各个写时复制的ID所对应APFS容器检查点超级块CSB所描述的历史APFS容器宗卷的文件目录结构对比,历史宗卷的文件目录结构中比最新的文件目录结构多的文件/文件夹节点描述信息为被删除数据的描述信息,图7示出了本发明所提供的方法中确定删除数据的流程图,如图7所示,步骤S700的具体步骤如下:
S701:获取APFS容器包含的各个写时复制的ID对应的APFS容器检查点超级块CSB内各个宗卷文件目录结构:根据步骤S300至S600,确定各个写时复制的ID对应的APFS容器检查点超级块CSB内各宗卷的文件目录结构,其中,写时复制的ID中最大值所对应的APFS容器检查点超级块CSB描述了APFS容器宗卷最新的文件目录结构;
S702:对比各个写时复制ID下APFS容器宗卷的文件目录结构,确定被删除文件描述信息:将各个写时复制的ID对应的APFS容器检查点超级块CSB所描述的各个历史宗卷文件目录结构与APFS容器宗卷最新的文件目录结构进行对比,各个历史宗卷文件目录结构中比最新的文件目录结构多的文件/文件夹节点描述信息为被删除数据的描述信息;
S703:确定被删除数据类型:根据被删除数据的节点描述信息,确定被删除数据的类型,其中,如果节点描述记录包含的被删除数据类型的值为0x0400,表示被删除数据为文件夹,执行步骤S704,否则,节点描述记录包含的被删除数据类型的值为0x0800,表示被删除数据为文件,执行步骤S705;
S704:获取被删除文件夹下包含的被删除数据描述信息:根据被删除文件夹的节点描述信息,确定被删除文件夹的节点ID,根据节点ID,在相应的宗卷B-树叶节点块中读取相应的节点记录,包括子节点ID、子节点描述对象名称、子节点描述对象类型,根据子节点描述对象类型,再次进行子节点对象类型判断,如果被删除数据类型的值为0x0400,表示被删除数据为文件夹,执行步骤S704,否则,被删除数据类型的值为0x0800,表示被删除数据为文件,执行步骤S705;
S705:获取被删除数据的存储信息:根据被删除数据的节点描述信息,确定被删除数据的存储信息,包括被删除数据字节数、被删除数据存储起始地址,并根据被删除数据字节数、被删除数据存储起始地址获被删除数据在APFS容器中的存储空间。
S800:判断被删除数据的存储空间是否被分配,如果是,则执行步骤S900,否则执行步骤SA00,具体步骤如下:
S801:获取APFS容器最新的位图管理器中块分配情况:写时复制的ID中最大值所对应的APFS容器检查点超级块CSB中获取最新的位图管理器信息,确定APFS容器块最新的分配情况;
S802:判断被删除文数据的存储空间是否被分配:确定被删除数据的存储块在位图管理器中的分配情况,0表示未分配,1表示已分配,如果为未被分配,则执行步骤SA00,否则执行步骤S900。
S900:判断被删除数据的被分配块是否被覆盖,如果是,执行步骤S700,否则,执行步骤SB00,具体步骤如下:
判断是否存在可恢复的被删除数据的碎片数据:确定被分配块在APFS容器最新的宗卷文件目录结构中的使用情况,确定被删除文数据的存储空间被重新分配后的存储数据情况,计算公式为:块内未被覆盖字节数=被分配块的块号*块字节数-被重新分配后的块实际被使用字节数,如果块内未被覆盖字节数大于0,则表示被分配块未被完全覆盖,执行步骤SB00,如果块内未被覆盖字节数=0,则表示被分配块被完全覆盖,执行步骤S700,继续处理其他被删除数据,其中,
获取被分配块的块号的方法如下:
根据步骤S705所获取的被删除数据字节数、被删除数据存储起始地址,计算出被删除数据使用的块号为:被删除数据存储起始地址/块大小至(被删除数据存储起始地址+字节数)/块大小,再在位图管理器中查看这些块是否被重新分配,若被重新分配这些块的块号就称为被分配块的块号。
获取块字节数的方法如下:以APFS容器检查点超级块CSB的起始地址为首地址,读取第0x24地址开始的连续2字节内容为块字节数。
被重新分配后的块实际被使用字节数:通过在位图管理器中查询,可以确定被删除数据中部分块中已被新的数据所占的字节数。可以通过步骤S702的对比文件目录结构,确定被重新分配块存储的新的数据在块内的实际使用字节数情况,关于被重新分配块的实际使用字节数的确定方式,在步骤S702的对比文件目录结构中,可以确定被重新分配块存储的文件节点描述信息,在文件节点描述信息中就存储了文件数据字节数、文件数据存储起始地址。
此外,通过步骤S700中的APFS容器宗卷最新的文件目录结构中的文件节点描述信息中记录的块地址值和使用字节数,计算每个文件的数据存储的块范围:从被删除数据存储起始地址/块大小至(被删除数据存储起始地址+(块大小-被重新分配后的块实际被使用字节数%块大小)+被重新分配后的块实际被使用字节数)/块大小。由此可确定被重新分配的块被哪个文件使用,根据文件使用的字节数,确定被重新分配的块内是否所有字节都被文件内容所覆盖。
SA00:提取未被分配块内的被删除数据,结束流程;
SB00:提取被分配块中未被覆盖的数据,结束流程。
通过本发明提供的方法,解决了现有技术中尚无一种基于写时复制来恢复APFS中被删除数据的方法的技术问题。
应当理解的是,本发明不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。

Claims (8)

1.一种基于写时复制来恢复APFS中被删除数据的方法,其特征在于包括以下步骤:
S100:加载磁盘数据:加载所述磁盘并读取所述磁盘0扇区信息,所述0扇区信息包括:
具有标记“NXSB”的检查点超级块CSB、APFS容器写时复制COW的ID、APFS容器超级块信息及APFS容器描述块信息、APFS位图管理器块地址、APFS宗卷索引块地址、APFS宗卷ID,其中,所述APFS主超级块MSB用以描述APFS磁盘描述信息;所述标记“NXSB”用以判断所述磁盘数据是否为APFS文件系统格式数据;所述APFS容器写时复制COW的ID用以确定APFS容器中更新数据的先后顺序;所述APFS容器超级块信息及APFS容器描述块信息用以确定APFS容器在不同写时复制COW的ID时,APFS容器中数据存储的状态;所述APFS位图管理器用以存储APFS容器所有块的分配使用情况;所述APFS宗卷索引块用以寻址APFS容器中所有宗卷描述信息块;所述APFS宗卷ID用以描述APFS容器当前包含的所有APFS宗卷ID;
S200:检测所述磁盘数据并判断所述磁盘数据是否为APFS文件系统格式的数据,如果是,执行步骤S300,否则执行步骤S100;
S300:获取APFS容器的各个检查点超级块CSB:查找APFS容器的检查点超级块CSB的标记,并获取各个检查点超级块CBS的起始地址,以各个检查点超级块CBS的起始地址向后偏移0x08字节并读取连续8字节的内容作为对应的写时复制的ID,将各个对应的写时复制的ID按升序或降序排序;
S400:解析APFS容器检查点超级块CSB数据:根据所述步骤S300中所获取的各个检查点超级块CSB,解析各个APFS容器检查点超级块CSB包含的数据内容,包括各个APFS容器检查点超级块CSB中记录的当时的APFS容器宗卷索引块地址,根据宗卷索引块地址寻址宗卷根块,宗卷根块描述了APFS容器内包含的各个APFS宗卷ID及各个APFS宗卷ID对应的宗卷检查点超级块VCSB的地址;
S500:解析宗卷检查点超级块VCSB数据:根据宗卷检查点超级块VCSB的地址寻址宗卷检查点超级块VCSB的地址,读取APFS宗卷ID、宗卷B-树对象映射块地址、宗卷B-树根节点块ID、宗卷B-树节点存储的区间块extentblock,步骤S500的具体步骤如下:
S501:判断是否为宗卷检查点超级块VCSB,包括以下步骤:
S5011:根据当前宗卷ID及对应的宗卷检查点超级块VCSB的块地址,寻址宗卷检查点超级块;
S5012:以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x20地址开始的连续4字节内容,并判断所述连续4字节内容是否为0x41505342,如果是,执行步骤S502,否则执行步骤S5013,其中,0x41505342为宗卷检查点超级块VCSB的标记“APSB”的ASCII码表示的十六进制;
S5013:选取下一宗卷ID,执行步骤S5011;
S502:读取当前宗卷检查点超级块VCSB的宗卷描述:以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x02C0地址开始的连续0x30字节内容,所述连续0x30字节内容为当前宗卷名称的ASCII码所表示的十六进制数;
以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x0140地址开始的连续0x30字节内容为当前宗卷名称数据更新状态,包括写时复制的ID、宗卷数据被更新的时间点、执行更新操作的用户信息,其中,写时复制ID为小端格式存储的8字节内容,所述时间点为小端格式存储的8字节的UNIX时间戳,所述用户信息包括总字节长度不超过0x20字节的ASCII码表示的创建者名称及APFS的版本;
S503:读取宗卷检查点超级块VCSB的宗卷B-树描述,包括:
以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x80地址开始的连续0x8字节内容为宗卷B-树对象映射块地址;
以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x88地址开始的连续0x8字节内容为宗卷B-树根节点块的ID;
以当前宗卷检查点超级块VCSB的起始地址为首地址,读取第0x90地址开始的连续0x8字节内容为宗卷B-树节点区间块extentblock的块地址;
S600:解析宗卷B-树结构:
根据所述步骤S500所读取的宗卷B-树对象映射块,确定宗卷B-树所有的节点块ID及对应的节点块地址;
根据所述步骤S500所读取的宗卷B-树根节点块ID,确定宗卷B-树所有叶节点块内存储的文件/文件夹对应的节点ID的取值范围及对应的叶节点块ID;
结合节点块ID、节点块地址、节点块存储的文件/文件夹节点ID取值范围,确定宗卷B-树结构中包含的各个文件/文件夹节点描述信息,根据文件/文件夹节点描述信息中的节点ID、父节点ID确定宗卷的文件目录结构;
S700:对比不同的检查点超级块CSB中各个宗卷内包含的文件目录结构,确定被删除数据:写时复制的ID中最大值所对应的APFS容器检查点超级块CSB描述了APFS容器宗卷最新的文件目录结构,将最新的文件目录结构与各个写时复制的ID所对应APFS容器检查点超级块CSB所描述的历史APFS容器宗卷的文件目录结构对比,历史宗卷的文件目录结构中比最新的文件目录结构多的文件/文件夹节点描述信息为被删除数据的描述信息;
S800:判断被删除数据的存储空间是否被分配:如果是,则执行步骤S900,否则执行步骤SA00;
S900:判断被删除数据的被分配块是否被覆盖,如果是,执行步骤S700,否则,执行步骤SB00;
SA00:提取未被分配块内的被删除数据,结束流程;
SB00:提取被分配块中未被覆盖的数据,结束流程。
2.根据权利要求1所述的一种基于写时复制来恢复APFS中被删除数据的方法,其特征在于,所述步骤S200的具体步骤如下:
以所述磁盘的APFS容器0扇区的起始地址为首地址,检测第0x20地址开始的连续4字节内容是否为0x4E585352,如果是,则代表是ASCII码表示的“NXSB”,“NXSB”则表示磁盘数据为APFS文件系统格式的数据,执行步骤S300,否则执行步骤S100。
3.根据权利要求1所述的一种基于写时复制来恢复APFS中被删除数据的方法,其特征在于,所述步骤S300中,各个检查点超级块CSB的标记同样为ASCII码表示的“NXSB”,查找连续4字节内容为0x4E585352以获取APFS容器的各个检查点超级块CSB,并获取各个检查点超级块CBS的起始地址;
写时复制ID越大表示对应的检查点超级块CSB的创建时间越靠后,各个检查点超级块CSB包含各自创建APFS容器超级块检查点时的当时的APFS容器超级块检查点的写时复制的ID取值范围、APFS容器超级块检查点的地址。
4.根据权利要求1所述的一种基于写时复制来恢复APFS中被删除数据的方法,其特征在于,所述步骤S400的具体步骤如下:
S401:读取APFS容器中检查点超级块CSB数据:根据所述步骤S300所获取的各个APFS容器的检查点超级块CSB,
以各个检查点超级块CSB的起始地址为首地址,读取第0x20地址开始的连续4字节内容为0x4E585352,代表ASCII码表示的检查点超级块CSB标记“NXSB”;
以各个检查点超级块CSB的起始地址为首地址,读取第0x08地址开始的连续8字节内容为写时复制的ID,格式为小端存储;
确定各个APFS容器检查点超级块CSB创建的先后顺序,其中,写时复制ID越大表示对应的检查点超级块CSB的创建时间越靠后;
S402:以检查点超级块CSB的起始地址为首地址,读取第0xA0地址开始的连续8字节内容为APFS容器检查点超级块CSB中记录的宗卷索引块地址,格式为小端存储;
寻址宗卷索引块地址,并以宗卷索引块地址的起始地址为首地址,读取第0x30地址开始的连续8字节内容为宗卷根块的地址;
寻址宗卷根块的地址,读取宗卷根块包含的APFS容器的各个宗卷ID及对应的宗卷检查点超级块VCSB的块地址。
5.根据权利要求1所述的一种基于写时复制来恢复APFS中被删除数据的方法,其特征在于,所述步骤S600的具体步骤如下:
S601:获取宗卷B-树的节点块信息:根据所述步骤S500所读取的宗卷B-树对象映射块地址,寻址宗卷B-树对象映射块,所述宗卷B-树对象映射块记录宗卷B-树的节点块信息,包括宗卷B-树节点块ID及宗卷B-树节点块的块地址;
S602:获取宗卷B-树节点块描述节点信息:根据宗卷B-树根节点块ID及宗卷B-树节点块的块地址,寻址宗卷B-树根节点块;宗卷B-树根节点块记录了宗卷B-树各个叶节点块描述节点ID的取值范围及对应的叶节点块ID,根据叶节点块ID及宗卷B-树的节点块信息,确定宗卷B-树各个叶节点块的块地址;
S603:获取宗卷包含的文件目录结构,包括以下步骤:
S6031:APFS文件系统中宗卷存储空间根目录的节点ID为0x02,根据宗卷各个叶节点块描述的节点ID取值范围,确定节点ID为0x02所在的叶节点块;
S6032:读取叶节点块中的表索引区域,包括各个节点的表关键区域的偏移地址及字节长度、数据区域的偏移地址及字节长度;
S6033:读取表关键区域中各个记录节点的记录节点ID及节点描述记录类型,其中,记录节点ID为小端格式存储,字节长度为7字节,节点描述记录类型的字节长度为1字节;
S6034:判断节点描述记录类型值是否为0x30,如果是,执行步骤S6035,否则执行步骤S6036;
S6035:节点描述记录类型值为0x30,表示数据区域记录当前节点描述对象本身的信息,读取当前节点描述对象本身的信息,包括描述对象名称、父节点ID、时间信息,执行步骤S700;
S6036:节点描述记录类型值为0x90,表示数据区域记录当前记录节点包含子节点信息,读取当前记录节点包含子节点信息,包括子节点ID、子节点描述对象类型,其中,子节点描述对象类型为0x0800表示文件,若为0x0400则表示文件夹,执行步骤S700。
6.根据权利要求1所述的一种基于写时复制来恢复APFS中被删除数据的方法,其特征在于,所述步骤S700的具体步骤如下:
S701:获取APFS容器包含的各个写时复制的ID对应的APFS容器检查点超级块CSB内各个宗卷文件目录结构:根据所述步骤S300至S600,确定各个写时复制的ID对应的APFS容器检查点超级块CSB内各宗卷的文件目录结构,其中,写时复制的ID中最大值所对应的APFS容器检查点超级块CSB描述了APFS容器宗卷最新的文件目录结构;
S702:对比各个写时复制ID下APFS容器宗卷的文件目录结构,确定被删除文件描述信息:将各个写时复制的ID对应的APFS容器检查点超级块CSB所描述的各个历史宗卷文件目录结构与APFS容器宗卷最新的文件目录结构进行对比,各个历史宗卷文件目录结构中比最新的文件目录结构多的文件/文件夹节点描述信息为被删除数据的描述信息;
S703:确定被删除数据类型:根据被删除数据的节点描述信息,确定被删除数据的类型,其中,如果节点描述记录包含的被删除数据类型的值为0x0400,表示被删除数据为文件夹,执行步骤S704,否则,节点描述记录包含的被删除数据类型的值为0x0800,表示被删除数据为文件,执行步骤S705;
S704:获取被删除文件夹下包含的被删除数据描述信息:根据被删除文件夹的节点描述信息,确定被删除文件夹的节点ID,根据节点ID,在相应的宗卷B-树叶节点块中读取相应的节点记录,包括子节点ID、子节点描述对象名称、子节点描述对象类型,根据子节点描述对象类型,再次进行子节点对象类型判断,如果被删除数据类型的值为0x0400,表示被删除数据为文件夹,执行步骤S704,否则,被删除数据类型的值为0x0800,表示被删除数据为文件,执行步骤S705;
S705:获取被删除数据的存储信息:根据被删除数据的节点描述信息,确定被删除数据的存储信息,包括被删除数据字节数、被删除数据存储起始地址,并根据被删除数据字节数、被删除数据存储起始地址获被删除数据在APFS容器中的存储空间。
7.根据权利要求1所述的一种基于写时复制来恢复APFS中被删除数据的方法,其特征在于,所述步骤S800的具体步骤如下:
S801:获取APFS容器最新的位图管理器中块分配情况:写时复制的ID中最大值所对应的APFS容器检查点超级块CSB中获取最新的位图管理器信息,确定APFS容器块最新的分配情况;
S802:判断被删除文数据的存储空间是否被分配:确定被删除数据的存储块在位图管理器中的分配情况,0表示未分配,1表示已分配,如果为未被分配,则执行步骤SA00,否则执行步骤S900。
8.根据权利要求1所述的一种基于写时复制来恢复APFS中被删除数据的方法,其特征在于,所述步骤S900的具体步骤如下:
判断是否存在可恢复的被删除数据的碎片数据:确定被分配块在APFS容器最新的宗卷文件目录结构中的使用情况,确定被删除文数据的存储空间被重新分配后的存储数据情况,计算公式为:块内未被覆盖字节数=被分配块的块号*块字节数-被重新分配后的块实际被使用字节数,如果块内未被覆盖字节数大于0,则表示被分配块未被完全覆盖,执行步骤SB00,如果块内未被覆盖字节数=0,则表示被分配块被完全覆盖,执行步骤S700,继续处理其他被删除数据。
CN201910596825.7A 2019-07-02 2019-07-02 一种基于写时复制来恢复apfs中被删除数据的方法 Active CN110297781B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201910596825.7A CN110297781B (zh) 2019-07-02 2019-07-02 一种基于写时复制来恢复apfs中被删除数据的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201910596825.7A CN110297781B (zh) 2019-07-02 2019-07-02 一种基于写时复制来恢复apfs中被删除数据的方法

Publications (2)

Publication Number Publication Date
CN110297781A CN110297781A (zh) 2019-10-01
CN110297781B true CN110297781B (zh) 2023-05-02

Family

ID=68030168

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201910596825.7A Active CN110297781B (zh) 2019-07-02 2019-07-02 一种基于写时复制来恢复apfs中被删除数据的方法

Country Status (1)

Country Link
CN (1) CN110297781B (zh)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111400101B (zh) * 2020-03-18 2021-06-01 北京北亚宸星科技有限公司 一种jfs2文件系统数据删除时的数据恢复方法及系统
CN111737057B (zh) * 2020-06-24 2024-09-17 深圳软牛科技集团股份有限公司 一种apfs文件系统数据恢复方法、装置及电子设备
CN112257122B (zh) * 2020-10-22 2024-06-28 深圳软牛科技有限公司 基于t2芯片的数据处理方法、装置、设备及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104978241A (zh) * 2015-05-29 2015-10-14 上海爱数软件有限公司 一种cow类型文件系统的数据恢复方法及装置
CN105868396A (zh) * 2016-04-19 2016-08-17 上海交通大学 内存文件系统的多版本控制方法
CN106021031A (zh) * 2016-05-30 2016-10-12 厦门市美亚柏科信息股份有限公司 一种btrfs文件系统的删除数据恢复方法和装置
CN106155845A (zh) * 2016-08-02 2016-11-23 四川效率源信息安全技术股份有限公司 一种基于xfs文件系统数据的重组恢复方法
KR101731606B1 (ko) * 2016-01-12 2017-04-28 (주) 글루시스 디지털 포렌식 기술을 이용한 cow 기반 파일 시스템의 데이터 복구 방법
CN108108394A (zh) * 2017-11-28 2018-06-01 厦门市美亚柏科信息股份有限公司 Apfs文件系统的压缩文件恢复方法及存储介质
WO2019035760A1 (en) * 2017-08-17 2019-02-21 Nanyang Technological University VIRTUAL ENERGY SYSTEM INERTIA APPARATUS, AND METHODS OF OPERATION THEREOF

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11263252B2 (en) * 2017-06-20 2022-03-01 Vmware, Inc. Supporting file system clones in any ordered key-value store using inode back pointers

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104978241A (zh) * 2015-05-29 2015-10-14 上海爱数软件有限公司 一种cow类型文件系统的数据恢复方法及装置
KR101731606B1 (ko) * 2016-01-12 2017-04-28 (주) 글루시스 디지털 포렌식 기술을 이용한 cow 기반 파일 시스템의 데이터 복구 방법
CN105868396A (zh) * 2016-04-19 2016-08-17 上海交通大学 内存文件系统的多版本控制方法
CN106021031A (zh) * 2016-05-30 2016-10-12 厦门市美亚柏科信息股份有限公司 一种btrfs文件系统的删除数据恢复方法和装置
CN106155845A (zh) * 2016-08-02 2016-11-23 四川效率源信息安全技术股份有限公司 一种基于xfs文件系统数据的重组恢复方法
WO2019035760A1 (en) * 2017-08-17 2019-02-21 Nanyang Technological University VIRTUAL ENERGY SYSTEM INERTIA APPARATUS, AND METHODS OF OPERATION THEREOF
CN108108394A (zh) * 2017-11-28 2018-06-01 厦门市美亚柏科信息股份有限公司 Apfs文件系统的压缩文件恢复方法及存储介质

Non-Patent Citations (3)

* Cited by examiner, † Cited by third party
Title
A Phase of Deleted File Recovery for Digital Forensics Research in Tizen;Soowoong Eo 等;《2015 5th International Conference on IT Convergence and Security》;20151008;全文 *
HFS+文件系统的解析与数据恢复;王玉敬等;《计算机安全》;20130915(第09期);全文 *
灾难数据恢复系统的研究与设计;许超明;《中国优秀硕士学位论文全文数据库信息科技辑》;20100715;全文 *

Also Published As

Publication number Publication date
CN110297781A (zh) 2019-10-01

Similar Documents

Publication Publication Date Title
US7934064B1 (en) System and method for consolidation of backups
JP3178475B2 (ja) データ処理装置
EP0994425B1 (en) System and method for generating file updates for files stored on read-only media
CN110297781B (zh) 一种基于写时复制来恢复apfs中被删除数据的方法
CN111581163B (zh) 基于ntfs文件系统的数据无痕删除方法及系统
JP2005302038A (ja) Bツリー中の連続キーの名前を変更する方法およびシステム
US20010051954A1 (en) Data updating apparatus that performs quick restoration processing
CN110309019B (zh) 一种快速恢复并提取apfs中删除文件的方法
JP2007188501A (ja) ファイルシステムと互換性を維持するシンボリックリンクを生成する方法、前記シンボリックリンクを用いてファイル/ディレクトリにアクセスする方法および装置
WO2020103493A1 (zh) 基于fat32文件系统的删除文件恢复方法及系统
US6675257B1 (en) System and method for managing storage space on a sequential storage media
CN102289526B (zh) 一种hfs+文件系统数据恢复方法及装置
US10496612B2 (en) Method for reliable and efficient filesystem metadata conversion
CN111104377A (zh) 文件管理的方法、电子设备和计算机可读存储介质
CN106709014B (zh) 一种文件系统转换方法及装置
JPWO2007026484A1 (ja) 情報処理システム、情報処理方法、実行バイナリイメージ作成装置、実行バイナリイメージ作成方法、実行バイナリイメージ作成プログラム、実行バイナリイメージ作成プログラムを記録したコンピュータ読み取り可能な記録媒体、実行バイナリイメージ実行装置、実行バイナリイメージ実行方法、実行バイナリイメージ実行プログラム及び実行バイナリイメージ実行プログラムを記録したコンピュータ読み取り可能な記録媒体
US7689634B2 (en) Flexible approach to store attribute information (META-DATA) related to files of a file system
KR20110023580A (ko) 데이터를 복구하기 위한 방법 및 시스템
CN108021472A (zh) ReFS文件系统的格式化恢复方法及存储介质
CN112650718A (zh) 一种基于写时复制的btrfs文件系统数据的解析及提取方法
CN112380174A (zh) 含删除文件的xfs文件系统解析方法、终端设备及存储介质
CN105243090A (zh) 一种独占文件的获取方法和系统
CN111831224B (zh) 一种擦除exFAT分区文件剩余空间的方法,系统及设备
CN113282573B (zh) 基于iam页的数据库恢复的方法、系统及存储介质
CN114579525B (zh) 面向ext4文件系统的数据无痕删除方法及系统

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
GR01 Patent grant
GR01 Patent grant