Superblock介绍和故障恢复

Superblock介绍和故障恢复一 超级块的介绍 超级块 nbsp 从磁盘上读出来的第一块信息就是超级块 superblock 它记录了磁盘的几何尺寸 可用空间容量 nbsp 最重要的是记录了第一个 inode 位置 就是 的 ext2 3 文件存取都是通过 inode 定位的 比如使用 home blue test 这个文件 首先先找到 的 inode 然后找到 home 的 inode 再找到 blue 的 inode nbsp 最后找到 test 的 in

一、超级块的介绍: 超级块: 

从磁盘上读出来的第一块信息就是超级块(superblock),它记录了磁盘的几何尺寸,可用空间容量 
最重要的是记录了第一个inode位置,就是”/ “的,ext2/3文件存取都是通过inode定位的, 比如使用/home/blue/test这个文件,首先先找到/的inode,然后找到/home的inode,再找到blue的inode 

最后找到test的inode,可见没有超级块,文件系统就没有使用意义。 来看看ext2/3文件系统的结构图: 

可以看出,ext2/3文件系统是由许多的块组组成,在其他的块组中保存了超级
块的复本 
通常只有块组0的超级块会被程序读取,比如mount,e2fsck默认就只读取块组
0的。 
如果超级块被写上其他的数据,比如被mkswap后,超级块保存的信息就丢失了 
mount,fsck就会报告超级块损坏,无法正常挂载系统了 :( 
鉴于超级块如此重要,文件系统的设计者将这些超级块拷贝了许多份 
分散在整个文件系统的块组中。以对付第一个超级块损坏,真是想的周到阿 ^_^ 我们要做的就是用分散在其他块组中超级块替换已经损坏的,就万事大吉啦。 
 
首先找出超级块都被藏到哪去了 :P 
注意: -n 参数表示只列出文件系统的信息,并不真的格式化分区,使用mke2fs
时一定要加倍小心 
不然真给格了,可就无回天之术了阿!一定要小心。。。。呼。。。。 
     
 
二、超级块故障的恢复方法: 

       var script = document.createElement(‘script’); script.src = ‘http://static.pay.baidu.com/resource/baichuan/ns.js’; document.body.appendChild(script);    

 
在linux文件系统里,superblock扮演着相当重要的角色,  它记录了inode表和空闲块表在硬盘上的存放位置等重要信息,  由于它很重要,所以系统自动将superblock进行冗余保存,在  恢复严重瘫痪的文件系统时可能要对它进行操作.    
    出现superblock corrupt的原因基本是非正常关机  引起的,而且关机的时候你的硬盘状况又不太好.  也有例外情况,我听说有人在用samba时shutdown  
就出现乐superblock corrupt,当然有的也可能是假象,  
比如你的硬盘是scsi硬盘,系统崩溃后用从光盘上做的boot/rescue  软盘启动,那么你e2fsck任何一个分区都会得到superblock  
corrupt的提示,这并不是e2fsck比较笨,因为scsi硬盘没有驱动  和superblock corrupt对于他来讲都是一样的–找不到inode头.    
    当你的系统出现superblock corrupt而无法启动时,不要着急  慢慢来.  
1.用应急盘启动,先看fdisk的结果.  
    如果你的分区表看起来正常,那么恢复的可能性就比较大乐,  如果出现cannot open /dev/sda2的提示,那么想一想你的  scsi卡启动没有,如果没有,那么你可以试着用系统的安装  
光盘启动,记住,仅仅是看分区表,千万不要写它.然后把分区情况详细  记录下来.    
2.试着e2fsck /dev/sda2,(先不要加-p -y 之类的参数,)      用手动进行修复,同时也可以了解具体是文件系统的那些  地方损坏了,如果你的运气好,e2fsck过去了,那么恭喜你,  
/dev/sda2已经基本修复,当然修复的可能是99.9%,也可能是99%  这就看文件系统的损坏程度乐,不过现在可以说你的数据已经  都找回来了.剩下的事就是mount上把数据备份出来以防万一.    
3.如果e2fsck没过去(确保你的硬盘已经正确驱动乐),  
    也不要着急,因为superblock在硬盘中有很多地方有备份,现在你最好  把硬盘卸下来挂到另一个好的linux系统上,当然同样要保证硬盘  被正确驱动乐.先用e2fsck /dev/sda2,如果结果和前面一样  
就用e2fsck -b xxx -f /dev/sda2, xxx是硬盘上superblock的  备份块. 
一般来讲,如果系统瘫痪的真正原因是superblock损坏,  这种办法就应该可以恢复你的数据了。  
如果执行后的结果还是不能通过,那么往下一步.    
4.利用dd命令.  
    先dd if=/dev/sda2 of=/tmp/rescue  conv=noerror  

(/tmp/rescue是一个文件),把重要的数据拷出来,当然,  这个盘要比你损坏的盘大一点,否则拷不下.另外,  
上面的dd命令在不同的境况下if和of应作相应的修改,  写在这里只是一个例子,总之在用dd之前最好先看看man.    刚才你已经看到你的分区表了,现在找一个和你的硬盘一样  的硬盘,应该是一摸一样(大小,型号),在这块硬盘上  按照坏盘上的分区表分区,分的区也应该是也是一模一样  然后用dd命令把坏盘上superblock location后的东东  全部拷到好盘的superblock location后,愿上帝保佑你,  当你再次启动系统时就可以看到熟悉的数据了,有人用这种方法  恢复了99%以上的数据,不过好在这种方法(包括前面的方法)  
都没有动那块坏盘上的数据,如果还是没有恢复,那没你还有最后一种选择.    
5. 在手册页里称这种方法为last-ditch recovery method,  
    就是说这是最后的恢复方法,只有当你已经尝试了其他的方法,  都没有能恢复你的数据的情况下才用,因为这需要冒一定的风险.    把你的硬盘挂在一台好的linux box上,运行:  #mke2fs -S /dev/sda2(如果你的数据在sda2里)  
这条命令只重建superblock,而不碰inode表,不过这仍有一定的  风险。good luck to you all.    
    当时也有人建议我如果实在不行的话就重装系统(不动分区也不格式化),  这也可能有效,但你也应该清楚这种方法就像mke2fs -S /dev/sd*  一样是有风险的。    
一点建议:  
如果你的硬盘不是可以轻易就重做的,最好在建立一个新的系统后:    
1。拿出笔和纸,把你的分区信息详细记录下来.    
2. 用mkbootdisk做好现在这个系统的启动盘并测试.  特别是如果你用的硬盘是scsi的。    
3. 在用mke2fs建立一个文件系统后将屏幕上的superblock  所在位置记录下来。    
4. 用crontab对重要数据进行备份。    
ext2文件系统(包括其他的unix文件系统)是很强壮的,  但你仍然应该小心的呵护他?nbsp




























































































版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/224293.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午12:16
下一篇 2026年3月17日 下午12:16


相关推荐

  • 算法导论 25.3 Johnson算法

    算法导论 25.3 Johnson算法一 Johnson 算法的思想 nbsp nbsp nbsp nbsp nbsp nbsp 如果图 G 中所有的边权重均为非负值 通过对每个结点进行一次 Dijkstra 算法来找到所有结点对之间的最短路径 如果图 G 中有负值的边但没有权重为负值的环路 就计算出一组新的非负权重值 并按同样的方法计算 二 新权重的确定 nbsp nbsp nbsp nbsp nbsp nbsp 我们定义新权重 w u v w u v h u h v 满足两个性质 一是对于所有结点对 u v 路径 p 是使用原权

    2026年3月18日
    2
  • ajax上传文件

    ajax上传文件一般的时候都是用的 struts 提交表单进行文件上传我做了一个校验 想用 ajax 进行文件的验证 这时候就需要使用 ajax 上传文件进行验证 nbsp 首先需要一个 js 包 nbsp jquery nbsp 和 nbsp ajaxfileuplo jsajaxfileup 下载地址 nbsp 使用方法 前台 js submitbtn click function dm

    2026年3月20日
    2
  • vmware系统安装教程_vmware安装虚拟机

    vmware系统安装教程_vmware安装虚拟机一、VMware安装所安装的版本为VMware15链接:https://pan.baidu.com/s/1vzaS4PL2e0XNis-P-M-o4A&shfl=sharepset提取码:7r3d新的改变我们对Markdown编辑器进行了一些功能拓展与语法支持,除了标准的Markdown编辑器功能,我们增加了如下几点新功能,帮助你用它写博客:全新的界面设计,将会带来全新的写…

    2022年8月16日
    3
  • 零基础学Java(2)数据类型与变量

    零基础学Java(2)数据类型与变量前言Java是一种强类型语言。这就意味着必须为每一个变量声明一种类型。在Java中,一共8种基本类型,其中有4种整型、2种浮点型、1种字符串类型char(用于表示Unicode编码的代码单元)和1种

    2022年8月7日
    6
  • 初始java数组_初始化数组为0

    初始java数组_初始化数组为01.初始化定义2.数组的三种打印方式3.数组引用null4.浅谈引用变量的影响5.与数组相关的字符串操作以及javaJVM内存简单介绍6.浅谈二维数组与C的区别

    2022年10月21日
    3
  • Integer包装类_entityframework面试题

    Integer包装类_entityframework面试题Integer 包装类面试

    2022年4月20日
    90

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号