Linux数据恢复专题——恢复丢失的分区(转载)

来源:互联网 发布:中航工业工作服 淘宝 编辑:程序博客网 时间:2024/04/29 22:38

http://dev.firnow.com/course/6_system/linux/Linuxjs/2008723/133748.html

 

背景
遇到“/dev/hda: device not found”这样的消息,说明你的硬盘肯定出问题了(废话-_-)!而这种消息可能是由于不同情况引起的,在这里介绍属于磁盘分区表受损时的对策。这种情况下,磁盘数据都还在,只不过暂时无法访问。

方法
鉴 于仅凭记忆手工恢复分区表是不现实的,这里介绍通过软件恢复分区表:使用gpart程序扫描指定的磁盘驱动器,标识看似分区签名的表项。gpart默认只 是显示像是分区的表项,但它也能将表项写入磁盘,从而重建分区表。注意,这个过程是危险的。不过总比丢失全部数据要强 :)

------------------------------------------------------------------------------------------
在你的硬盘还正常的时候,可以尝试备份分区表并存放到安全的地方,以供灾难恢复:
dd if=/dev/xxx of=filename bs=512 count=1
用于恢复的命令:
dd if=filename of=/dev/xxx bs=1 count=64 skip=446 seek=446
上面的两条命令中,xxx代表你的磁盘符号,比如hda、sda等;filename为备份文件的文件名。
注:上面的命令同时也备份了MBR和Boot Record ID,但恢复时只恢复了其中的64字节(分区表)。
------------------------------------------------------------------------------------------

gpart默认能识别下面的文件系统:beos,bsddl,ext2&ext3,fat,hpfs,hmlvm,lswap,minix,ntfs,4,rfs,s86dl和xfs。

工作
下面以/dev/hda为例:
gpart /dev/hda
上面的命令会列出gpart猜出来的分区构成,大多数情况下是和实际相符的。确认无误后,可以使用下面命令重建分区表:
gpart -W /dev/hda /dev/hda
如果不放心,可以在写前备份现有的MBR:
gpart -b filename -W /dev/hda /dev/hda
其中,filename为备份文件。

总结
磁盘主分区表损坏造成的驱动器无法识别错误,一般是比较容易解决的,gpart能够出色地猜出和重写磁盘分区表。如果是磁盘因为严重损坏而不能挂接,则可以参考本专题第二篇文章——从严重损坏的磁盘恢复数据

 

 

硬盘故障导致的数据丢失有可能是惨重的,但如果已经发生了,就需要最大程度地将数据恢复出来。本文介绍当磁盘因严重问题无法访问后(但BIOS还能识 别),数据的抢救方法,并讨论ext2&ext3格式分区的磁盘短读(short read)错误。首先约定:需要手动输入的字符用黑体字给出,其余的为终端输出。

如果使用ext2或ext3文件系统,可能会收到类似下面一些警告信息,该警告信息来自e2fsck实用程序:

e2fsck /dev/hda1
e2fsck: Attempt to read block from filesystem resulted in short read

如 果看到这个消息,首先想到可能是磁盘的主超级块损坏。而在创建文件系统的时候,mke2fs已经自动创建了磁盘的超级块的备份。可以告诉e2fsck程序 使用一个备用超级块检查文件系统。备用超级块一般创建于块8193、16384或32768,取决于磁盘的大小(可以使用mkfs.ext3 -n /dev/hda1查看)。假设是块大硬盘,则使用:

e2fsck -b 32768 /dev/hda1

如果是超级块的问题,则程序返回后,备用超级块被启用,磁盘恢复正常。如果提示下面的问题:
e2fsck: Attempt to read block from filesystem resulted in short read while checking ext3 journal for /dev/hda1
说明问题不是出在超级块,出自日志文件系统的日志。此时可以安全地删除ext3文件系统的日志:

tune2fs -f -O ^has_journal /dev/hda1

这样就删除了/dev/hda1文件系统上的日志,这时可以重新尝试挂载分区,必要的话可以重建日志系统(使用tune2fs -j /dev/xxx)。
如果tune2fs提示下面的错误:
tune2fs: Attempt to read block from filesystem resulted in short read while reading journal inode
则说明指向日志的inode坏了,意味着无法清除日志。这时可以尝试debugfs命令,它是ext2&3文件系统的调试器。也可以再次使用e2fsck,加上-c参数检查文件系统的坏块。至此,因为无法检查或修复问题磁盘上的文件系统,该拿出杀手锏了。

