CN112650718A - 一种基于写时复制的btrfs文件系统数据的解析及提取方法 - Google Patents
一种基于写时复制的btrfs文件系统数据的解析及提取方法 Download PDFInfo
- Publication number
- CN112650718A CN112650718A CN202011603205.0A CN202011603205A CN112650718A CN 112650718 A CN112650718 A CN 112650718A CN 202011603205 A CN202011603205 A CN 202011603205A CN 112650718 A CN112650718 A CN 112650718A
- Authority
- CN
- China
- Prior art keywords
- data
- address
- disk
- tree
- file
- 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 32
- 238000013507 mapping Methods 0.000 claims abstract description 29
- 238000005192 partition Methods 0.000 claims description 62
- 238000004364 calculation method Methods 0.000 claims description 15
- 238000012217 deletion Methods 0.000 claims 1
- 230000037430 deletion Effects 0.000 claims 1
- 238000013500 data storage Methods 0.000 description 2
- 238000007726 management method Methods 0.000 description 2
- 238000012986 modification Methods 0.000 description 2
- 230000004048 modification Effects 0.000 description 2
- 238000004458 analytical method Methods 0.000 description 1
- 230000009286 beneficial effect Effects 0.000 description 1
- 230000007547 defect Effects 0.000 description 1
- 239000000284 extract Substances 0.000 description 1
- 238000000605 extraction Methods 0.000 description 1
- 238000011084 recovery Methods 0.000 description 1
- 238000000547 structure data Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/17—Details of further file system functions
- G06F16/1727—Details of free space management performed by the file system
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F11/00—Error detection; Error correction; Monitoring
- G06F11/07—Responding to the occurrence of a fault, e.g. fault tolerance
- G06F11/14—Error detection or correction of the data by redundancy in operation
- G06F11/1402—Saving, restoring, recovering or retrying
- G06F11/1415—Saving, restoring, recovering or retrying at system level
- G06F11/1435—Saving, restoring, recovering or retrying at system level using file system or storage system metadata
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/16—File or folder operations, e.g. details of user interfaces specifically adapted to file systems
- G06F16/162—Delete operations
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/10—File systems; File servers
- G06F16/18—File system types
- G06F16/182—Distributed file systems
- G06F16/184—Distributed file systems implemented as replicated file system
- G06F16/1844—Management specifically adapted to replicated file systems
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Library & Information Science (AREA)
- Quality & Reliability (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种基于写时复制的BTRFS文件系统数据的解析及提取方法,其特征在于包括以下步骤S100:判断磁盘的数据是否为BTRFS文件系统的数据,如果是,执行步骤S200,否则执行步骤S100;S200:解析磁盘中BTRFS文件系统的主超级块;S300:解析并获取磁盘的逻辑地址与物理地址的映射关系;S400:判断当前数据是否为删除数据,如果是,执行步骤S600,否则,执行步骤S500;S500:解析磁盘的最新写时复制ID值所对应的各个B‑Tree节点块内容,获取磁盘的正常数据的信息,执行步骤S700;S600:解析磁盘中历史写时复制ID值所对应的各个B‑Tree节点块内容,恢复并提取磁盘的删除数据的信息;S700:确定正常数据或所恢复并提取的删除数据在磁盘中的目录结构及数据的内容。
Description
技术领域
本发明属于电子取证及数据恢复领域,涉及一种文件系统数据的解析及提取方法,尤其涉及一种基于写时复制的BTRFS文件系统数据的解析及提取方法。
背景技术
BTRFS文件系统作为一种运用于Linux操作系统环境下的一种文件系统,为了能够让其脱离Linux环境的束缚,需要对于BTRFS文件系统的数据存储结构进行分析,使其能够不依赖于Linux操作系统环境,并可以快速对BTRFS文件系统磁盘数据进行解析、提取,以便可以快速获取BTRFS文件系统磁盘包含的所有文件数据。
根据BTRFS文件系统特定的数据存储结构,可以快速找到磁盘数据中保存的文件数据,以及通过BTRFS文件系统采用的写时复制的数据记录更新方式对磁盘数据进行解析提取,也可以对磁盘中删除的文件数据进行恢复提取。
在BTRFS文件系统中使用B-Tree结构来存储磁盘数据,其中有几种BTRFS文件系统固定的B-Tree结构用于存储磁盘文件数据的管理信息,通过这些B-Tree结构数据可以快速获取到磁盘中各种信息,其中包括文件管理信息、文件数据信息等。同时,通过这种B-Tree关系不仅可以获取到磁盘中所有的文件数据,还可以获取到磁盘中文件的层级目录关系。
现有技术中,对于BTRFS文件系统,尚无一种可以脱离Linux操作系统环境的、基于写时复制的BTRFS文件系统数据的解析及提取方法。
发明内容
针对现有技术的不足,本发明提供了一种基于写时复制的BTRFS文件系统数据的解析及提取方法,通过对BRTFS文件系统磁盘数据进行解析,对磁盘中的BTFS文件系统数据包含的正常数据及删除数据的进行解析、提取、恢复。实现了基于写时复制的BTRFS文件系统数据的解析及提取。本发明申请包括以下步骤:
S100:加载磁盘并判断磁盘的数据是否为BTRFS文件系统的数据,如果是,执行步骤S200,否则执行步骤S100;其中,判断的方法为:寻址并获取物理地址0x10000处的主超级块,判断主超级块中magic值是否为BTRFS文件系统数据的标识;
S200:解析磁盘中BTRFS文件系统的主超级块;
S300:解析并获取磁盘的逻辑地址与物理地址的映射关系;
S400:判断当前数据是否为删除数据,如果是,执行步骤S600,否则,当前数据为正常数据,执行步骤S500;
S500:解析磁盘的最新写时复制ID值所对应的各个B-Tree节点块内容,获取磁盘的正常数据的信息,执行步骤S700;
S600:解析磁盘中历史写时复制ID值所对应的各个B-Tree节点块内容,恢复并提取磁盘的删除数据的信息;
S700:根据所获取的正常数据的信息或所恢复并提取的删除数据的信息,确定正常数据或所恢复并提取的删除数据在磁盘中的目录结构及数据的内容。
优选地,所述步骤S100包括以下步骤:
S101:加载磁盘并获取磁盘起始地址向后偏移0x10000字节的扇区数据,扇区数据的字节长度为0x1000,所获取的扇区数据为主超级块;
S102:判断主超级块中magic值是否为BTRFS文件系统数据的标识,包括以下步骤:
S1021:获取如表1所示的BTRFS文件系统主超级块的扇区数据结构:
表1:BTRFS文件系统主超级块的扇区数据结构
S1022:主超级块的起始地址向后偏移0x40字节,获取连续8字节的内容为magic值,判断magic值是否为ASCII码表示的字符“_BHRfS_M”,如果是,执行步骤S1023,否则,退出流程;
S1023:主超级块的起始地址向后偏移0x30字节,获取连续8字节的内容中的低字节序的内容,作为主超级块的逻辑地址,并判断是否与主超级块在磁盘中物理地址0x10000相等,如果是,执行步骤S1024,否则,退出流程;
S1024:主超级块的起始地址向后偏移0x32B字节,获取连续n字节的内容为组块条目阵列,用以描述逻辑地址到物理地址的映射方式,其中,n的值等于主超级块的起始地址向后偏移0xA0字节并获取连续4字节的低字节序的内容,执行步骤S200。
优选地,所述步骤S200包括以下步骤:
根据主超级块所包含的磁盘数据描述信息,解析如表1所示的BTRFS文件系统主超级块的扇区数据结构,包括最新写时复制ID值、根树、数据块树、磁盘字节数使用情况、磁盘名称、逻辑地址和物理地址的映射关系、历史写时复制ID值对应的各个B-Tree节点块逻辑地址,其中,
当前最新的写时复制ID值:储存于主超级块的起始地址向后偏移0x48的连续8字节的低字节序的内容;
根树逻辑地址:储存于主超级块的起始地址向后偏移0x60的连续8字节低字节序的内容;
数据块根树逻辑地址:储存于主超级块的起始地址向后偏移0x68的连续8字节低字节序的内容;
逻辑地址和物理地址的映射关系:储存于主超级块的起始地址向后偏移0x32B的n字节中n的值等于主超级块的起始地址向后偏移0xA0字节并获取连续4字节低字节序的内容;
历史写时复制ID值对应的各个B-Tree节点块逻辑地址:储存于主超级块的起始地址向后偏移0xB2B的连续0x4d5字节的内容。
优选地,所述步骤S300中,磁盘所有B-Tree节点块描述的地址均为逻辑地址,根据主超级块的组块数组中描述的物理地址和逻辑地址的映射关系,确定磁盘中所有B-Tree节点块中描述的逻辑地址转换为物理地址的计算方式,包括以下步骤:
S301:确定主超级块的组块数组中描述的逻辑地址和物理地址的映射关系;
S302:根据主超级块中的数据块根树的逻辑地址,计算出BTRFS分区的数据块根树的物理地址,计算方法如步骤S301所述;
S303:解析数据块的根树节点的信息,根据所获取的逻辑地址及下述表2中逻辑地址、物理地址计算方式及数块字节数的对应关系,计算并获取BTRFS磁盘分区所有的逻辑地址到物理地址的映射关系。
表2:逻辑地址、物理地址计算方式及数块字节数的对应关系
优选地,所述步骤S500中,根据主超级块中的根树的逻辑地址,确定磁盘中逻辑地址对应的根树节点块的物理地址,并进行解析节点块的信息,获取根树中EXTENT树、DEV树、文件系统树、根树目录节点、校验和树以及磁盘的目录节点树,根据B-Tree节点块的信息,确定磁盘中包含的正常文件的目录结构、属性描述信息及数据,包括以下步骤:
S501:根据BTRFS分区的主超级块中根树的逻辑地址及所述表2中逻辑地址、物理地址计算方式及数块字节数的对应关系,计算并获取各个B-Tree节点在磁盘分区中的物理地址,其中,各个节点当前写时复制ID值的根树下包含的各个B-Tree节点描述信息如下表3所示:
表3:各个节点的描述信息
S502:解析文件系统树节点的信息,获取BTRFS磁盘分区的文件描述信息:根据步骤S501所获取的文件系统树在磁盘分区中的物理地址,解析文件系统树节点的信息,节点的记录类型如下表4所示:
表4:节点的记录类型
根据表4所述的节点的记录类型,遍历文件系统树节点的信息,获取到BTRFS分区中所有文件描述信息;
S503:解析EXTENT树节点的信息,获取BTRFS分区中所有文件的数据:步骤S502中所获取的BTRFS分区文件描述信息中,获取文件的逻辑地址,根据逻辑地址在EXTENT树节点中查找逻辑地址对应的记录项,其中,描述逻辑地址指向对象的文件类型、对象在BTRFS磁盘分区中占用的字节数、对象实际的字节数、对象的父ID以及对象被写入磁盘时的写时复制ID;
S504:结合文件系统树获取到的文件描述信息及EXTENT树的文件数据,确定文件在BTRFS磁盘分区中的目录结构及数据:根据文件的父ID,确定文件在磁盘分区中的目录结构;根据文件存储逻辑地址确定数据,用以获取BTRFS分区中所有的文件目录结构。
优选地,所述步骤S600中,解析当前磁盘中历史写时复制ID值对应的各个B-Tree节点块,恢复磁盘中删除文件数据信息:根据主超级块中描述的历史写时复制ID值所对应的各个B-Tree节点块的逻辑地址,结合步骤S300中所确定的逻辑地址与物理地址的映射关系,获取历史写时复制ID值对应的B-Tree节点块的数据,恢复并提取磁盘中的删除数据,包括以下步骤:
S601:根据主超级块的历史写时复制ID所对应的各个B-Tree节点的逻辑地址,确定磁盘数据更新时所记录的B-Tree节点的历史状态内容:获取主超级块起始偏移位置0xB2B的0x4D5字节长度的内容,作为历史写时复制ID所对应的B-Tree节点信息,其中,第一个0xA8字节长度的内容为当前最新写时复制ID状态下的B-Tree节点信息,紧跟在第一个0xA8字节的B-Tree节点信息之后的第二个0xA8字节的B-Tree节点信息为当前磁盘分区更新前的分区文件数据的状态;
通过逻辑地址到物理地址的映射关系,确定B-Tree节点信息如下述表5所示:
表5:B-Tree节点信息
其中,通过确定物理地址并进入B-Tree节点后,读取节点起始位置0x58的8字节的低字节序的内容,作为节点类型值;
S602:采用步骤S502的方法,获取历史写时复制ID的文件系统树,解析文件系统树节点中文件描述信息;
S603:对比历史写时复制ID所对应的文件系统树与最新写时复制ID所对应文件系统树所包含的文件描述信息,历史写时复制ID所对应的文件系统树中多的记录项内容,为删除的文件或目录描述信息,记录删除的文件或目录描述信息;
S604:解析历史写时复制ID的EXTENT树,查找删除文件的数据:通过S603所确定的删除文件描述信息的逻辑地址,在EXTENT树节点中找到逻辑地址所对应的记录项内容,包括描述逻辑地址指向对象在BTRFS分区中占用的字节数、对象的实际直接树、对象的父ID、写入对象到磁盘分区的写时复制ID;
S605:根据找到的删除文件描述信息,提取磁盘分区中删除的数据。
优选地,所述步骤S700包括:
S701:从磁盘分区中解析所恢复的文件描述信息中的父ID、子ID及父ID/子ID指向对象的名称、类型,确定文件在BTRFS分区中目录层级结构;
S702:对于解析并提取的正常文件/删除文件,分别设置标记以区分正常文件/删除文件。
优选地,所述步骤S301包括以下步骤:
S3011:获取逻辑地址:组块数组起始地址向后偏移0x09,获取连续8字节内容的低字节序作为逻辑地址;
S3012:获取物理地址区间:组块数组起始地址向后偏移0x3D,获取连续4字节内容的低字节序为2时,逻辑地址对应为物理地址区间,且组块数组的字节长度为0x81;
S3013:获取物理地址区间起始值:组块数组起始地址向后偏移0x49,获取连续8字节内容的低字节序作为物理地址区间起始值;
S3014:获取物理地址区间结束值:组块数组起始地址向后偏移0x69,获取连续8字节内容的低字节序作为物理地址区间结束值;
S3015:获取物理地址:组块数组起始地址向后偏移0x3D,获取连续4字节内容的低字节序为1时,逻辑地址对应为物理地址,且组块数组的字节长度为0x61,块数组起始地址向后偏移0x49获取连续8字节内容的低字节序作为物理地址;
S3016:当逻辑地址在物理地址区间范围内时,实际物理地址=物理地址区间的起始地址+(实际逻辑地址-逻辑地址),其中,所述实际逻辑地址为从磁盘中所获取的、待计算出对应的物理地址的逻辑地址;S3017:当逻辑地址不在物理地址区间范围内时,实际物理地址=物理地址+(实际逻辑地址-逻辑地址)。
本发明的有益效果是:尚无一种可以脱离Linux操作系统环境的、基于写时复制的BTRFS文件系统数据的解析及提取方法的技术问题。
附图说明
图1为本发明所提供的方法的总流程图。
具体实施方式
图1示出了本发明所提供的方法的总流程图。如图1所示,包括以下步骤:
S100:加载磁盘并判断磁盘的数据是否为BTRFS文件系统的数据,如果是,执行步骤S200,否则执行步骤S100;其中,判断的方法为:寻址并获取物理地址0x10000处的主超级块,判断主超级块中magic值是否为BTRFS文件系统数据的标识,步骤S100包括以下步骤:
S101:加载磁盘并获取磁盘起始地址向后偏移0x10000字节的扇区数据,扇区数据的字节长度为0x1000,所获取的扇区数据为主超级块;
S102:判断主超级块中magic值是否为BTRFS文件系统数据的标识,包括以下步骤:
S1021:获取如表1所示的BTRFS文件系统主超级块的扇区数据结构:
表1:BTRFS文件系统主超级块的扇区数据结构
S1022:主超级块的起始地址向后偏移0x40字节,获取连续8字节的内容为magic值,判断magic值是否为ASCII码表示的字符“_BHRfS_M”,如果是,执行步骤S1023,否则,退出流程;其中,ASCII码表示的字符“_BHRfS_M”对应的十六进制数字为0x5F 42 48 52 6653 5F 4D 0C。
S1023:主超级块的起始地址向后偏移0x30字节,获取连续8字节的内容中的低字节序的内容,作为主超级块的逻辑地址,并判断是否与主超级块在磁盘中物理地址0x10000相等,如果是,执行步骤S1024,否则,退出流程;
S1024:主超级块的起始地址向后偏移0x32B字节,获取连续n字节的内容为组块条目阵列,用以描述逻辑地址到物理地址的映射方式,其中,n的值等于主超级块的起始地址向后偏移0xA0字节并获取连续4字节的低字节序的内容,执行步骤S200。
S200:解析磁盘中BTRFS文件系统的主超级块,步骤S200包括以下步骤:
根据主超级块所包含的磁盘数据描述信息,解析如表1所示的BTRFS文件系统主超级块的扇区数据结构,包括最新写时复制ID值、根树、数据块树、磁盘字节数使用情况、磁盘名称、逻辑地址和物理地址的映射关系、历史写时复制ID值对应的各个B-Tree节点块逻辑地址,其中,
当前最新的写时复制ID值:储存于主超级块的起始地址向后偏移0x48的连续8字节的低字节序的内容;
根树逻辑地址:储存于主超级块的起始地址向后偏移0x60的连续8字节低字节序的内容;
数据块根树逻辑地址:储存于主超级块的起始地址向后偏移0x68的连续8字节低字节序的内容;
逻辑地址和物理地址的映射关系:储存于主超级块的起始地址向后偏移0x32B的n字节中n的值等于主超级块的起始地址向后偏移0xA0字节并获取连续4字节低字节序的内容;
历史写时复制ID值对应的各个B-Tree节点块逻辑地址:储存于主超级块的起始地址向后偏移0xB2B的连续0x4d5字节的内容。
S300:解析并获取磁盘的逻辑地址与物理地址的映射关系,步骤S300中,磁盘所有B-Tree节点块描述的地址均为逻辑地址,根据主超级块的组块数组中描述的物理地址和逻辑地址的映射关系,确定磁盘中所有B-Tree节点块中描述的逻辑地址转换为物理地址的计算方式,包括以下步骤:
S301:确定主超级块的组块数组中描述的逻辑地址和物理地址的映射关系,步骤S301包括以下步骤:
S3011:获取逻辑地址:组块数组起始地址向后偏移0x09,获取连续8字节内容的低字节序作为逻辑地址;
S3012:获取物理地址区间:组块数组起始地址向后偏移0x3D,获取连续4字节内容的低字节序为2时,逻辑地址对应为物理地址区间,且组块数组的字节长度为0x81;
S3013:获取物理地址区间起始值:组块数组起始地址向后偏移0x49,获取连续8字节内容的低字节序作为物理地址区间起始值;
S3014:获取物理地址区间结束值:组块数组起始地址向后偏移0x69,获取连续8字节内容的低字节序作为物理地址区间结束值;
S3015:获取物理地址:组块数组起始地址向后偏移0x3D,获取连续4字节内容的低字节序为1时,逻辑地址对应为物理地址,且组块数组的字节长度为0x61,块数组起始地址向后偏移0x49获取连续8字节内容的低字节序作为物理地址;
S3016:当逻辑地址在物理地址区间范围内时,实际物理地址=物理地址区间的起始地址+(实际逻辑地址-逻辑地址),其中,实际逻辑地址为从磁盘中所获取的、待计算出对应的物理地址的逻辑地址;
例如,当所获取的实际逻辑地址为0x1C04000时,由于该逻辑地址在物理地址区间范围内,计算出实际物理地址=0x2400000+(0x1C04000-0x1C00000)=0x2404000;
S3017:当逻辑地址不在物理地址区间范围内时,实际物理地址=物理地址+(实际逻辑地址-逻辑地址)。
例如,当所获取的实际逻辑地址为0x41C04000时,由于该逻辑地址不在物理地址区间范围内,计算实际物理地址=0x82400000+(0x41C04000-0x41C00000)=0x8240C000。
S302:根据主超级块中的数据块根树的逻辑地址,计算出BTRFS分区的数据块根树的物理地址,计算方法如步骤S301;
S303:解析数据块的根树节点的信息,根据所获取的逻辑地址及下述表2中逻辑地址、物理地址计算方式及数块字节数的对应关系,计算并获取BTRFS磁盘分区所有的逻辑地址到物理地址的映射关系。
表2:逻辑地址、物理地址计算方式及数块字节数的对应关系
S400:判断当前数据是否为删除数据,如果是,执行步骤S600,否则,当前数据为正常数据,执行步骤S500;
S500:解析磁盘的最新写时复制ID所对应的各个B-Tree节点块内容,获取磁盘的正常数据的信息,执行步骤S700;
步骤S500中,根据主超级块中的根树的逻辑地址,确定磁盘中逻辑地址对应的根树节点块的物理地址,并进行解析节点块的信息,获取根树中EXTENT树、DEV树、文件系统树、根树目录节点、校验和树以及磁盘的目录节点树,根据B-Tree节点块的信息,确定磁盘中包含的正常文件的目录结构、属性描述信息及数据,包括以下步骤:
S501:根据BTRFS分区的主超级块中根树的逻辑地址及表2中逻辑地址、物理地址计算方式及数块字节数的对应关系,计算并获取各个B-Tree节点在磁盘分区中的物理地址,其中,各个节点当前写时复制ID值的根树下包含的各个B-Tree节点描述信息如下表3所示:
表3:各个节点的描述信息
以上几项记录的节点类型信息为我们解析获取BTRFS分区正常文件所必需的信息。根据逻辑地址到物理地址的映射可以计算出对应的物理地址
S502:解析文件系统树节点的信息,获取BTRFS磁盘分区的文件描述信息:根据步骤S501所获取的文件系统树在磁盘分区中的物理地址,解析文件系统树节点的信息,节点的记录类型如下表4所示:
表4:节点的记录类型
根据表4的节点的记录类型,遍历文件系统树节点的信息,获取到BTRFS分区中所有文件描述信息;
S503:解析EXTENT树节点的信息,获取BTRFS分区中所有文件的数据:步骤S502中所获取的BTRFS分区文件描述信息中,获取文件的逻辑地址,根据逻辑地址在EXTENT树节点中查找逻辑地址对应的记录项,其中,描述逻辑地址指向对象的文件类型、对象在BTRFS磁盘分区中占用的字节数、对象实际的字节数、对象的父ID以及对象被写入磁盘时的写时复制ID;
S504:结合文件系统树获取到的文件描述信息及EXTENT树的文件数据,确定文件在BTRFS磁盘分区中的目录结构及数据:根据文件的父ID,确定文件在磁盘分区中的目录结构;根据文件存储逻辑地址确定数据,用以获取BTRFS分区中所有的文件目录结构。
S600:解析磁盘中历史写时复制ID值所对应的各个B-Tree节点块内容,恢复并提取磁盘的删除数据的信息;
步骤S600中,解析当前磁盘中历史写时复制ID值对应的各个B-Tree节点块,恢复磁盘中删除文件数据信息:根据主超级块中描述的历史写时复制ID值所对应的各个B-Tree节点块的逻辑地址,结合步骤S300中所确定的逻辑地址与物理地址的映射关系,获取历史写时复制ID值对应的B-Tree节点块的数据,恢复并提取磁盘中的删除数据,包括以下步骤:
S601:在BTRFS文件系统中更新数据时,采用了写时复制功能,所以在磁盘数据被更新时,在没有被覆盖的情况下,历史写时复制ID对应的B-Tree节点数据内容,会一直存储在磁盘分区内。
根据主超级块的历史写时复制ID所对应的各个B-Tree节点的逻辑地址,确定磁盘数据更新时所记录的B-Tree节点的历史状态内容:获取主超级块起始偏移位置0xB2B的0x4D5字节长度的内容,作为历史写时复制ID所对应的B-Tree节点信息,其中,第一个0xA8字节长度的内容为当前最新写时复制ID状态下的B-Tree节点信息,紧跟在第一个0xA8字节的B-Tree节点信息之后的第二个0xA8字节的B-Tree节点信息为当前磁盘分区更新前的分区文件数据的状态;
通过逻辑地址到物理地址的映射关系,确定B-Tree节点信息如下述表5所示:
表5:B-Tree节点信息
其中,通过确定物理地址并进入B-Tree节点后,读取节点起始位置0x58的8字节的低字节序的内容,作为节点类型值;
S602:采用步骤S502的方法,获取历史写时复制ID的文件系统树,解析文件系统树节点中文件描述信息;
S603:对比历史写时复制ID所对应的文件系统树与最新写时复制ID所对应文件系统树所包含的文件描述信息,历史写时复制ID所对应的文件系统树中多的记录项内容,为删除的文件或目录描述信息,记录删除的文件或目录描述信息;
S604:解析历史写时复制ID的EXTENT树,查找删除文件的数据:通过S603所确定的删除文件描述信息的逻辑地址,在EXTENT树节点中找到逻辑地址所对应的记录项内容,包括描述逻辑地址指向对象在BTRFS分区中占用的字节数、对象的实际直接树、对象的父ID、写入对象到磁盘分区的写时复制ID;
S605:根据找到的删除文件描述信息,提取磁盘分区中删除的数据。
S700:根据所获取的正常数据的信息或所恢复并提取的删除数据的信息,确定正常数据或所恢复并提取的删除数据在磁盘中的目录结构及数据的内容。步骤S700包括:
S701:从磁盘分区中解析所恢复的文件描述信息中的父ID、子ID及父ID/子ID指向对象的名称、类型,确定文件在BTRFS分区中目录层级结构;
S702:对于解析并提取的正常文件/删除文件,分别设置标记以区分正常文件/删除文件。
通过本发明所提供的上述方法,可以解析及提取基于写时复制的BTRFS文件系统的正常数据及删除数据。
应当理解的是,本发明不限于上述的举例,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,所有这些改进和变换都应属于本发明所附权利要求的保护范围。
Claims (8)
1.一种基于写时复制的BTRFS文件系统数据的解析及提取方法,其特征在于包括以下步骤:
S100:加载磁盘并判断磁盘的数据是否为BTRFS文件系统的数据,如果是,执行步骤S200,否则执行步骤S100;其中,判断的方法为:寻址并获取物理地址0x10000处的主超级块,判断主超级块中magic值是否为BTRFS文件系统数据的标识;
S200:解析磁盘中BTRFS文件系统的主超级块;
S300:解析并获取磁盘的逻辑地址与物理地址的映射关系;
S400:判断当前数据是否为删除数据,如果是,执行步骤S600,否则,当前数据为正常数据,执行步骤S500;
S500:解析磁盘的最新写时复制ID所对应的各个B-Tree节点块内容,获取磁盘的正常数据的信息,执行步骤S700;
S600:解析磁盘中历史写时复制ID值所对应的各个B-Tree节点块内容,恢复并提取磁盘的删除数据的信息;
S700:根据所获取的正常数据的信息或所恢复并提取的删除数据的信息,确定正常数据或所恢复并提取的删除数据在磁盘中的目录结构及数据的内容。
2.根据权利要求1所述的一种基于写时复制的BTRFS文件系统数据的解析及提取方法,其特征在于,所述步骤S100包括以下步骤:
S101:加载磁盘并获取磁盘起始地址向后偏移0x10000字节的扇区数据,扇区数据的字节长度为0x1000,所获取的扇区数据为主超级块;
S102:判断主超级块中magic值是否为BTRFS文件系统数据的标识,包括以下步骤:
S1021:获取如表1所示的BTRFS文件系统主超级块的扇区数据结构:
表1:BTRFS文件系统主超级块的扇区数据结构
S1022:主超级块的起始地址向后偏移0x40字节,获取连续8字节的内容为magic值,判断magic值是否为ASCII码表示的字符“_BHRfS_M”,如果是,执行步骤S1023,否则,退出流程;
S1023:主超级块的起始地址向后偏移0x30字节,获取连续8字节的内容中的低字节序的内容,作为主超级块的逻辑地址,并判断是否与主超级块在磁盘中物理地址0x10000相等,如果是,执行步骤S1024,否则,退出流程;
S1024:主超级块的起始地址向后偏移0x32B字节,获取连续n字节的内容为组块条目阵列,用以描述逻辑地址到物理地址的映射方式,其中,n的值等于主超级块的起始地址向后偏移0xA0字节并获取连续4字节的低字节序的内容,执行步骤S200。
3.根据权利要求1所述的一种基于写时复制的BTRFS文件系统数据的解析及提取方法,其特征在于,所述步骤S200包括以下步骤:
根据主超级块所包含的磁盘数据描述信息,解析如表1所示的BTRFS文件系统主超级块的扇区数据结构,包括最新写时复制ID值、根树、数据块树、磁盘字节数使用情况、磁盘名称、逻辑地址和物理地址的映射关系、历史写时复制ID值对应的各个B-Tree节点块逻辑地址,其中,
当前最新的写时复制ID值:储存于主超级块的起始地址向后偏移0x48的连续8字节的低字节序的内容;
根树逻辑地址:储存于主超级块的起始地址向后偏移0x60的连续8字节低字节序的内容;
数据块根树逻辑地址:储存于主超级块的起始地址向后偏移0x68的连续8字节低字节序的内容;
逻辑地址和物理地址的映射关系:储存于主超级块的起始地址向后偏移0x32B的n字节中n的值等于主超级块的起始地址向后偏移0xA0字节并获取连续4字节低字节序的内容;
历史写时复制ID值对应的各个B-Tree节点块逻辑地址:储存于主超级块的起始地址向后偏移0xB2B的连续0x4d5字节的内容。
4.根据权利要求1所述的一种基于写时复制的BTRFS文件系统数据的解析及提取方法,其特征在于,所述步骤S300中,磁盘所有B-Tree节点块描述的地址均为逻辑地址,根据主超级块的组块数组中描述的物理地址和逻辑地址的映射关系,确定磁盘中所有B-Tree节点块中描述的逻辑地址转换为物理地址的计算方式,包括以下步骤:
S301:确定主超级块的组块数组中描述的逻辑地址和物理地址的映射关系;
S302:根据主超级块中的数据块根树的逻辑地址,计算出BTRFS分区的数据块根树的物理地址,计算方法如步骤S301所述;
S303:解析数据块的根树节点的信息,根据所获取的逻辑地址及下述表2中逻辑地址、物理地址计算方式及数块字节数的对应关系,计算并获取BTRFS磁盘分区所有的逻辑地址到物理地址的映射关系。
表2:逻辑地址、物理地址计算方式及数块字节数的对应关系
5.根据权利要求1所述的一种基于写时复制的BTRFS文件系统数据的解析及提取方法,其特征在于,所述步骤S500中,根据主超级块中的根树的逻辑地址,确定磁盘中逻辑地址对应的根树节点块的物理地址,并进行解析节点块的信息,获取根树中EXTENT树、DEV树、文件系统树、根树目录节点、校验和树以及磁盘的目录节点树,根据B-Tree节点块的信息,确定磁盘中包含的正常文件的目录结构、属性描述信息及数据,包括以下步骤:
S501:根据BTRFS分区的主超级块中根树的逻辑地址及所述表2中逻辑地址、物理地址计算方式及数块字节数的对应关系,计算并获取各个B-Tree节点在磁盘分区中的物理地址,其中,各个节点当前写时复制ID值的根树下包含的各个B-Tree节点描述信息如下表3所示:
表3:各个节点的描述信息
S502:解析文件系统树节点的信息,获取BTRFS磁盘分区的文件描述信息:根据步骤S501所获取的文件系统树在磁盘分区中的物理地址,解析文件系统树节点的信息,节点的记录类型如下表4所示:
表4:节点的记录类型
根据表4所述的节点的记录类型,遍历文件系统树节点的信息,获取到BTRFS分区中所有文件描述信息;
S503:解析EXTENT树节点的信息,获取BTRFS分区中所有文件的数据:步骤S502中所获取的BTRFS分区文件描述信息中,获取文件的逻辑地址,根据逻辑地址在EXTENT树节点中查找逻辑地址对应的记录项,其中,描述逻辑地址指向对象的文件类型、对象在BTRFS磁盘分区中占用的字节数、对象实际的字节数、对象的父ID以及对象被写入磁盘时的写时复制ID;
S504:结合文件系统树获取到的文件描述信息及EXTENT树的文件数据,确定文件在BTRFS磁盘分区中的目录结构及数据:根据文件的父ID,确定文件在磁盘分区中的目录结构;根据文件存储逻辑地址确定数据,用以获取BTRFS分区中所有的文件目录结构。
6.根据权利要求1所述的一种基于写时复制的BTRFS文件系统数据的解析及提取方法,其特征在于,所述步骤S600中,解析当前磁盘中历史写时复制ID值对应的各个B-Tree节点块,恢复磁盘中删除文件数据信息:根据主超级块中描述的历史写时复制ID值所对应的各个B-Tree节点块的逻辑地址,结合步骤S300中所确定的逻辑地址与物理地址的映射关系,获取历史写时复制ID值对应的B-Tree节点块的数据,恢复并提取磁盘中的删除数据,包括以下步骤:
S601:根据主超级块的历史写时复制ID所对应的各个B-Tree节点的逻辑地址,确定磁盘数据更新时所记录的B-Tree节点的历史状态内容:获取主超级块起始偏移位置0xB2B的0x4D5字节长度的内容,作为历史写时复制ID所对应的B-Tree节点信息,其中,第一个0xA8字节长度的内容为当前最新写时复制ID状态下的B-Tree节点信息,紧跟在第一个0xA8字节的B-Tree节点信息之后的第二个0xA8字节的B-Tree节点信息为当前磁盘分区更新前的分区文件数据的状态;
通过逻辑地址到物理地址的映射关系,确定B-Tree节点信息如下述表5所示:
表5:B-Tree节点信息
其中,通过确定物理地址并进入B-Tree节点后,读取节点起始位置0x58的8字节的低字节序的内容,作为节点类型值;
S602:采用步骤S502的方法,获取历史写时复制ID的文件系统树,解析文件系统树节点中文件描述信息;
S603:对比历史写时复制ID所对应的文件系统树与最新写时复制ID所对应文件系统树所包含的文件描述信息,历史写时复制ID所对应的文件系统树中多的记录项内容,为删除的文件或目录描述信息,记录删除的文件或目录描述信息;
S604:解析历史写时复制ID的EXTENT树,查找删除文件的数据:通过S603所确定的删除文件描述信息的逻辑地址,在EXTENT树节点中找到逻辑地址所对应的记录项内容,包括描述逻辑地址指向对象在BTRFS分区中占用的字节数、对象的实际直接树、对象的父ID、写入对象到磁盘分区的写时复制ID;
S605:根据找到的删除文件描述信息,提取磁盘分区中删除的数据。
7.根据权利要求1所述的一种基于写时复制的BTRFS文件系统数据的解析及提取方法,其特征在于,所述步骤S700包括:
S701:从磁盘分区中解析所恢复的文件描述信息中的父ID、子ID及父ID/子ID指向对象的名称、类型,确定文件在BTRFS分区中目录层级结构;
S702:对于解析并提取的正常文件/删除文件,分别设置标记以区分正常文件/删除文件。
8.根据权利要求3所述的一种基于写时复制的BTRFS文件系统数据的解析及提取方法,其特征在于,所述步骤S301包括以下步骤:
S3011:获取逻辑地址:组块数组起始地址向后偏移0x09,获取连续8字节内容的低字节序作为逻辑地址;
S3012:获取物理地址区间:组块数组起始地址向后偏移0x3D,获取连续4字节内容的低字节序为2时,逻辑地址对应为物理地址区间,且组块数组的字节长度为0x81;
S3013:获取物理地址区间起始值:组块数组起始地址向后偏移0x49,获取连续8字节内容的低字节序作为物理地址区间起始值;
S3014:获取物理地址区间结束值:组块数组起始地址向后偏移0x69,获取连续8字节内容的低字节序作为物理地址区间结束值;
S3015:获取物理地址:组块数组起始地址向后偏移0x3D,获取连续4字节内容的低字节序为1时,逻辑地址对应为物理地址,且组块数组的字节长度为0x61,块数组起始地址向后偏移0x49获取连续8字节内容的低字节序作为物理地址;
S3016:当逻辑地址在物理地址区间范围内时,实际物理地址=物理地址区间的起始地址+(实际逻辑地址-逻辑地址),其中,所述实际逻辑地址为从磁盘中所获取的、待计算出对应的物理地址的逻辑地址;S3017:当逻辑地址不在物理地址区间范围内时,实际物理地址=物理地址+(实际逻辑地址-逻辑地址)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011603205.0A CN112650718A (zh) | 2020-12-30 | 2020-12-30 | 一种基于写时复制的btrfs文件系统数据的解析及提取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011603205.0A CN112650718A (zh) | 2020-12-30 | 2020-12-30 | 一种基于写时复制的btrfs文件系统数据的解析及提取方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN112650718A true CN112650718A (zh) | 2021-04-13 |
Family
ID=75364114
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011603205.0A Pending CN112650718A (zh) | 2020-12-30 | 2020-12-30 | 一种基于写时复制的btrfs文件系统数据的解析及提取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112650718A (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115292266A (zh) * | 2022-05-30 | 2022-11-04 | 中国电子科技集团公司第五十二研究所 | 一种基于存储器的高可靠日志存储方法 |
Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130073813A1 (en) * | 2011-09-15 | 2013-03-21 | Josef Michael Bacik | Mechanism for Saving a Snapshot of Free Space of a File System on Persistent Storage |
CN106021031A (zh) * | 2016-05-30 | 2016-10-12 | 厦门市美亚柏科信息股份有限公司 | 一种btrfs文件系统的删除数据恢复方法和装置 |
US20170060898A1 (en) * | 2015-08-27 | 2017-03-02 | Vmware, Inc. | Fast file clone using copy-on-write b-tree |
CN109522290A (zh) * | 2018-11-14 | 2019-03-26 | 中国刑事警察学院 | 一种HBase数据块恢复及数据记录提取方法 |
CN110297729A (zh) * | 2019-07-02 | 2019-10-01 | 四川效率源信息安全技术股份有限公司 | 一种基于区间块来恢复apfs中被损坏数据及被删除数据的方法 |
CN110309019A (zh) * | 2019-07-02 | 2019-10-08 | 四川效率源信息安全技术股份有限公司 | 一种快速恢复并提取apfs中删除文件的方法 |
US10678652B1 (en) * | 2017-04-28 | 2020-06-09 | EMC IP Holding Company LLC | Identifying changed files in incremental block-based backups to backup indexes |
-
2020
- 2020-12-30 CN CN202011603205.0A patent/CN112650718A/zh active Pending
Patent Citations (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130073813A1 (en) * | 2011-09-15 | 2013-03-21 | Josef Michael Bacik | Mechanism for Saving a Snapshot of Free Space of a File System on Persistent Storage |
US20170060898A1 (en) * | 2015-08-27 | 2017-03-02 | Vmware, Inc. | Fast file clone using copy-on-write b-tree |
CN106021031A (zh) * | 2016-05-30 | 2016-10-12 | 厦门市美亚柏科信息股份有限公司 | 一种btrfs文件系统的删除数据恢复方法和装置 |
US10678652B1 (en) * | 2017-04-28 | 2020-06-09 | EMC IP Holding Company LLC | Identifying changed files in incremental block-based backups to backup indexes |
CN109522290A (zh) * | 2018-11-14 | 2019-03-26 | 中国刑事警察学院 | 一种HBase数据块恢复及数据记录提取方法 |
CN110297729A (zh) * | 2019-07-02 | 2019-10-01 | 四川效率源信息安全技术股份有限公司 | 一种基于区间块来恢复apfs中被损坏数据及被删除数据的方法 |
CN110309019A (zh) * | 2019-07-02 | 2019-10-08 | 四川效率源信息安全技术股份有限公司 | 一种快速恢复并提取apfs中删除文件的方法 |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115292266A (zh) * | 2022-05-30 | 2022-11-04 | 中国电子科技集团公司第五十二研究所 | 一种基于存储器的高可靠日志存储方法 |
CN115292266B (zh) * | 2022-05-30 | 2024-05-14 | 中国电子科技集团公司第五十二研究所 | 一种基于存储器的高可靠日志存储方法 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210311912A1 (en) | Reduction of data stored on a block processing storage system | |
CN108804510B (zh) | 键值文件系统 | |
US7925683B2 (en) | Methods and apparatus for content-aware data de-duplication | |
US8255398B2 (en) | Compression of sorted value indexes using common prefixes | |
KR101792168B1 (ko) | 개별 액세스 가능한 데이터 유닛의 스토리지 관리 | |
US8321439B2 (en) | Quick filename lookup using name hash | |
US8548965B2 (en) | Changed files list with time buckets for efficient storage management | |
US9594674B1 (en) | Method and system for garbage collection of data storage systems using live segment records | |
US9715505B1 (en) | Method and system for maintaining persistent live segment records for garbage collection | |
US20060059171A1 (en) | System and method for chunk-based indexing of file system content | |
US11363296B2 (en) | Lossless reduction of data by using a prime data sieve and performing multidimensional search and content-associative retrieval on data that has been losslessly reduced using a prime data sieve | |
US9183218B1 (en) | Method and system to improve deduplication of structured datasets using hybrid chunking and block header removal | |
CN105740303A (zh) | 改进的对象存储的方法及装置 | |
WO2020103493A1 (zh) | 基于fat32文件系统的删除文件恢复方法及系统 | |
CN109284273B (zh) | 一种采用后缀数组索引的海量小文件查询方法及系统 | |
JP6846426B2 (ja) | 音声データおよびブロック処理ストレージシステム上に記憶されたデータの削減 | |
JP2023525791A (ja) | 基本データシーブを使用して無損失削減されたデータの効率的な取出しのための基本データの局所性の利用 | |
CN110297781B (zh) | 一种基于写时复制来恢复apfs中被删除数据的方法 | |
CN111104377A (zh) | 文件管理的方法、电子设备和计算机可读存储介质 | |
JP6726690B2 (ja) | 基本データシーブを用いて無損失削減されたデータに対する多次元検索、コンテンツ連想的な取出し、ならびにキーワードベースの検索および取出しの実行 | |
CN112650718A (zh) | 一种基于写时复制的btrfs文件系统数据的解析及提取方法 | |
US20220066994A1 (en) | Efficient retrieval of data that has been losslessly reduced using a prime data sieve | |
US8495025B2 (en) | Foldering by stable query | |
CN111444179B (zh) | 数据处理方法、装置、存储介质及服务器 |
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 | ||
RJ01 | Rejection of invention patent application after publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20210413 |