CN112650718A - 一种基于写时复制的btrfs文件系统数据的解析及提取方法 - Google Patents

一种基于写时复制的btrfs文件系统数据的解析及提取方法 Download PDF

Info

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
Application number
CN202011603205.0A
Other languages
English (en)
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 CN202011603205.0A priority Critical patent/CN112650718A/zh
Publication of CN112650718A publication Critical patent/CN112650718A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/1727Details of free space management performed by the file system
    • 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/1415Saving, restoring, recovering or retrying at system level
    • G06F11/1435Saving, restoring, recovering or retrying at system level using file system or storage system metadata
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/16File or folder operations, e.g. details of user interfaces specifically adapted to file systems
    • G06F16/162Delete operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/18File system types
    • G06F16/182Distributed file systems
    • G06F16/184Distributed file systems implemented as replicated file system
    • G06F16/1844Management 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文件系统数据的解析及提取方法。
背景技术
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文件系统主超级块的扇区数据结构
Figure BDA0002871955380000031
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:逻辑地址、物理地址计算方式及数块字节数的对应关系
Figure BDA0002871955380000051
优选地,所述步骤S500中,根据主超级块中的根树的逻辑地址,确定磁盘中逻辑地址对应的根树节点块的物理地址,并进行解析节点块的信息,获取根树中EXTENT树、DEV树、文件系统树、根树目录节点、校验和树以及磁盘的目录节点树,根据B-Tree节点块的信息,确定磁盘中包含的正常文件的目录结构、属性描述信息及数据,包括以下步骤:
S501:根据BTRFS分区的主超级块中根树的逻辑地址及所述表2中逻辑地址、物理地址计算方式及数块字节数的对应关系,计算并获取各个B-Tree节点在磁盘分区中的物理地址,其中,各个节点当前写时复制ID值的根树下包含的各个B-Tree节点描述信息如下表3所示:
表3:各个节点的描述信息
Figure BDA0002871955380000061
S502:解析文件系统树节点的信息,获取BTRFS磁盘分区的文件描述信息:根据步骤S501所获取的文件系统树在磁盘分区中的物理地址,解析文件系统树节点的信息,节点的记录类型如下表4所示:
表4:节点的记录类型
Figure BDA0002871955380000062
根据表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节点信息
Figure BDA0002871955380000081
其中,通过确定物理地址并进入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文件系统主超级块的扇区数据结构
Figure BDA0002871955380000101
Figure BDA0002871955380000111
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:逻辑地址、物理地址计算方式及数块字节数的对应关系
Figure BDA0002871955380000131
Figure BDA0002871955380000141
S400:判断当前数据是否为删除数据,如果是,执行步骤S600,否则,当前数据为正常数据,执行步骤S500;
S500:解析磁盘的最新写时复制ID所对应的各个B-Tree节点块内容,获取磁盘的正常数据的信息,执行步骤S700;
步骤S500中,根据主超级块中的根树的逻辑地址,确定磁盘中逻辑地址对应的根树节点块的物理地址,并进行解析节点块的信息,获取根树中EXTENT树、DEV树、文件系统树、根树目录节点、校验和树以及磁盘的目录节点树,根据B-Tree节点块的信息,确定磁盘中包含的正常文件的目录结构、属性描述信息及数据,包括以下步骤:
S501:根据BTRFS分区的主超级块中根树的逻辑地址及表2中逻辑地址、物理地址计算方式及数块字节数的对应关系,计算并获取各个B-Tree节点在磁盘分区中的物理地址,其中,各个节点当前写时复制ID值的根树下包含的各个B-Tree节点描述信息如下表3所示:
表3:各个节点的描述信息
Figure BDA0002871955380000142
Figure BDA0002871955380000151
以上几项记录的节点类型信息为我们解析获取BTRFS分区正常文件所必需的信息。根据逻辑地址到物理地址的映射可以计算出对应的物理地址
S502:解析文件系统树节点的信息,获取BTRFS磁盘分区的文件描述信息:根据步骤S501所获取的文件系统树在磁盘分区中的物理地址,解析文件系统树节点的信息,节点的记录类型如下表4所示:
表4:节点的记录类型
Figure BDA0002871955380000152
根据表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节点信息
Figure BDA0002871955380000161
其中,通过确定物理地址并进入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文件系统主超级块的扇区数据结构
Figure FDA0002871955370000021
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:逻辑地址、物理地址计算方式及数块字节数的对应关系
Figure FDA0002871955370000041
5.根据权利要求1所述的一种基于写时复制的BTRFS文件系统数据的解析及提取方法,其特征在于,所述步骤S500中,根据主超级块中的根树的逻辑地址,确定磁盘中逻辑地址对应的根树节点块的物理地址,并进行解析节点块的信息,获取根树中EXTENT树、DEV树、文件系统树、根树目录节点、校验和树以及磁盘的目录节点树,根据B-Tree节点块的信息,确定磁盘中包含的正常文件的目录结构、属性描述信息及数据,包括以下步骤:
S501:根据BTRFS分区的主超级块中根树的逻辑地址及所述表2中逻辑地址、物理地址计算方式及数块字节数的对应关系,计算并获取各个B-Tree节点在磁盘分区中的物理地址,其中,各个节点当前写时复制ID值的根树下包含的各个B-Tree节点描述信息如下表3所示:
表3:各个节点的描述信息
Figure FDA0002871955370000051
S502:解析文件系统树节点的信息,获取BTRFS磁盘分区的文件描述信息:根据步骤S501所获取的文件系统树在磁盘分区中的物理地址,解析文件系统树节点的信息,节点的记录类型如下表4所示:
表4:节点的记录类型
记录类型 记录类型描述 INODE_ITEM(0x01) 其中包含inode的状态信息 INODE_REF(0x0C) 描述从inode到目录中的名称 XATTR_ITEM(0x18) 描述从inode到按名称的扩展属性 DIR_ITEM(0x54) 允许按名称查询的目录项目 DIR_INDEX(0x60) 允许按索引查询目录中的项目 EXTENT_DATA(0x6C) 文件内容
根据表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节点信息
逻辑地址 写时复制ID 物理地址 节点类型值 0x4034000 0x1F 0x4834000 0x01 0x1400000 0x1E 0x1400000 0x03 0x34E8000 0x1F 0x3CE8000 0x02 0x4044000 0x20 0x4844000 0x05 0x30FC000 0x1E 0x38FC000 0x04 0x34C4000 0x1F 0x3CC4000 0x07
其中,通过确定物理地址并进入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:当逻辑地址不在物理地址区间范围内时,实际物理地址=物理地址+(实际逻辑地址-逻辑地址)。
CN202011603205.0A 2020-12-30 2020-12-30 一种基于写时复制的btrfs文件系统数据的解析及提取方法 Pending CN112650718A (zh)

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)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115292266A (zh) * 2022-05-30 2022-11-04 中国电子科技集团公司第五十二研究所 一种基于存储器的高可靠日志存储方法

Citations (7)

* Cited by examiner, † Cited by third party
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

Patent Citations (7)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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