使用ddrescue克隆损坏的磁盘
如果磁盘因为坏块而妨碍了读取,可以使用一个原始的磁盘复制实用程序创建磁盘的一个副本。Unix/Linux系统自带了一个简单实用程序dd,它把一个文件/分区/磁盘复制到另一个(在第一个专题里用到过)。前提条件时必须在系统里添加一块容量不小于问题磁盘的新硬盘。
新硬盘准备就绪后,输入下面命令:

dd if=/dev/hda of=/dev/hdb conv=noerror,sync

上面的命令将坏磁盘(/dev/hda)复制到新磁盘(/dev/hdb),忽略读取时遇到的错误(noerror),当遇到不能访问的块时用适当数量的空值填充输出(sync)。
但 是dd有几个缺点:首先是速度太慢;然后是不显示进度信息,直到完成前它都是沉默的;不重新尝试失败的读取,这会减少能从坏盘恢复的数据量。因此在这里介 绍另一个软件——ddrescue,可以从 http://www.gnu.org/software/ddrescue/ddrescue.html 获取最新版(Fedora8用户可以直接用yum install dd_rescue安装) 。目前ddrescue最新版本是1.7,直接下载链接: http://ftp.gnu.org/gnu/ddrescue/ddrescue-1.7.tar.bz2
编译、安装后,可以使用下面命令完成相同的任务:

ddrescue --max-retries=-1 /dev/hda /dev/hdb


其中max-retries=-1参数表示无论遇到多少错误都不要停止。程序从hda读取数据并写到hdb中时,不断更新各项数据,可以方便地查看工作进行情况。
在ddrescue结束磁盘复制后,在新硬盘上运行e2fsck,以消除原始磁盘的坏块引起的文件系统错误。由于肯定会有大量错误,可以用-y参数运行e2fsck,指示e2fsck对每个问题都回答yes:

e2fsck -y /dev/hdb

此时,可以使用mount命令挂载文件系统,看看数据的恢复情况了。记得检查驱动器根目录下的lost+found文件夹,fsck把不能正确链接的文件和目录放在了这个文件夹里。

Linux Ext3文件系统超级块损坏后的修复  

# mount /dev/sde1 /foo
 
  mount: wrong fs type, bad option, bad superblock on /dev/sde1,
 
  or too many mounted file systems
 
  de问题。请问这种问题怎么能解决呢?
 
  回答:
 
  这个错误信息标识 /dev/sde1 设备上de ext3 文件系统de超级块损坏了,ext3 文件系统de元数据保存在超级块中。
 
  ext3 文件系统还you一些备份de超级块,可以尝试用备份de超级块加载 ext3 文件系统和修复 ext3 文件系统。
 
  备份de超级块信息可以通过以下命令获得,这个命令模拟 ext3 文件系统创建时de动作并打印出备份超级块de位置,给出de位置缺省是以4k为单位de,mount 在使用时需要为它提供以1k为单位de偏移,需要乘4:
 
  注意!一定要使用'-n'作为参数模拟 ext3 文件系统de创建而不是真de创建 ext3 文件系统
 
  # mkfs.ext3 -n /dev/hda7
 
  mke2fs 1.38 (30-Jun-2005)
 
  Filesystem label=
 
  OS type: Linux
 
  Block size=4096 (log=2)
 
  Fragment size=4096 (log=2)
 
  2198880 inodes, 4393738 blocks
 
  219686 blocks (5.00%) reserved for the super user
 
  First data block=0
 
  135 block groups
 
  32768 blocks per group, 32768 fragments per group
 
  16288 inodes per group
 
  Superblock backups stored on blocks:
 
  32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
 
  4096000
 
  使用备份de超级块来加载 ext3 文件系统de命令:
 
  语法: mount.ext3 -o sb=n               
 
  # mount.ext3 -o sb=131072 /dev/hda7 /media/hda7    
   
    说明:131072=32768*4     
 
  使用备份de超级块来修复 ext3 文件系统de命令
 
  语法:fsck.ext3 -b superblock
 
  # fsck.ext3 -b 32768 /dev/hda7



1,在测试SSD的时候,一服务器/dev/sda6文件系统损坏,

[root@ssd-test opt]# mkdir -p mysql

