Programming Life
相信不能相信的,完成不能完成的。矛盾,就象征进步。
posts - 151,comments - 7,trackbacks - 0
昨天晚上在信息港的机房里鼓捣到凌晨4点多,帮助朋友修复损坏的硬盘数据。由于当时没有详细的记录,凭回忆先记录下整个过程,也许有错误的地方,请不吝指正!

现象和环境:REDHAT FC4,一块36G的SCSI硬盘(/dev/sdc)无法mount,fdisk也看不到分区信息。另外一块该盘重要数据的备份盘(9G SCSI硬盘,/dev/sdb)也是同样的现象。均为独立磁盘,没有RAID设置。(怎么这么巧?数据盘和备份盘同时坏掉了)

整个尝试修复的过程大致如下:

尝试查看分区信息

尽管事先被告知fdisk看不到分区信息,还是固执的尝试了一下:-)

fdiks -/dev/sdc

 

果然什么样都看不到。但是,系统启动的时候正确的列出了磁盘的相关信息(大小等),而且fdisk也能够列出磁盘大小等相关物理信息,只是没有分区信息。因此初步判断,是磁盘的分区表丢失,不一定是磁盘物理损坏。

尝试使用parted查看和恢复分区信息

parted /dev/sdc

print自然也列不出分区信息,好在管理员还有一块分区完全一致的硬盘(是早先通过dd完全复制的),于是挂上这块clone盘,获得了sdc的分区信息,记录下来(注:这里可以有更好的处理方法,见下面的gpart部分),尝试使用parted恢复分区信息:

rescue
start
? 0
end ? 4G

上面是parted尝试根据给出起始尺寸和结束尺寸,在这个范围内寻找分区标志符,以决定是否重新写入分区表。可是奇怪的是,总共6个分区,parted只能按照这个办法找回一个分区,其他的都宣告一个提示,大致的意思是“分区结束符位于开始符之前”。

也尝试使用parted的mkpart重新创建分区表,但是失败,提示不能创建更多的主分区(难道分区信息没有丢失吗?为什么不允许创建分区信息呢?)

使用gpart尝试找回分区信息

parted没有成功的找回分区信息,于是转而尝试gpart:

gpart /dev/sdc

可喜的是,gpart经过一段时间的搜寻,列出了看起来有道理的分区信息!但是,按照管理员提供的clone盘,应该是找到6个分区(包括swap)才对,但是gpart只找到了4个。经过分析发现, gpart原来只是找到了主分区分析,扩展分区和逻辑分区没有找到。

尝试通过

gpart -/dev/sdc /dev/sdc

 

将分区信息重新写入到损坏盘中。虽然fdisk, parted可以列出分区信息,但是还是无法mount。于是怀疑文件系统也遭到了损坏。

使用reiserfsck/e2fsck修复文件系统

管理员告知,/dev/sdc的文件系统应该是reiserfs,于是尝试使用reiserfsck检查和修复文件系统(事后证明,这是一个严重的错误!)

reiserfsck --check /dev/sdc1
reiserfsck 
--fix-fixable /dev/sdc1
reiserfsck 
--rebuild-sb /dev/sdc1
reiserfsck 
--rebuild-tree /dev/sdc1

 


但是,一番修复之后,发现仍然无法mount!对比clone盘(早就应该比对了,失策!),才发现原来文件系统是ext3!这一番使用reiserfsck的折腾,估计/dev/sdc1是彻底完蛋了。好在知道/dev/sdc1是一个没有重要数据的分区,可以把用来试验。

于是,又使用e2fsck(fsck.ext3)尝试修复数据:

fsck.ext3 /dev/sdc1

 

告知找不到superblock,于是:

fsck.ext3 -8193 /dev/sdc1

 

尝试找回superblock,但是失败!于是在另外几个保存superblock的地方继续尝试:

fsck.ext3 -24577 /dev/sdc1 
fsck
.ext3 -40961 /dev/sdc1 
fsck
.ext3 -57345 /dev/sdc1 
fsck
.ext3 -73729 /dev/sdc1

 


