当前位置:Linux教程 - Linux业界 - Unix系统下的文件恢复

Unix系统下的文件恢复

熊雄

Unix操作系统自七十年代初在Bell实验室诞生以来,以其高效率、良好的开放性、安全性和稳定性深受用户的欢迎,到目前历经三十余年市场风云变换,依然在企业级操作系统市场上占据巨大份额。特别是与其他主流操作系统相比,Unix系统突出的稳定性和安全性使其成为数据服务器或者文件服务器的首选操作系统,承担着大部分企业的关键业务。

目前能够威胁Unix系统平台的病毒并不多见,而Unix完善的文件系统也使得由于系统崩溃等软件故障造成的数据丢失并不多见。但是由于多年来始终面向企业级用户,Unix的用户界面友好程度和Windows系列平台相比还有一定差距,许多系统管理的任务还需要通过命令行的方式完成,而且能够完全通晓Unix系统管理命令及其选项的专业人员也不多,所以因误操作造成数据丢失的情况屡屡发生。特别是由于Unix系统的超级账号拥有无限的权利,所以如果是使用超级账号的系统管理员进行了误操作,可能造成的数据丢失是非常巨大的。此外,对Unix系统来说,由于突然掉电等原因造成系统不正常退出而发生的数据文件破坏要比在Windows系统下严重得多。所以,研究如何在Unix系统下查找和恢复丢失文件是非常实用和有意义的。但是Unix的磁盘格式和文件系统格式并不为人所熟知,我们在市场上很少见到能够在Unix系统下进行文件恢复的技术和产品。本文通过分析Unix系统的磁盘和文件系统格式,向大家推荐一款能够在这种格式下进行文件恢复的有效工具——FinalData。

Unix系统在发展过程中出现了非常多的分支和变种,其中比较重要的是AT&T公司开发的Unix System V和加州大学伯克利分校开发的BSD Unix。许多Unix平台硬件厂商都开发了自己的Unix版本,但这些Unix版本都是以System V或者BSD为蓝本发展变化来的,如IBM公司的AIX系统、SUN公司的Solaris系统、惠普公司的HP-UX系统、SGI公司的IRIX系统及DEC公司(现已被康柏收购)的DEC Unix系统等。九十年代初诞生的Linux操作系统和Unix系统渊源很深,在很多方面也借鉴了Unix系统的设计思想。所以Linux与Unix系统在磁盘结构和文件系统结构上大同小异,FinalData在这些系统中的使用具有普遍适用性。下面我们将以SUN Solaris系统为例进行分析讨论。


图1

Unix的文件系统和Windows的文件系统一样是采用树状分级目录结构。但在Windows中每一个逻辑分区都是一棵独立的目录树(即都从根目录开始),而在Unix系统中只有一棵完整的目录树。这棵目录树缺省由主磁盘的第一个分区(类似Windows中的C驱动器)承载,而本磁盘上的其他分区及其他磁盘上的分区将安装在目录树的不同节点上,图1是一个Unix文件系统的可能的目录树结构。普通用户通常只需要了解目录信息而无需关心磁盘和分区的情况,但是作为管理员在进行日常系统维护工作和试图恢复丢失的文件时,必须清楚文件和目录具体所在的磁盘及分区位置。 Unix系统采用I节点表来记录文件信息。一个典型的Unix磁盘分区结构如图2所示。


图2

可以看到,有关文件的详细索引信息都记录在I节点表中,进行文件恢复的关键在于查找和修复I节点表中的信息。下面先讨论可能造成文件破坏的原因和一些常规的文件系统维护方法。

除了误操作而删除文件以外(对操作系统来说误删除和正常的文件删除是没有任何区别的),造成文件丢失的最大原因在于系统的不正常退出。这主要是由于在系统运行中,为了提高文件读写效率,很多的修改信息及I节点表内容会暂时保存在内存或者Cache(高速缓存)中,等到CPU及其他资源空闲时再向硬盘回写。突然的退出(如掉电等原因造成)可能导致I节点表内容和硬盘文件不一致而造成文件丢失或者不可用。Unix系统在启动时通常都会进行文件一致性检查,即对I节点表内容和磁盘文件系统进行检查和修复。当Unix系统不能自动进行文件一致性检查时,我们也可以通过“fsck”命令手动进行文件系统修复(关于fsck命令的详细用法和各选项含义可以通过Unix系统的使用手册查看)。