mkdir: cannot create directory `mysql': Read-only file system


2,mount挂载/dev/sda6提示bad superblock 错误,无法正常挂载:

[root@ssd-test opt]#umount /opt

[root@localhost ~]# mount /dev/sda6 /opt

mount: wrong fs type, bad option, bad superblock on /dev/sda6,

       or too many mounted file systems

3,尝试直接指定备用超级块来挂载分区。通过mkfs -n可以查看到备份超级块的位置:

[root@ssd-test /]# mkfs.ext3 -n /dev/sda6 

mke2fs 1.35 (28-Feb-2004)

Filesystem label=

OS type: Linux

Block size=4096 (log=2)

Fragment size=4096 (log=2)

8028160 inodes, 16028845 blocks

801442 blocks (5.00%) reserved for the super user

First data block=0

Maximum filesystem blocks=4294967296

490 block groups

32768 blocks per group, 32768 fragments per group

16384 inodes per group

Superblock backups stored on blocks: 

32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 

4096000, 7962624, 11239424


4,用查看到的备份超级块来挂载/dev/sda6,也无法成功:

[root@ssd-test /]# mount  -o sb=32768   /dev/sda6  /opt 

mount: wrong fs type, bad option, bad superblock on /dev/sda6,

       or too many mounted file systems


分区情况如下:

[root@localhost ~]# fdisk -l

Disk /dev/sda: 998.9 GB, 998999326720 bytes

255 heads, 63 sectors/track, 121454 cylinders

Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System

/dev/sda1   *           1          16      128488+  83  Linux

/dev/sda2              17        6390    51199155   83  Linux

/dev/sda3            6391       12764    51199155   83  Linux

/dev/sda4           12765      121454   873052425    5  Extended

/dev/sda5           12765       13796     8289508+  82  Linux swap

/dev/sda6           13797      121454   864762853+  83  Linux

 

6,直接fsck -y修复分区,修复成功:


[root@ssd-test /]# fsck.ext3 -y  /dev/sda6 

e2fsck 1.35 (28-Feb-2004)

Resize inode not valid.  Recreate? yes


/dev/sda6 contains a file system with errors, check forced.

Pass 1: Checking inodes, blocks, and sizes

Root inode is not a directory.  Clear? yes


Pass 2: Checking directory structure

Pass 3: Checking directory connectivity

Root inode not allocated.  Allocate? yes


/lost+found not found.  Create? yes


Pass 4: Checking reference counts

Pass 5: Checking group summary information

Block bitmap differences:  +(0--1539) +(32768--34306) +(65536--66049) +(98304--99842) +(131072--131585) +(163840--165378) +(196608--197121) +(229376--230914) +(262144--262657) +(294912--296450) +(327680--328193) +(360448--360961) +(393216--393729) +(425984--426497) +(458752--459265) +(491520--492033) +(524288--524801) +(557056--557569) +(589824--590337) +(622592--623105) +(655360--655873) +(688128--688641) +(720896--721409) +(753664--754177) +(786432--786945) +(819200--820738) +(851968--852481) +(884736--886274) +(917504--918017) +(950272--950785) +(983040--983553) +(1015808--1016321) +(1048576--1049089) +(1081344--1081857) +(1114112--1114625) +(1146880--1147393) +(1179648--1180161) +(1212416--1212929) +(1245184--1245697) +(1277952--1278465) +(1310720--1311233) +(1343488--1344001) +(1376256--1376769) +(1409024--1409537) +(1441792--1442305) +(1474560--1475073) +(1507328--1507841) +(1540096--1540609) +(1572864--1573377) +(1605632--1607170) +(1638400--1638913) +(1671168--1671681) +(1703936--1704449) +(1736704--1737217) +(1769472--1769985) +(1802240--1802753) +(1835008--1835521) +(1867776--1868289) +(1900544--1901057) +(1933312--1933825) +(1966080--1966593) +(1998848--1999361) +(2031616--2032129) +(2064384--2064897) +(2097152--2097665) +(2129920--2130433) +(2162688--2163201) +(2195456--2195969) +(2228224--2228737) +(2260992--2261505) +(2293760--2294273) +(2326528--2327041) +(2359296--2359809) +(2392064--2392577) +(2424832--2425345) +(2457600--2458113) +(2490368--2490881) +(2523136--2523649) +(2555904--2556417) +(2588672--2589185) +(2621440--2621953) +(2654208--2655746) +(2686976--2687489) +(2719744--2720257) +(2752512--2753025) +(2785280--2785793) +(2818048--2818561) +(2850816--2851329) +(2883584--2884097) +(2916352--2916865) +(2949120--2949633) +(2981888--2982401) +(3014656--3015169) +(3047424--3047937) +(3080192--3080705) +(3112960--3113473) +(3145728--3146241) +(3178496--3179009) +(3211264--3211777) +(3244032--3244545) +(3276800--3277313) +(3309568--3310081) +(3342336--3342849) +(3375104--3375617) +(3407872--3408385) +(3440640--3441153) +(3473408--3473921) +(3506176--3506689) +(3538944--3539457) +(3571712--3572225) +(3604480--3604993) +(3637248--3637761) +(3670016--3670529) +(3702784--3703297) +(3735552--3736065) +(3768320--3768833) +(3801088--3801601) +(3833856--3834369) +(3866624--3867137) +(3899392--3899905) +(3932160--3932673) +(3964928--3965441) +(3997696--3998209) +(4030464--4030977) +(4063232--4063745) +(4096000--4097538) +(4128768--4129281) +(4161536--4162049) +(4194304--4194817) +(4227072--4227585) +(4259840--4260353) +(4292608--4293121) +(4325376--4325889) +(4358144--4358657) +(4390912--4391425) +(4423680--4424193) +(4456448--4456961) +(4489216--4489729) +(4521984--4522497) +(4554752--4555265) +(4587520--4588033) +(4620288--4620801) +(4653056--4653569) +(4685824--4686337) +(4718592--4719105) +(4751360--4751873) +(4784128--4784641) +(4816896--4817409) +(4849664--4850177) +(4882432--4882945) +(4915200--4915713) +(4947968--4948481) +(4980736--4981249) +(5013504--5014017) +(5046272--5046785) +(5079040--5079553) +(5111808--5112321) +(5144576--5145089) +(5177344--5177857) +(5210112--5210625) +(5242880--5243393) +(5275648--5276161) +(5308416--5308929) +(5341184--5341697) +(5373952--5374465) +(5406720--5407233) +(5439488--5440001) +(5472256--5472769) +(5505024--5505537) +(5537792--5538305) +(5570560--5571073) +(5603328--5603841) +(5636096--5636609) +(5668864--5669377) +(5701632--5702145) +(5734400--5734913) +(5767168--5767681) +(5799936--5800449) +(5832704--5833217) +(5865472--5865985) +(5898240--5898753) +(5931008--5931521) +(5963776--5964289) +(5996544--5997057) +(6029312--6029825) +(6062080--6062593) +(6094848--6095361) +(6127616--6128129) +(6160384--6160897) +(6193152--6193665) +(6225920--6226433) +(6258688--6259201) +(6291456--6291969) +(6324224--6324737) +(6356992--6357505) +(6389760--6390273) +(6422528--6423041) +(6455296--6455809) +(6488064--6488577) +(6520832--6521345) +(6553600--6554113) +(6586368--6586881) +(6619136--6619649) +(6651904--6652417) +(6684672--6685185) +(6717440--6717953) +(6750208--6750721) +(6782976--6783489) +(6815744--6816257) +(6848512--6849025) +(6881280--6881793) +(6914048--6914561) +(6946816--6947329) +(6979584--6980097) +(7012352--7012865) +(7045120--7045633) +(7077888--7078401) +(7110656--7111169) +(7143424--7143937) +(7176192--7176705) +(7208960--7209473) +(7241728--7242241) +(7274496--7275009) +(7307264--7307777) +(7340032--7340545) +(7372800--7373313) +(7405568--7406081) +(7438336--7438849) +(7471104--7471617) +(7503872--7504385) +(7536640--7537153) +(7569408--7569921) +(7602176--7602689) +(7634944--7635457) +(7667712--7668225) +(7700480--7700993) +(7733248--7733761) +(7766016--7766529) +(7798784--7799297) +(7831552--7832065) +(7864320--7864833) +(7897088--7897601) +(7929856--7930369) +(7962624--7964162) +(7995392--7995905) +(8028160--8028673) +(8060928--8061441) +(8093696--8094209) +(8126464--8126977) +(8159232--8159745) +(8192000--8192513) +(8224768--8225281) +(8257536--8258049) +(8290304--8290817) +(8323072--8323585) +(8355840--8356353) +(8388608--8389121) +(8421376--8421889) +(8454144--8454657) +(8486912--8487425) +(8519680--8520193) +(8552448--8552961) +(8585216--8585729) +(8617984--8618497) +(8650752--8651265) +(8683520--8684033) +(8716288--8716801) +(8749056--8749569) +(8781824--8782337) +(8814592--8815105) +(8847360--8847873) +(8880128--8880641) +(8912896--8913409) +(8945664--8946177) +(8978432--8978945) +(9011200--9011713) +(9043968--9044481) +(9076736--9077249) +(9109504--9110017) +(9142272--9142785) +(9175040--9175553) +(9207808--9208321) +(9240576--9241089) +(9273344--9273857) +(9306112--9306625) +(9338880--9339393) +(9371648--9372161) +(9404416--9404929) +(9437184--9437697) +(9469952--9470465) +(9502720--9503233) +(9535488--9536001) +(9568256--9568769) +(9601024--9601537) +(9633792--9634305) +(9666560--9667073) +(9699328--9699841) +(9732096--9732609) +(9764864--9765377) +(9797632--9798145) +(9830400--9830913) +(9863168--9863681) +(9895936--9896449) +(9928704--9929217) +(9961472--9961985) +(9994240--9994753) +(10027008--10027521) +(10059776--10060289) +(10092544--10093057) +(10125312--10125825) +(10158080--10158593) +(10190848--10191361) +(10223616--10224129) +(10256384--10256897) +(10289152--10289665) +(10321920--10322433) +(10354688--10355201) +(10387456--10387969) +(10420224--10420737) +(10452992--10453505) +(10485760--10486273) +(10518528--10519041) +(10551296--10551809) +(10584064--10584577) +(10616832--10617345) +(10649600--10650113) +(10682368--10682881) +(10715136--10715649) +(10747904--10748417) +(10780672--10781185) +(10813440--10813953) +(10846208--10846721) +(10878976--10879489) +(10911744--10912257) +(10944512--10945025) +(10977280--10977793) +(11010048--11010561) +(11042816--11043329) +(11075584--11076097) +(11108352--11108865) +(11141120--11141633) +(11173888--11174401) +(11206656--11207169) +(11239424--11240962) +(11272192--11272705) +(11304960--11305473) +(11337728--11338241) +(11370496--11371009) +(11403264--11403777) +(11436032--11436545) +(11468800--11469313) +(11501568--11502081) +(11534336--11534849) +(11567104--11567617) +(11599872--11600385) +(11632640--11633153) +(11665408--11665921) +(11698176--11698689) +(11730944--11731457) +(11763712--11764225) +(11796480--11796993) +(11829248--11829761) +(11862016--11862529) +(11894784--11895297) +(11927552--11928065) +(11960320--11960833) +(11993088--11993601) +(12025856--12026369) +(12058624--12059137) +(12091392--12091905) +(12124160--12124673) +(12156928--12157441) +(12189696--12190209) +(12222464--12222977) +(12255232--12255745) +(12288000--12288513) +(12320768--12321281) +(12353536--12354049) +(12386304--12386817) +(12419072--12419585) +(12451840--12452353) +(12484608--12485121) +(12517376--12517889) +(12550144--12550657) +(12582912--12583425) +(12615680--12616193) +(12648448--12648961) +(12681216--12681729) +(12713984--12714497) +(12746752--12747265) +(12779520--12780033) +(12812288--12812801) +(12845056--12845569) +(12877824--12878337) +(12910592--12911105) +(12943360--12943873) +(12976128--12976641) +(13008896--13009409) +(13041664--13042177) +(13074432--13074945) +(13107200--13107713) +(13139968--13140481) +(13172736--13173249) +(13205504--13206017) +(13238272--13238785) +(13271040--13271553) +(13303808--13304321) +(13336576--13337089) +(13369344--13369857) +(13402112--13402625) +(13434880--13435393) +(13467648--13468161) +(13500416--13500929) +(13533184--13533697) +(13565952--13566465) +(13598720--13599233) +(13631488--13632001) +(13664256--13664769) +(13697024--13697537) +(13729792--13730305) +(13762560--13763073) +(13795328--13795841) +(13828096--13828609) +(13860864--13861377) +(13893632--13894145) +(13926400--13926913) +(13959168--13959681) +(13991936--13992449) +(14024704--14025217) +(14057472--14057985) +(14090240--14090753) +(14123008--14123521) +(14155776--14156289) +(14188544--14189057) +(14221312--14221825) +(14254080--14254593) +(14286848--14287361) +(14319616--14320129) +(14352384--14352897) +(14385152--14385665) +(14417920--14418433) +(14450688--14451201) +(14483456--14483969) +(14516224--14516737) +(14548992--14549505) +(14581760--14582273) +(14614528--14615041) +(14647296--14647809) +(14680064--14680577) +(14712832--14713345) +(14745600--14746113) +(14778368--14778881) +(14811136--14811649) +(14843904--14844417) +(14876672--14877185) +(14909440--14909953) +(14942208--14942721) +(14974976--14975489) +(15007744--15008257) +(15040512--15041025) +(15073280--15073793) +(15106048--15106561) +(15138816--15139329) +(15171584--15172097) +(15204352--15204865) +(15237120--15237633) +(15269888--15270401) +(15302656--15303169) +(15335424--15335937) +(15368192--15368705) +(15400960--15401473) +(15433728--15434241) +(15466496--15467009) +(15499264--15499777) +(15532032--15532545) +(15564800--15565313) +(15597568--15598081) +(15630336--15630849) +(15663104--15663617) +(15695872--15696385) +(15728640--15729153) +(15761408--15761921) +(15794176--15794689) +(15826944--15827457) +(15859712--15860225) +(15892480--15892993) +(15925248--15925761) +(15958016--15958529) +(15990784--15991297) +(16023552--16024065)

Fix? yes


Free blocks count wrong for group #0 (31227, counted=31226).

Fix? yes


Free blocks count wrong (15763658, counted=15763657).

Fix? yes


Inode bitmap differences:  +1 +(3--10)

Fix? yes


Free inodes count wrong for group #0 (16383, counted=16373).

Fix? yes


Directories count wrong for group #0 (1, counted=2).

Fix? yes


Free inodes count wrong (8028159, counted=8028149).

Fix? yes



/dev/sda6: ***** FILE SYSTEM WAS MODIFIED *****

/dev/sda6: 11/8028160 files (0.0% non-contiguous), 265188/16028845 blocks


可见修复成功

 

7,终于可以将分区挂载上了:

[root@ssd-test /]# mount /dev/sda6 /opt 

挂载正常

[root@ssd-test opt]# cd /opt

[root@ssd-test opt]# ls -l

total 4

drwx------  2 root root 4096 Oct 26 10:06 lost+found

[root@ssd-test opt]# mkdir -p tt

[root@ssd-test opt]# rm -rf  tt


文件权限正常,可以正常的创建和删除文件



Linux下查看分区的文件系统类型

Last modified on 2009-12-01

Linux支持的文件系统越来越多,如何区分不同分区上的文件系统类型?有如下方法可以参考(假定要确定文件系统类型的分区为sda1):

  1. 使用mount命令。mount命令会根据文件系统的超级块(superblock)自动识别分区的文件系统类型;如果无法识别会读取并匹配/etc/filesystems中的条目。
    # mount /dev/sda1 /mnt/disk # mount  or # cat /proc/mounts 
  2. 手工分析文件系统的超级块(superblock)。如果mount无法自动识别,只能靠我们自己了。粗略查看:
    # hexdump -C -n 32 /dev/sdc1 00000000  02 02 02 02 02 02 02 02  74 68 69 73 20 69 73 20  |........this is | 00000010  61 6e 20 6f 63 66 73 32  20 76 6f 6c 75 6d 65 00  |an ocfs2 volume.| 00000020 
    几乎可以确认sdc1上的文件系统是ocfs2。
    # hexdump -C -n 16 /dev/sda1 00000000  eb 52 90 4e 54 46 53 20  20 20 20 00 02 08 00 00  |.R.NTFS    .....| 00000010 
    很像NTFS。
    # hexdump -C -n 256 /dev/sda11 00000000  eb 58 90 6d 6b 64 6f 73  66 73 00 00 02 20 20 00  |.X.mkdosfs...  .| 00000010  02 00 00 00 00 f8 00 00  3f 00 ff 00 00 00 00 00  |........?.......| 00000020  02 68 54 02 42 25 00 00  00 00 00 00 02 00 00 00  |.hT.B%..........| 00000030  01 00 06 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| 00000040  00 00 29 ce 8f 7e 44 20  20 20 20 20 20 20 20 20  |..)..~D         | 00000050  20 20 46 41 54 33 32 20  20 20 0e 1f be 5b 7c ac  |  FAT32   ...[|.| 00000060  22 c0 74 0b 56 b4 0e bb  07 00 cd 10 5e eb f0 32  |".t.V.......^..2| 00000070  e4 cd 16 cd 19 eb fe 54  68 69 73 20 69 73 20 6e  |.......This is n| 00000080  6f 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 64 69  |ot a bootable di| 00000090  73 6b 2e 20 20 50 6c 65  61 73 65 20 69 6e 73 65  |sk.  Please inse| 000000a0  72 74 20 61 20 62 6f 6f  74 61 62 6c 65 20 66 6c  |rt a bootable fl| 000000b0  6f 70 70 79 20 61 6e 64  0d 0a 70 72 65 73 73 20  |oppy and..press | 000000c0  61 6e 79 20 6b 65 79 20  74 6f 20 74 72 79 20 61  |any key to try a| 000000d0  67 61 69 6e 20 2e 2e 2e  20 0d 0a 00 00 00 00 00  |gain ... .......| 000000e0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................| * 00000100 
    FAT32,肯定差不了。

    如果要精确匹配的话,需要了解每个文件系统的Magic signature以及保存的位置。如EXT2和EXT3的Magic signature是“53 ef”,保存在文件系统开始以后0x0438的位置。



再说 Linux 下恢复 EXT3 Superblock

前几天遇到一个 Linux Ext3 文件系统超级块(Superblock)错误问题.

.... bad superblock on /dev/hda4

一个同事做的恢复, 结果把数据都抹掉了. 后来想想, 当时的直接 fsck 的恢复方法不对. 正确的方法应该是这样的:
1 获取错误的出错磁盘(或者设备)块的大小.
有很多种方法可以得到. 比如,

# tune2fs -l /dev/hda4

其实大多数情况下是 1 K.


2 对当前的出错磁盘备份.
恢复超级块(Superblock)的过程其实也是一个有风险的过程.能做备份就做好备份. 如果有其他空闲设备, 用 dd 命令把该设备上的内容备份起来.


3 一般来说, 超级块错基本上也就是主超级块错, 在 Ext2/Ext3 文件系统创建的时候, 会同时在屏幕上提示我们在已经在几个地方备份了超级块.那么怎么发现这些超级块在什么地方呢? 我们看看帮助信息:

-b superblock
Instead of using the normal superblock, use an alternative
superblock specified by superblock. This option is normally
used when the primary superblock has been corrupted. The loca-
tion of the backup superblock is dependent on the filesystem’s
blocksize. For filesystems with 1k blocksizes, a backup
superblock can be found at block 8193
; for filesystems with 2k
blocksizes, at block 16384; and for 4k blocksizes, at block
32768
.
Additional backup superblocks can be determined by using the
mke2fs program using the -n option to print out where the
superblocks were created. The -b option to mke2fs, which spec-
ifies blocksize of the filesystem must be specified in order for
the superblock locations that are printed out to be accurate.
If an alternative superblock is specified and the filesystem is
not opened read-only, e2fsck will make sure that the primary
superblock is updated appropriately upon completion of the
filesystem check.

4 开始恢复.如果文件系统块大小为1K, 则我们可以用如下命令恢复:

# /sbin/fsck.ext3 -b 8193 /dev/hda4

如果这个备用块(8193)也有问题,那么 可以尝试 24577(8192*3+1) ,或者是 40961 (8192*5+1).


可能您也会看出来,超级块的保存位置是按照 1,3,5,7 这样的规律的. 具体的位置在 BlockSize(8192)*N+1. 在超过 500M 的空间上是这样的规律.小于 500M 的我不知道.那位知道告诉我一下,谢谢.

1) 获取超级块位置

前文说过超级块的位置,对于一个未知的 Ext3 文件系统,也可以用 fsck 模拟对设备的格式化,输出的内容中会列出 Superblock 的位置。命令开关是 “-N”. 
Testdisk是一款超强的开源文件系统恢复工具,通过它也很容易检查到超级块的信息以及如何恢复,很关键的一点是,这个工具能检查到”可用”的超级块信息

有关分区表信息

有的时候,也有可能是分区表信息损坏。fdisk -l /dev/hdx 会提示该设备上没有任何分区信息。gpart 这个小工具恢复分区表比较有效。当然,前面介绍的 Testdisk 也能做到这一点,如果该设备上只有一个文件系统,那么直接 fdisk 处理一下也是可行的。

恢复 Ext 文件系统上删除的文件

Linux / Unix 没有 Windows 回收站这个概念,rm -rf 有的时候会造成一定的灾难。个别的时候,e2undel 能派上用场。


testdisk恢复删除的分区

1.为了顺利安装testdisk 工具,安装开发四个组包(正确的配制yum)。

yum groupinstall " Development Libraries " -y,注意一定要加引号。

yum groupinstall " Development Tools " -y

yum groupinstall " Legacy Software Development " -y

yum groupinstall " X Software Development "  -y

对应成中文就是:Development Libraries 开发库; Development Tools 开发工具;

Legacy Software Development 老的软件开发; X Software Development X软件开发;

查看分区表。发现少了一个主分区。

Linux Ext3文件系统超级块损坏后的修复 - zhuzhu - 五事九思 (大连Linux主机维护)
 

2.安装testdisk

[root@localhost ~]# tar -jxvf testdisk-6.8.tar.bz2 

[root@localhost ~]# cd testdisk-6.8

Linux Ext3文件系统超级块损坏后的修复 - zhuzhu - 五事九思 (大连Linux主机维护)
 

3.查看configure帮助

[root@localhost testdisk-6.8]# ./configure --help |less

预编译。     

[root@localhost testdisk-6.8]# ./configure   --prefix=/usr/local/sbin   //指明安装路径。

4.编译。产生头文件,库文件,可执行文件,说明文件。

[root@localhost testdisk-6.8]# make && make install

启动 testdisk: 

[root@localhost sbin]# ls

man  photorec  sbin  share  testdisk  testdisk.log

[root@localhost sbin]# ./testdisk

第一页屏幕要求选择如何处理记录信息 

Linux Ext3文件系统超级块损坏后的修复 - zhuzhu - 五事九思 (大连Linux主机维护)
 

第二页要求选择磁盘: 

  TestDisk is free software, and

comes with ABSOLUTELY NO WARRANTY.

Select a media (use Arrow keys, then press Enter):

Disk /dev/hdc - 3005 MB / 2866 MiB (RO)

Disk /dev/sda - 21 GB / 19 GiB

[Proceed ]  [  Quit  ]

Linux Ext3文件系统超级块损坏后的修复 - zhuzhu - 五事九思 (大连Linux主机维护)
 

第三页选择分区表类型,一般都是 Intel/PC: 

Disk /dev/sda - 21 GB / 19 GiB

Please select the partition table type, press Enter when done.

[Intel  ]  Intel/PC partition

[Mac    ]  Apple partition map

[None   ]  Non partitioned media

[Sun    ]  Sun Solaris partition

[XBox   ]  XBox partition

[Return ]  Return to disk selection

Note: Do NOT select 'None' for media with only a single partition. It's veryrare for a drive to be 'N

现在可以 Analyse 分析了: 

Disk /dev/sda - 21 GB / 19 GiB - CHS 2610 255 63

[ Analyse  ]  Analyse current partition structure and search for lost partitions

[ Advanced ]  Filesystem Utils

[ Geometry ]  Change disk geometry

[ Options  ]  Modify options

[ MBR Code ]  Write TestDisk MBR code to first sector

[ Delete   ]  Delete all data in the partition table

[ Quit     ]  Return to disk selection

Note: Correct disk geometry is required for a successful recovery. 'Analyse'

process may give some warnings if it thinks the logical geometry is mismatched.

列出现有的分区表内容,并提示继续还是备份,这里只有一个分区,实际上另外一个 Linux 分区被删了...所以 1661 之前那些空间就是寻找的目标: 

Disk /dev/sda - 21 GB / 19 GiB - CHS 2610 255 63

Current partition structure:

     Partition                  Start        End    Size in sectors

 1 * Linux                    0   1  1   130 254 63    2104452 [/boot]

 3 P Linux Swap            1661   0  1  1791 254 63    2104515

Should TestDisk search for partition created under Vista ? [Y/N] (answer Yes if

unsure)y

Linux Ext3文件系统超级块损坏后的修复 - zhuzhu - 五事九思 (大连Linux主机维护)
 

Disk /dev/sda - 21 GB / 20 GiB - CHS 2611 255 63

     Partition               Start        End    Size in sectors

* Linux                    0   1  1   130 254 63    2104452 [/boot]

P Linux                  131   0  1  1660 254 63   24579450 [/]

P Linux Swap            1661   0  1  1791 254 63    2104515

Linux Ext3文件系统超级块损坏后的修复 - zhuzhu - 五事九思 (大连Linux主机维护)
 

Structure: Ok.  Use Up/Down Arrow keys to select partition.

Use Left/Right Arrow keys to CHANGE partition characteristics:

*=Primary bootable  P=Primary  L=Logical  E=Extended  D=Deleted

Keys A: add partition, L: load backup, T: change type, P: list files,

     Enter: to continue

EXT3 Large file Sparse superblock Recover, 1077 MB / 1027 MiB

*=Primary bootable  P=Primary  L=Logical  E=Extended  D=Deleted

[Proceed ]  [ Backup ]

使用左右方向键将其调整成以前的状态 P(主分区),然后 Enter 继续: 

Disk /dev/sda - 21 GB / 20 GiB - CHS 2611 255 63

     Partition                  Start        End    Size in sectors

 1 * Linux                    0   1  1   130 254 63    2104452 [/boot]

 2 P Linux                  131   0  1  1660 254 63   24579450 [/]

 3 P Linux Swap            1661   0  1  1791 254 63    2104515

[  Quit  ]  [Search! ]  [ Write  ]

                       Write partition structure to disk

选择 Write 保存 

Write partition table, confirm ? (Y/N)

退出,reboot  

Linux Ext3文件系统超级块损坏后的修复 - zhuzhu - 五事九思 (大连Linux主机维护)
 


http://wenku.baidu.com/view/cc0827284b73f242336c5f70.html

http://daibaiyang119.blog.51cto.com/3145591/647942

http://bbs.chinaunix.net/thread-2025521-1-1.html

原创粉丝点击