但是,均告失败!没有找回superblock,极度失望!

小技巧:如何知道superblock存储的位置?

dd if=/dev/zero of=/tmp/test bs=1024  count=160000
160000+0 records in
160000+0 records out
163840000 bytes (164 MB) copied, 4.35857 seconds, 37.6 MB/s

mke2fs 
/tmp/test
 
/tmp/test is not a block special device.
Proceed anyway
? (y,n) y
Filesystem label
=
OS type
: Linux
Block size
=1024 (log=0)
Fragment size
=1024 (log=0)
40000 inodes, 160000 blocks
8000 blocks (5.00%) reserved for the super user
First data block
=1
Maximum filesystem blocks
=67371008
20 block groups
8192 blocks per group, 8192 fragments per group
2000 inodes per group
Superblock backups stored on blocks
:
        
8193, 24577, 40961, 57345, 73729

Writing inode tables
: done
Writing superblocks and filesystem accounting information
: done

This filesystem will be automatically checked every 
35 mounts or
180 days, whichever comes first.  Use tune2fs -c or -i to override.

 


尝试live cd

万般无奈,下载knoppix live cd,启动起来,居然认出并成功加载了/dev/sdb (备份盘)!于是把备份数据先弄下来再说。

但是,knoppix没有认出/dev/sdc,时间已经临近凌晨4点,这个盘暂时被宣布死缓。


经验教训

  • 系统安装时,一定要记录磁盘分区的相关信息,包括分区情况,所使用的参数(比如块大小)
  • 常规备份是万万不能缺少的。对于系统管理员而言,系统崩溃是迟早要面临的事情,没有侥幸可言。

http://blog.guoshuang.com/showlog.asp?log_id=4213
http://www.yeeyan.com/articles/view/888888/4137

1. ext2ifs

这个工具与explore2fs都是John Newbigin使用Delphi写的,explore2fs Copyright (C) 2000,Ext2IFS v0.3 Copyright (C) 2004,由此也可以推测下哪个程序更完善,ext2ifs默认支持ext分区的写操作。

下载地址:http://uranus.it.swin.edu.au/~jn/li…ext2ifs-0.3.zip

http://uranus.it.swin.edu.au/~jn/linux/ext2ifs.htm

2.Paragon Ext2FS Anywhere

帮助你在 Windows 下访问 Linux 分区,把其作为正常逻辑器使用。提供对隐藏或者刚刚被创建的和格式化的 FAT/NTFS 分区。将创建,删除,格式,隐藏,在 Windows 下面取消隐藏初选,逻辑值或者扩展逻辑分区。你能够也马上改变的驱动器盘符。支持ext2/3读写,但是对超过4G的文件写入存在不可预知的问题。

3.explore2fs

使用相当简单,下载后解压缩,执行explore2fs.exe,程序会自动搜索ext2、ext3分区。

4.Total Commander加Ext2+Reiser 插件

Total Commander 网上很多,自行搜索一下吧。

Ext2+Reiser 插件下载

下载地址:http://ghisler.fileburst.com/fsplugins/ex2fs.zip

http://www.ghisler.com/plugins.htm 有许多插件可下载使用。

下载并安装Total Commander,下载并解压缩Ext2+Reiser插件中的output目录到Total Commander的安装目录内(或硬盘的其他固定位置,想使用就不能删除),运行Total Commander,选择配置--插件--文件系统插件--配置--添加--找到ex2fs.wfx并添加,最后“确定”插件添加成功。

5.Ext2 Installable File System(另一个ext2ifs)

两个软件不是一个作者,不过实现的原理应该相似,驱动通用。这个软件安装后就能使用ext分区,可读写,但更改分区盘符很不方便,需要先到控制面板卸载,重启后重新安装程序重设盘符。

http://www.fs-driver.org/download.html

6.Paragon Mount Everything

