IT 工程师一般都知道如何操作和使用文件和目录. 但是, 对于系统如何构建出, 抽象出文件和目录, 一般就不熟悉了. 至于更下层的概念, 可能大家知道最多的就是驱动了. 所以, 为了规避这点, 可行的简易方案之一, 就是以黑箱方式使用 testdisk 等工具, 在我们在对底层了解不多甚至一无所知的情况下, 进行数据恢复(商业工具, 恢复效果估计更好, 当然商业工具的价格也更好). 但是, 对于工程师而言, 多数时候, 仅仅以黑箱方式依赖某些工具进行数据恢复是不够的.
数据恢复, 经常是突发事故响应中关键而又耗时的一步. 多数情况下, 工程师往往并非专司数据恢复, 操作环境往往是生产环境, 趁手工具难以部署, 执行操作要遵循种种约束, 加之业务中断的压力. 这种情形下, 工程师很可能还需要推定数据恢复的结果 / 耗时等信息, 提供数据供决策者使用. 很明显, 如果你准备考验一下自己的细致, 耐心, 知识和技能, 数据恢复将是个不错的课题. 当然, 有一点是明确的, 只是以黑箱方式使用 testdisk 等工具进行数据恢复, 解决以上问题是不可能的. 那么, 有没有其他简易方案呢?
这里, 我们以一个实际的 case 为例, 讨论一下, 在只使用 UNIX 常见工具 (dd/grep/strace 等) 的情况下, 如何简单, 快捷的恢复数据.
预先准备
工具
我们要用到以下工具
排查和诊断就是数据处理
如果对数据处理了解不多, 请参考 OSEMN
1. obtaining data / 获取数据
2. crubbing data / 清洗数据
3. exploring data / 探索数据
4. modeling data / 建模数据
5. interpreting data / 解释数据
测试环境
使用 Virtualbox, 基于 CentOS/Fedora/debian/Ubuntu 搭建 Linux 实验环境. 只需要学会 strace 工具和如下系统调用, 就足以追踪系统如何处理诸如 LVM 物理卷元数据这样过的问题.
数据恢复的原理和流程
什么是元数据?
我们以大家都熟悉的磁盘作为存储设备的例子.
现代操作系统都会在磁盘上建立多个分层结构来管理和控制磁盘. 比如, 磁盘分区, 分区上建立物理卷, 物理卷上建立卷组, 卷组上建立逻辑卷, 逻辑卷上建立文件系统, 就是这样的一个例子. 如果你不熟悉 LVM, 请参考 Logical Volume Manager.
这些分层的结构都是很类似的. 以磁盘分区为例. 所谓分区, 以大家最为熟悉的 MBR: Master Boot Record 结构为例. 其实是第一个扇区记录了各个分区的起始扇区, 大小和类型. 系统需要时, 比如启动过程中, 系统只要从磁盘的第一个扇区读取这些数据即能拿到各个分区的数据.
具体看看分区的数据结构. 以 fdisk 为例, 分区的数据结构定义为
我们看看具体分区的例子, 验证一下数据结构
分区使得磁盘上的扇区有了差别. 第一个扇区(其实其编号是 0), 因分区数据记录其上而扮演特殊角色. 明显, 对系统而言, 管理和操作分区实际上就是读写第一扇区上的对应记录而已.
类似分区信息这种系统用以管理某层资源的数据就是元数据.
系统在磁盘上建立的各个分层结构, 都有类似分区结构的数据结构. 以 LVM 结构为例, 我们可以把磁盘记录和 LVM 工具报告的数据做一对比. LVM 数据的从第 2 个扇区开始, 卷组数据在第 8 个扇区中, 可以用 dd 命令提取相关扇区来验证 LVM 的数据结构.
下面是一份完整的 LVM 元数据信息, 有兴趣者可以逐一清点各个对象.
来源: http://stor.51cto.com/art/201804/571444.htm