linux服务器reiserfs文件系统损坏,你需要学会这种修复方法

今天为大家介绍一个Linux服务器数据恢复成功案例,本次服务器数据恢复物理服务器请款如下:客户故障服务器为一台X3850服务器,这个服务器是由4块146G SAS硬盘组成的RAID5作为存储介质,文件系统全都是reiserfs。我们首先经过分析发现了之前的硬盘数据组织结构是由一个不到100M的boot分区,后接一个271G的LVM卷,之后是2G的swap分区。LVM卷中直接划分了一个reiserfs文件系统,作为根分区。

·
  服务器在正常使用过程中,由于未知原因导致系统瘫痪,急需进行服务器数据恢复,经过系统的重装以后发现整个RAID逻辑卷变成了前面2G的boot与swap分区,后接271G的LVM卷,LVM卷中文件系统位置有个空的reiserfs超级块。
·
  我们这次要恢复的数据就是原来271G中文件系统里的所有用户数据,这些数据包含了数据库、网站程序与网页、单位OA系统里的所有办公文档。

·
服务器数据恢复工程师先通过对全盘reiserfs树节点之间的关联确定了原来的reiserfs分区位置,发现原来存储数据的文件系统的前2G数据已经被覆盖,应该是用户在安装系统时错误地初始化了分区结构,所以装好系统无法导入LVM卷而做过reiserfsck试图修复。
·
因reiserfs文件系统对文件系统里所有的文件(含目录)线性化后,再以文件key生成B+树,树不断增加节点会导致树的结构整体拉展后向整个磁盘的数据区做平滑迁移。这样一来顶级节点通常不会放在文件系统的最前面。

因根目录的文件KEY号通常是最小的,所以,从空间上看,前2G中存储最多的应该是从根起始路径最近的key节点,这样,用户数据因目录层次较深,节点存在的可能性很高。前2G覆盖的数据已经无法恢复,只能希望不要恰好覆盖用户数据。因文件系统前面对整个树的索引全丢失,加上reiserfs的树概念设计得很抽象,重搭建树会很困难。
·
工程师通过自主程序在整个原文件系统区域进行key节点扫描并将所有节点导出。然后通过自主程序对所有叶节点重新排序、过滤(去掉之前删除文件丢弃的节点),重新生成二级、三级、四级等叶节点。选择分区前面2G空间做为新树的结构区(反正这部分数据是没用的了,重装系统已经装得满满的),并生成对应地址信息。
·
应对目录命名问题,如遇到原树路径某节点丢失的情况,对其用自定义的key节点编号命名,如无法确定其父目录,暂加入/otherfiles下。根据上面对,生成树索引信息,写入特定位置,再根据这些信息,生成超级块,设置clear标志。在suse虚拟机下,创建快照,挂载修复好的卷,已经可以看到文件了。(注:虚拟机与快照的目的为了操作可加溯,同时因bitmap等元数据不影响数据,未做修正,故挂载前不可做reiserfsck)。
·
在修复用的suse虚拟机下,挂载用于copy数据的目标硬盘,mkfs后将所有数据cp到目标盘。用户通过find命令整理所需数据,修正部分目录文件位置与名称。部分丢失的散文件,按大小与文件头标志查找,找到后移动及重命名。

·
  树的不直观性加上程序的调试,使得整个恢复工作异常繁杂,幸运的是所有的重要数据100%都被我们找到了。

原文地址:https://blog.51cto.com/sun510/2469284

时间: 2024-11-16 00:18:01

linux服务器reiserfs文件系统损坏,你需要学会这种修复方法的相关文章

SQL Server服务器名称与默认实例名不一致的修复方法

SQL Server服务器名称与默认实例名不一致的修复方法 分类: 个人累积 SQl SERVER 数据库复制2011-08-10 09:49 10157人阅读 评论(0) 收藏 举报 sql server服务器sqlservermicrosoftserver远程连接 [sql] view plaincopy --原因分析: --SERVERPROPERTY 函数的 ServerName 属性与@@SERVERNAME 返回相似的信息. --ServerName 属性提供Windows 服务器和

恢复linux reiserfs文件系统损坏丢失的数据

在介绍恢复过程之前先简单说明一下故障情况,发生故障的是一台IBM X3850服务器,这个服务器是由4块146G SAS硬盘组成的RAID5作为存储介质,操作系统是SUSE LINUX,文件系统全都是reiserfs.我们首先经过分析发现了之前的硬盘数据组织结构是由一个不到100M的boot分区,后接一个271G的LVM卷,之后是2G的swap分区.LVM卷中直接划分了一个reiserfs文件系统,作为根分区. 用户在使用的过程中,系统遭遇了未知的原因而瘫痪,经过系统的冲撞以后发现整个RAID逻辑

解决Reiserfs文件系统损坏的问题我们是认真的

一.故障设备信息:服务器:X3850服务器硬盘类型:SAS,容量:146G 4块硬盘组成RAID5文件系统:Reiserfs二.Reiserfs文件系统故障分析:1.经过分析发现了之前的硬盘数据组织结构是由一个不到100M的boot分区,后接一个271G的LVM卷,之后是2G的swap分区.LVM卷中直接划分了一个reiserfs文件系统,作为根分区.2.用户在使用的过程中,系统遭遇了未知的原因而瘫痪,经过系统的冲撞以后发现整个RAID逻辑卷变成了前面2G的boot与swap分区,后接271G的

Linux服务器上挂载window本地iso镜像文件的方法。

mount //10.7.21.25/linux -o username=Administrator,[email protected] /mnt/ 10.7.21.25是window的地址 Linux目录是window上的共享文件 username password 是window的帐号密码 /mnt/ 是挂载的Linux服务器的位置. 把Linux的iso镜像文件在windows本地用rar解压并配置YUM [[email protected] ~]# mount //10.7.21.25/

ssh连接linux服务器只显示-bash-4.1#不显示路径解决方法

ssh连接linux服务器只显示-bash-4.1#不显示路径时,我们只需要修改  ~/.bash_profile文件,如果不存在这个文件,那么新建一个,增加内容  export PS1='[\[email protected]\h \W]\$’ 保存退出,最后执行, source ~/.bash_profile 这时shell就可以显示路径了

df命令--检查linux服务器的文件系统的磁盘空间占用情况

以更易读的方式显示目前磁盘空间和使用情况 语法: df [选项]... [FILE]... 文件-a, --all 包含所有的具有 0 Blocks 的文件系统 文件--block-size={SIZE} 使用 {SIZE} 大小的 Blocks 文件-h, --human-readable 使用人类可读的格式(预设值是不加这个选项的...) 文件-H, --si 很像 -h, 但是用 1000 为单位而不是用 1024 文件-i, --inodes 列出 inode 资讯,不列出已使用 blo

RHEL5.8 ext3文件系统损坏的只检测不修复(fsck -n)

[[email protected] ~]# df -Th Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/VolGroup00-LogVol00 ext3 872G 345G 482G 42% / /dev/sda1 ext3 190M 13M 168M 7% /boot tmpfs tmpfs 2.0G 0 2.0G 0% /dev/shm [[email protected] ~]# uname -r 2.6.18-3

Linux服务器文件和windows本机文件互传方法(本地文件上传Linux,Linux文件下载到本机)

1.windows系统中下载XShell安装文件.下载地址:https://www.newasp.net/soft/384562.html 2.安装之后,新建会话输入远程linux的账号和密码. 3.上传文件:在shell终端仿真器中输入命令rz,即可从本机选择文件利用Zmodem上传到服务器当前路径下. 4.下载文件:在shell终端仿真器中输入命令sz 文件名,即可利用Zmodem将文件下载到本地某目录下. 原文地址:https://www.cnblogs.com/qqflying/p/10

Linux服务器mysql,nginx等自动停止的排查,以及解决方法

最近发现自己使用的某台云服务武器只要稍微流量大一点,就会出现莫名的的数据库连接错误的情况 ,然后连上服务器查看,发现mysql进程被结束了,经常出现这种情况,这还怎么得了,然后第一时间查看mysql日志 发现是被进程结束了,好端端的怎么就自己结束了呢,这时候想到应该是mysql进程占用太多内存,然后被系统给kill 掉了.然后 tail /var/log/messages 查看服务器的系统日志/var/log/messages 然后看了下在mysql自动停止的时间段内,有什么异常的日志信息,日志