和Paragon Ext2FS Anywhere这个软件是同一个公司出品,功能极其相似,Paragon Mount Everything Professional里已经包含了Paragon Ext2FS Anywhere,当然卖的价格也高了10美元。支持ext2/3读写,但是对超过4G的文件写入存在不可预知的问题。

引用:

Paragon Mount Everything Professional 是一款功能强劲的磁盘管理工具,程序

可以让你挂载各种系统格式下文件的软件,让不同系统下的文件可以互相访问。

Mount Everything 用于解除各个操作系统(DOS,Windows,Linux)访问彼此文件

系统的分区,使得访问计算机上别的操作系统的文件系统如同访问自己本来的文件系

统一样方便,可以自如的浏览、读写、创建甚至运行在各个分区的文件。

-支持NTFS1.2 - 3.1(Windows NT/2000/XP);

-支持可压缩的NTFS;

-支持Ex2和Ext3文件系统;

-在各中环境-Windows、DOS、Linux-下都支持大于4GB的分区;

-Windows平台支持:Windows 95/98/ME, Windows NT/2000 Workstation/Pro,

Windows XP;

-任何Windows版本都可以无限制的访问Ext2/3FS和NTFS;

-DOS下对NTFS只读;

-Linux下对NTFS只读;

-在任何环境都支持基于脚本的批处理;

-Windows下提供了各种基本的分区功能;

-WIndows和DOS下随意改变启动器号;

-可建立能够访问NTFS以及其他各种移动存贮设备的DOS启动盘;

-提供了一个启动光盘,可直接进入DOS或Linux,并且访问NTFS(只读);

7.Ext2Fsd

安装后使用mount命令对ext分区挂载卸载,可读写。

下载地址: http://switch.dl.sourceforge.net/so…xt2Fsd-0.25.exe

8、rfstool

命令行工具

http://p-nand-q.com/download/rfstool.html

下载地址:http://freshmeat.net/redir/rfstool/…fstool-0.14.zip

9、rfsgui-2.2

使用rfstool功能,gui界面。

下载地址:http://www.wolfsheep.com/map/rfsgui/rfsgui-2.2.zip

10、YAReG

也是使用rfstool功能,gui界面,需.net framework的支持

http://yareg.akucom.de/

11.ReiserDriver Pre-release Version 2

下载地址:http://switch.dl.sourceforge.net/so…-release.v2.zip

12.R-studio

功能超强的数据恢复、反删除工具,采用全新恢复技术,为使用 FAT12/16/32、NTFS、NTFS5(Windows 2000系统)和Ext2FS(Linux系统)分区的磁盘提供完整数据维护解决方案!同时提供对本地和网络磁盘的支持,此外大量参数设置让高级用户获得最佳恢复效果。具体功能有:采用Windows资源管理器操作界面;通过网络恢复远程数据(远程计算机可运行 Win95/98/ME/NT/2000/XP、Linux、UNIX系统);支持FAT12/16/32、NTFS、NTFS5和Ext2FS文件系统;能够重建损毁的RAID阵列;为磁盘、分区、目录生成镜像文件;恢复删除分区上的文件、加密文件(NTFS 5)、数据流(NTFS、NTFS 5);恢复FDISK或其它磁盘工具删除过得数据、病毒破坏的数据、MBR破坏后的数据;识别特定文件名;把数据保存到任何磁盘;浏览、编辑文件或磁盘内容等等。

上面列出的工具只是比较常见的,还有不少WINDOWS下可访问LINUX分区的工具,这得益于微软的IFS Kit(The primary goal of the Microsoft Windows Installable File System (IFS) Kit is to provide all of the materials necessary to design, build, and debug file systems and file system filter drivers for Windows 2000 and later operating systems.)想看了解更多不妨到这里去看看:

http://www.microsoft.com/taiwan/whdc/devtools/ifskit/default.mspx

WinAllFS

EXT2FSD

posted on 2008-11-13 16:14 Prog 阅读(12398) 评论(0)  编辑 收藏 引用 网摘 所属分类: Linux

只有注册用户登录后才能发表评论。
网站导航: