📄 00000009.htm
字号:
的地址表写入索引节点的地址表中(注意间址问题),并根据数据块 <BR> 个数和最后一块中有效数据长度计算出文件大小,写入i节点的 <BR> di_size字段。 <BR> <BR> ⑸回写系统的索引节点表即可。 <BR> <BR> 需要说明的是,第一,系统分配数据块的算法因不同的UNIX <BR> 版本而不同;第二,有的UNIX如SCO UNIX 5.0版,其空闲数据块的 <BR> 分配和回收是使用一种动态链表的数据结构来实现的,它们的文 <BR> 件恢复更加容易,只要在空闲链表中的表尾去寻找即可,笔者另 <BR> 行描述。 <BR> <BR> 2. 根据内容恢复。 <BR> <BR> 若现场已被破坏,即硬盘发生过写操作,那么只好根据内容 <BR> 来恢复。而且,由于UNIX是一个多进程、多用户系统,它每一次 <BR> 开关机或硬件、通讯故障等都会记录系统日志、.sh_history等,硬盘 <BR> 现场被破坏可能性极大。因此讨论按内容恢复的方法具有更大的 <BR> 实用价值。笔者经过实际探索得出下列四种恢复策略供参考。 <BR> <BR> ⑴关键字搜索法 <BR> <BR> 如果知道被删除的文件内容中若干字节的内容,而且该文件 <BR> 长度又不超过一个磁盘块,那么可以在整个文件系统中搜索这一 <BR> 字节串,得出一个文件所在的数据块,将它们的块号填入一个i节 <BR> 点,即可恢复一个文件,搜索文件系统的算法很简单,说明如 <BR> 下: <BR> <BR> a. #df -k 确定文件系统的设备文件名(如/dev/root) <BR> <BR> b.用下述函数搜索,若成功,返回数据块号,反之返回-1。其 <BR> 中fsname是文件系统的设备名,如/dev/root,comp()参数是实现搜索条 <BR> 件的函数。 <BR> <BR> long searchfs(char *fsname , int comp()) <BR> <BR> { <BR> <BR> FILE *fp; <BR> <BR> char buf[1024]; <BR> <BR> long i=0; <BR> <BR> fp=fopen(fsname,"r"); <BR> <BR> while (!feof(fp)) <BR> <BR> { <BR> <BR> fread(buf,1024,1,fp); <BR> <BR> if (comp()) /* 检查是否符合搜索条件 */ <BR> <BR> return i; /* 若成功返回块号 */ <BR> <BR> i++; <BR> <BR> } <BR> <BR> fclose(fp); <BR> <BR> return -1; /* 未找到符合条件的块,返回-1*/ <BR> <BR> } <BR> <BR> ⑵精确长度搜索法 <BR> <BR> 如果知道被删除文件的精确长度(字节数),那么可根据一个数 <BR> 据块的大小,计算出文件的最后一个数据块中数据的精确长度, <BR> 该数据块中其他字节必然是全0。根据这一条件,通过搜索整个文 <BR> 件系统,找出其中符合条件的数据块,若出现多个块符合要求, <BR> 则还需要根据其他条件区分。但不管怎样,根据精确长度分析也 <BR> 是恢复数据的一个策略。 <BR> <BR> ⑶内容关联法 <BR> <BR> 如果知道文件内容中存在某种可实现的关联,例如文件的校 <BR> 验和,或者文件内容的某种上下文关系,那么也可通过搜索整个 <BR> 文件系统,通过反复尝试寻找符合关联条件的磁盘数据块,进而 <BR> 恢复一个文件。 <BR> <BR> ⑷环境比较法 <BR> <BR> 如果知道删除文件所在的文件系统的安装过程,那么,另行 <BR> 找一台完全相的机器,按原来完全相同的步骤安装相同版本的 <BR> UNIX和相应的其他软件,可以想象,新的机器环境会与原来的环 <BR> 境基本相同,比较两个机器上相同文件系统的内容,可以推断出 <BR> 被删除文件的大致位置,至少可以大大减少查找的范围,一旦查 <BR> 找的范围足够小时,可以用逐个观察和尝试的方法结合其他条件 <BR> 恢复数据,降低恢复的难度,增加恢复的可靠性。 <BR> <BR> UNIX系统下文件系统恢复的具体实现依赖于不同操作系统和 <BR> 不同版本的具体文件系统结构和磁盘块分配算法。本文试图总结 <BR> 出一种一般性的思路和策略,限于篇幅,不能详细讨论它们的具 <BR> 体实现过程。 <BR> <BR>-- <BR> <BR>※ 来源:·BBS 水木清华站 smth.org·[FROM: 159.226.41.166] <BR><CENTER><H1>BBS水木清华站∶精华区</H1></CENTER></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -