一次Hbase删库的故障恢复--Linux EXT4 文件恢复原理分析

简介: 一次Hbase删库的故障恢复中,采用了特征码扫描的方式,这里描述了决定技术方案的Linux EXT4 文件恢复原理。

作者

赵成

日期

2018-05-02

标签

文件恢复, Hbase, Ext4, ext4magic, extundelete , 删库


前言

误删库(删文件) 是生产运维中最严重的故障。Hadoop大数据环境下,数据的备份与恢复都面临比传统数据库更加严峻的挑战。

作者参加的一次Hbase删库故障恢复中,由于所用Hbase版本旧,未支持snapshot的备份机制,未做任何备份。在删库误操作发出5分钟后,操作人员取消了命令,并停止了外部业务对Hbase的访问。根据日志,删除命令已发送到datanode节点,hadoop文件目录下,只有一个数据文件(128M),故障前有效数据在几个T。由于发生故障后,很快停止了对故障机器的访问,操作系统应该只是标记了文件的删除,实际数据应该在操作系统内核层面可见。

由于删除操作涉及了大量的文件,导致Ext4中的Journal日志被覆盖,无法恢复出所有的文件元信息。因此恢复的技术路线是直接在ext4层面读取数据块,根据hbase格式直接解析内容(特征码扫描方式)。下面梳理与描述了Ext4 文件恢复的大致原理,供各位同学参考。debugfs与ext4magic具体的操作流程,等有空再整理。

Ext4中目录与文件的存储结构

在分区根目录下创建文本文件1.txt,写入文件内容abc。

2018-05-02-dir.png

简单说,ext4中文件和目录包含元数据和实际数据两个部分,实际数据存储了文件的实际内容,元数据存储了文件的创建修改删除时间以及实际数据的地址。文件和目录的元数据由一个inode结构表示。所有的inode存储在inode数组中,根据序号访问。

下图描述了目录与文件的逻辑关系图。分区根目录inode序号默认为2,2号inode中记录了目录数据块的位置8481。8481数据块中存储了该目录下文件的inode序号和文件名,1.txt的inode序号为12。12号inode指向的数据块为33025,33025中存储了2.txt实际内容abc。(add表示地址,块号)

2018-05-02-create-file-dir.png

下图描述了目录和文件存储的物理结构图。

2018-05-02-create-file-dir-block.png

删除文件后的目录与文件结构

执行 rm -f 1.txt

下图为删除1.txt后,目录与文件的逻辑和物理结构。/目录的内容中标记了1.txt已经删除,ls操作不会显示已经被标记为删除的文件。12号innode中的地址信息被清除。因此文件删除后,虽然可以找到删除文件的名字,但是无法确定其数据块位置,从而无法恢复数据。

2018-05-02-del-file-dir.png

2018-05-02-del-file-dir-block.png

journal日志

ext3和ext4文件系统,使用日志机制实现了写文件的原子性和故障恢复。

在根目录中创建文件1.txt,写入内容,删除该文件,三个操作分别对应三个事务。每个事务中会记录操作涉及的元数据所在的数据块(数据块为操作后的新值,而不是操作前的值,为REDO日志而不是UNDO日志)。

下图为三个操作的事务日志简化描述(实际情况下删除一个文件占用6个左右的数据块),与之前的数据块描述对应。每个框均表示为一个单独的4K Block。除事务的开始和结束块,其他均为操作修改的数据块的REDO值。

2018-05-02-journal.png

根据journal恢复

文件1.txt删除后,其数据所在8481磁盘块的内容还在,但是inode表到该磁盘块的链接被清除,无法用于恢复操作。

journal日志文件中,有T1,T2,T3三个事务日志,T3和T1日志中的第12号inode不包含add信息,T2事务中的第12号inode包含add信息,可用于恢复数据。

因此删除操作本身的journal日志不能用于恢复,journal中必须有删除操作之前的inode信息才能进行恢复。

journal日志文件大小固定,在128M大小情况下,有32768个文件块,在日志写满后,会重复循环使用文件。如果在journal日志中,无法找到有效的文件inode信息,则该文件无法恢复。

ext4magic恢复机制

ext4magic恢复包括4个步骤,其中前3步根据journal文件日志中的有效inode信息进行数据恢复,当不能完成恢复时,第4步进行全盘扫描,根据文件的具体格式(特征码)进行恢复,支持包括以下类型文件。不能支持记录跨块的情况。

2018-05-02-ext4magic.png

该方式,与直接扫描磁盘进行hbase记录解析原理相同。

参考


版权声明:自由转载-非商用-非衍生-保持署名(创意共享3.0许可证)

目录
相关文章
|
安全 Linux iOS开发
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
921 53
Binary Ninja 5.1.8104 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
Linux API iOS开发
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
863 14
Binary Ninja 4.2.6455 (macOS, Linux, Windows) - 反编译器、反汇编器、调试器和二进制分析平台
|
数据管理 Linux iOS开发
Splunk Enterprise 9.4.5 (macOS, Linux, Windows) - 机器数据管理和分析
Splunk Enterprise 9.4.5 (macOS, Linux, Windows) - 机器数据管理和分析
453 0
|
存储 数据管理 Linux
区分Linux中.tar文件与.tar.gz文件的不同。
总之,".tar"文件提供了一种方便的文件整理方式,其归档但不压缩的特点适用于快速打包和解压,而".tar.gz"文件通过额外的压缩步骤,尽管处理时间更长,但可以减小文件尺寸,更适合于需要节约存储空间或进行文件传输的场景。用户在选择时应根据具体需求,考虑两种格式各自的优劣。
2315 13
|
Linux
【Linux】 Linux文件I/O常见操作技巧
以上就是Linux文件I/O操作的一些技巧,接纳它们,让它们成为你在Linux世界中的得力伙伴,工作会变得轻松许多。不过记住,技巧的运用也需要根据实际情况灵活掌握,毕竟,最适合的才是最好的。
429 28
|
安全 Linux
Linux赋予文件000权限的恢复技巧
以上这些步骤就像是打开一扇锁住的门,步骤看似简单,但是背后却有着严格的逻辑和规则。切记,在任何时候,变更文件权限都要考虑安全性,不要无谓地放宽权限,那样可能
525 16
|
存储 Linux 数据处理
深入剖析Linux中一切即文件的哲学和重定向的机制
在计算机的奇妙世界中,Linux的这套哲学和机制减少了不同类型资源的处理方式,简化了抽象的概念,并蕴藏着强大的灵活性。就像变戏法一样,轻轻松松地在文件、程序与设备之间转换数据流,标准输入、输出、错误流就在指尖舞动,程序的交互和数据处理因此变得既高效又富有乐趣。
297 4
|
Ubuntu Linux
"unzip"命令解析:Linux下如何处理压缩文件。
总的来说,`unzip`命令是Linux系统下一款实用而方便的ZIP格式文件处理工具。本文通过简明扼要的方式,详细介绍了在各类Linux发行版上安装 `unzip`的方法,以及如何使用 `unzip`命令进行解压、查看和测试ZIP文件。希望本文章能为用户带来实际帮助,提高日常操作的效率。
4071 12
|
Unix Linux iOS开发
Splunk Enterprise 10.0.0 (macOS, Linux, Windows) - 搜索、分析和可视化,数据全面洞察平台
Splunk Enterprise 10.0.0 (macOS, Linux, Windows) - 搜索、分析和可视化,数据全面洞察平台
395 0
linux文件重命名命令
本指南介绍Linux文件重命名方法,包括单文件操作的`mv`命令和批量处理的`rename`命令。`mv`可简单更改文件名并保留扩展名,如`mv old_file.txt new_name.txt`;`rename`支持正则表达式,适用于复杂批量操作,如`rename 's/2023/2024/' *.log`。提供实用技巧如大小写转换、数字序列处理等,并提醒覆盖风险与版本差异,建议使用`-n`参数预览效果。