经常进行文件系统备份和磁盘备份是保障数据安全的良好习惯。Unix系统本身带有文件系统备份和磁盘备份的命令。用户可以通过调用ufsdump和ufsrestore命令进行文件系统的备份和恢复;也可以调用dd和volcopy命令进行磁盘内容的备份。

当我们在Windows系统中删除一个文件时,仅仅是目录入口中相应文件的记录项所保留的文件名的首字母被改成一个特殊的ASCII码“E5h”,操作系统即认为该文件已被删除,而文件的其他信息并未被破坏。所以在Windows中,我们只需要在目录入口中查找“E5h”字符,就可以找到被删除文件的大部分相关信息,从而把文件恢复出来。但是在Unix系统中,当删除一个文件时,该文件所对应的I节点记录被完全清除,所以如果事先没有做任何备份,要想把文件完全恢复出来是非常困难的。

冠群联想软件公司新推出的数据恢复工具FinalData不仅可以帮助用户进行Windows系统下的数据恢复,而且是目前仅有的可以支持Unix系统下的数据恢复的专业工具。

FinalData可以帮助用户进行I节点表的备份。这种备份不同于通过ufsdump等命令进行备份,也不同于一些专用存储备份软件所提供的备份。因为它只备份I节点表而不是文件系统本身或者文件内容,所以占用资源非常少,备份速度快,对系统性能几乎没有影响,例如在SUN Ultra10工作站上对12GB的文件系统进行备份,耗时大约10秒钟,占用磁盘空间不足200KB。由于文件删除只是删除文件对应的I节点表,文件内容依然存在,所以利用这种对I节点表的备份,在绝大多数情况下可以帮助我们完整恢复数据。而且由于这种备份资源占用非常少,我们可以通过Unix提供的cron命令,让系统在规定的时间自动进行备份,当发现文件丢失之后,利用丢失前备份的I节点表我们就可以轻松地把文件恢复回来。

在大多数情况下普通用户没有养成数据备份的良好习惯,或者备份的时间间隔过长,难以恢复最近生成或者改动过的数据。FinalData还提供了一个删除检测功能。当Unix系统启动时,一个非常小的后台进程会被自动启动并驻留在内存中,监视用户对磁盘的写操作。当用户删除一个文件或者目录时,该进程会自动抽取一些关键信息予以保留。通过利用这些保留的关键信息,FinalData可以很方便地恢复丢失的数据。

如果事先既没有做任何备份,也没有提前预装FinalData,那么恢复丢失的数据就变得非常困难。在这种情况下,利用FinalData软件,我们有两种方式可以进行文件恢复。其一是完整执行FinalData的磁盘扫描过程。这一过程可能会花费较长的时间(大约几小时,根据磁盘容量大小而有所变化),但是通过磁盘扫描可以从磁盘上识别出大多数丢失的数据文件。使用这种方法的缺点在于由于I节点表被删除,诸如文件名、创建和访问时间、原始目录位置等信息都被破坏,所以找到的文件都以起始存放簇号作为缺省文件名,我们很难从所磁盘扫描识别出的成百上千个被删除的文件中挑出我们需要恢复的文件。另一种方法建立在对丢失的文件内容有一定了解的基础上,通过FinalData的磁盘浏览器,我们可以直接查看指定位置的磁盘内容。在磁盘浏览器的查找功能中键入丢失的文件中比较特殊的字符串,磁盘浏览器可以在整个磁盘范围内查找该字符串,如图3所示,在磁盘上查找“CALEGEND”字符串。


图3

当我们利用查找功能找到磁盘上保存的相应字符串后,就可以从磁盘浏览器中查看该位置附近的磁盘内容。

从磁盘浏览器中可以看到该文件存储在磁盘上的全部内容。我们可以通过鼠标从磁盘浏览器中直接选择需要恢复的文件内容,把它们保存到一个新建文件中去,就完成了对该文件的恢复。这种方法的限制在于必须对文件内容有一定的了解,而且能够恢复的文件格式限于ASCII码文件。

从以上的恢复方法可以看出,即使使用FinalData这样的专业工具,在没有预装、没有任何备份的情况下完全恢复原有文件也是相当困难的。作为Unix系统管理员或者对数据安全非常关心的用户,养成良好的数据备份习惯,以及预先安装类似FinalData这样的专业恢复工具,是维护数据安全的重要保障。