文件系统恢复方法和系统的制作方法

文档序号:9274688阅读:513来源:国知局
文件系统恢复方法和系统的制作方法
【技术领域】
[0001]本发明涉及系统管理领域,尤其涉及一种文件系统恢复方法和装置。
【背景技术】
[0002]在实际应用中,一些误操作难免对存有数据的分区的文件系统造成了破坏,分区已无法完成挂载,此时要想继续进行分区的挂载,只能重新格式化分区或者恢复原有的文件系统。重新格式化分区会造成原有所有数据的丢失,这种方式损失较大,而恢复文件系统的方法也存在一些缺点,一些方法恢复原有的文件系统时也会造成很多或者全部数据的丢失,无法起到尽量少的减少原有数据丢失的作用。

【发明内容】

[0003]本发明提供了一种文件系统恢复方法和系统,解决了文件系统恢复过程中数据丢失的问题。
[0004]一种文件系统恢复方法,包括:
[0005]在发生分区故障时,查找故障的分区的superblock文件;
[0006]根据所述superbock文件,恢复所述故障的分区;
[0007]在对所述故障的分区恢复完成后,重新挂载该分区。
[0008]优选的,查找故障的分区的superblock文件具体为:
[0009]在所述故障的分区的文件中拷贝1024B-2048B到superblock文件。
[0010]优选的,根据所述superbock文件,恢复所述故障的分区包括:
[0011]将二进制的所述superblock文件转换成16进制的形式;
[0012]验证16进制superblock文件的正确性,获取superblock文件头上记录着的inodes的个数和block的个数;
[0013]根据所述inodes的个数和block的个数,恢复所述故障的分区。
[0014]优选的,所述在发生分区故障时,查找故障的分区的superblock文件的步骤之前,还包括:
[0015]对磁盘分区进行格式化并挂载。
[0016]优选的,操作环境为Linux系统。
[0017]本发明还提供了一种文件系统恢复系统,包括:
[0018]文件查询模块,用于在发生分区故障时,查找故障的分区的superblock文件;
[0019]故障修复模块,用于根据所述superbock文件,恢复所述故障的分区;
[0020]挂载模块,用于在对所述故障的分区恢复完成后,重新挂载该分区。
[0021]优选的,所述文件查询模块,具体用于
[0022]在所述故障的分区的文件中拷贝1024B-2048B到superblock文件。
[0023]优选的,所述故障修复模块包括:
[0024]转换单元,用于将二进制的所述superblock文件转换成16进制的形式;
[0025]验证单元,用于验证16进制superblock文件的正确性,获取superblock文件头上记录着的inodes的个数和block的个数;
[0026]恢复单元,用于根据所述inodes的个数和block的个数,恢复所述故障的分区。
[0027]优选的,所述挂载模块,还用于在系统初始化时,对磁盘分区进行格式化并挂载。
[0028]本发明提供了一种文件系统恢复方法和系统,在发生分区故障时,查找故障的分区的superblock文件,根据所述superbock文件,恢复所述故障的分区,并在对所述故障的分区恢复完成后,重新挂载该分区。通过superbock文件完成文件系统的修复,解决了文件系统恢复过程中数据丢失的问题。
【附图说明】
[0029]图1为本发明的实施例一提供的一种文件系统恢复方法的流程图;
[0030]图2为分区的物理存储结构示意图;
[0031]图3为本发明的实施例二提供的一种文件系统恢复系统的结构示意图;
[0032]图4为图3中故障修复模块302的结构示意图。
【具体实施方式】
[0033]下文中将结合附图对本发明的实施例进行详细说明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互任意组合。
[0034]首先结合附图对本发明的实施例一进行说明。
[0035]本发明实施例提供了一种文件系统恢复方法,使用该方法完成对文件系统故障处理的流程如图1所示,包括:
[0036]步骤101、操作系统的安装;
[0037]本步骤中,安装Linux系统,如安装redhat6.4操作系统。
[0038]步骤102、对sdb进行分区,格式化,挂载。
[0039]步骤103、检测文件系统故障。
[0040]亦可以模拟文件系统故障,如使用dd对sdbl模拟文件系统故障。
[0041]指令:ddif = /dev/null of = /dev/mnt count = 100bs = 4K。
[0042]步骤104、在发生分区故障时,查找故障的分区的superblock文件查看文件系统;
[0043]在步骤103中发生sdbl文件系统损坏后,无法进行挂载。
[0044]随即查找superblock。具体的,从/dev/sdbl拷贝1024B_2048B(这就是superblock的位置)到一个叫superblock的文件。
[0045]所使用的指令为:ddif = /dev/sdblbs = Ik skip = lcount = 1f =superblock。
[0046]其中,bs = lk,为每次读写的块大小;
[0047]skip = 1,表明偏移多少块开始读(这里块为bs = Ik,偏移1,表示从Ik开始读);
[0048]count = 1,表示读的大小(这里表示读Ik);
[0049]if, of,分别表不从哪里读和与到哪里去。
[0050]参考图2,为分区的物理存储结构:
[0051]图2中可以看到第一个Block的第一个Ik处是存储的Boot Block,而superblock是从Ik开始,大小为lk。
[0052]步骤105、根据所述superbock文件,恢复所述故障的分区。
[0053]本步骤具体包括:
[0054]1、查看 superblock 文件;
[0055]用vim打开从/dev/sda3复制出来的superblock文件,由于是二进制文件,在用vim打开之后要用:% ! xxd转换成16进制形式。
[0056]这样,就得到了在磁盘上superblock的形式。
[0057]2、验证 superblock 正确性;
[0058]首先,通过查看/usr/include/linux/ext3_fs.h 头文件中的 struct ext3_super—block,可以知道在superblock文件的头上记录着inodes的个数和block的个数,它们均为32位。
[0059]从superblock中可以看出:
[0060]inodes—count:00003a04(注意:这里是小数端)_ >043a0000 = 70909952
[0061]blocks—count:fdc43904 - >0439c4fd = 70894845dumpe2fs/dev/sda3|less
[0062]可以看到如下的输出(一部分):
[0063]Inode count:70909952
[0064]Block count:70894845
[0065]3、使用superblock恢复文件系统;
[0066]「root@localhost?1#e2fsck_b 32768/dev/sdbl
[0067]e2fsck 1.41.12 (17_May-2010)
[0068]/dev/sdbIwas not cleanly unmounted, check forced.
[0069]Resize inode not valid.Recreate<y> ? cancelled !
[0070]「root@localhost?1#e2fsck_b 32768/dev/sdbl
[0071]e2fsck 1.41.12 (17_May-2010)
[0072]/dev/sdbIwas not cleanly unmounted, check forced.
[0073]Resize inode not valid.Recreate<y>
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1