服务器数据恢复—分区结构被破坏的reiserfs文件系统数据恢复案例

news/2024/11/8 14:01:30/

服务器数据恢复环境:

一台服务器中有一组由4块SAS硬盘组建的RAID5阵列,上层安装linux操作系统统。分区结构:boot分区+LVM卷+swap分区(按照顺序),LVM卷中划分了一个reiserfs文件系统作为根分区。

服务器故障:

服务器操作系统在运行过程中由于未知原因崩溃,管理员重装操作系统后发现分区结构变为:boot分区+swap分区+LVM卷(按照顺序),LVM卷中文件系统位置有个空的reiserfs超级块。

用户方需要恢复reiserfs文件系统中所有数据,包含数据库、网站程序与网页、OA系统中所有办公文档。

服务器数据恢复过程:

1、将故障服务器中所有磁盘做好标记后取出,硬件工程师检测后没有发现有硬盘存在硬件故障。以只读方式将所有硬盘进行扇区级全盘镜像,镜像过程中也没有发现有硬盘存在大量坏道。镜像完成后将所有磁盘按照原样还原到原服务器中,后续的数据分析和数据恢复操作都基于镜像文件进行,避免对原始磁盘数据造成二次破坏。

2、基于镜像文件分析所有磁盘底层数据。通过对全盘reiserfs树节点之间的关联确定原来的reiserfs分区位置,发现原来存放数据的reiserfs文件系统前几G数据已经被覆盖,应该是在安装系统时错误地初始化了分区结构。管理员在装好操作系统后发现无法导入LVM卷,于是使用reiserfsck工具试图修复文件系统。

reiserfs文件系统对文件系统里所有的文件(含目录)线性化后,再以文件key生成B+树。随着树不断增加节点,树的结构会整体拉展,然后向整个磁盘的数据区做平滑迁移,所以顶级节点通常不会处于文件系统的最前面。根目录的文件KEY号通常是最小的,所以,从空间上看,被覆盖的前几G的空间中存放的应该是离根起始路径最近的key节点。用户的数据因目录层次较深,所以节点存在的可能性很高。

3、使用北亚企安自主开发程序在整个原文件系统区域扫描key节点并将所有节点导出,然后重新排序和过滤(去掉之前删除文件丢弃的节点)所有叶节点,重新生成二级、三级、四级等叶节点。选择分区前面几G空间作为新树的结构区,并生成对应地址信息。

应对目录命名问题,如遇到原树路径某节点丢失的情况,对其用自定义的key节点编号命名。如无法确定其父目录,暂加入/otherfiles下。根据上面对生成树索引信息并写入特定位置,再根据这些信息生成超级块和设置clear标志。在suse虚拟机下创建快照并挂载修复好的卷,这时已经可以看到文件了。

4、在修复用的suse虚拟机下,挂载用于拷贝数据的目标硬盘,mkfs后将所有数据cp到目标盘。

5、用户通过find命令整理所需数据,修正部分目录文件位置与名称。

6、针对部分丢失的散文件,按照大小与文件头标志查找,找到后移动及重命名。

7、经过工程师努力,最终将所有数据恢复出来。经过用户方验证,确认数据完整有效,认可数据恢复结果。


http://www.ppmy.cn/news/1545369.html

相关文章

vue中的nextTick() - 2024最新版前端秋招面试短期突击面试题【100道】

nextTick() - 2024最新版前端秋招面试短期突击面试题【100道】 🔄 在Vue.js中,nextTick 是一个重要的方法,用于在下次DOM更新循环结束之后执行回调函数。理解 nextTick 的原理和用法可以帮助你更好地处理DOM更新和异步操作。以下是关于 next…

k8s之Kruise Rollouts灰度发布

这里是一些链接https://github.com/openkruise/kruise-tools/releases/tag/v1.1.5 https://openkruise.io/zh/rollouts/user-manuals/basic-usage/ https://github.com/openkruise/kruise-tools#install-manually https://help.aliyun.com/zh/ack/ack-managed-and-ack-dedicate…

【Linux系统编程】第四十三弹---多线程编程指南:线程终止方式与C++11中的thread

✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、线程终止 1.1、pthread_exit() 1.2、pthread_cancel() 1.3、pthread_detach() 2、C11中thread 1、线程终止 问题7 …

ubuntu编译内核安装启动

下载源码 apt update apt install linux-source # /usr/src/linux-source-5.4.0/linux-source-5.4.0.tar.bz2 下载源码 tar -jxvf linux-source-5.4.0.tar.bz2 # /usr/src/linux-source-5.4.0 解压源码 安装依赖 sudo apt -y install build-essential sudo apt -y i…

SQL,力扣题目571, 给定数字的频率查询中位数

一、力扣链接 LeetCode_571 二、题目描述 Numbers 表: ------------------- | Column Name | Type | ------------------- | num | int | | frequency | int | ------------------- num 是这张表的主键(具有唯一值的列)。 这张表的每一行表示某个数…

SpringBoot框架的企业资产管理自动化

摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了企业资产管理系统的开发全过程。通过分析企业资产管理系统方面的不足,创建了一个计算机管理企业资产管理系统的方案。文章介绍了企业资产管理系统的系…

规范:项目、目录、文件、样式、事件、变量、方法、url参数、注释、git提交 命名规范及考证

一、规范命名的重要性 易懂、通用、规范、标准、专业性、是经验积累的体现 1.1、常见命名方法 序号命名方法解释1全小写2全大写3驼峰:小驼峰命名法4驼峰:大驼峰命名法5烤串命名法 / 脊柱命名法6下划线分隔法 二、项目名 采用小写字母和中划线&#…

GitHub | 发布到GitHub仓库并联文件夹的方式

推送到Github 推送步骤如果你只想更新单个文件,只需在第 4 步中指定该文件的路径即可。可能问题一 效果 推送步骤 更新 GitHub 仓库中的文件通常涉及以下步骤: 克隆仓库: 首先,你需要将 GitHub 上的仓库克隆到本地。使用 git …