网站公告列表

没有公告

加入收藏
设为首页
联系站长
轻松学电脑 >> 操作系统 >> 更多教程 >> UNIX系统被删文件的恢复策略
双击滚屏阅读

UNIX系统被删文件的恢复策略
程 

  UNIX下删除一个文件的过程很简单,那就是释放索引节点表和文件占用的数据块,清空文件占用的索引节点,但不清除文件内容。但删除文件与删除目录的处理不尽相同,不同命令删除文件的过程也不相同。 

  1. 删除一个文件 

  UNIX 删除一个文件的具体步骤是:根据文件i节点的地址表逐一释放文件占用的磁盘数据块,然后清空相应的节点,最后释放i节点。 

  2. 删除一个目录 

  删除一个目录的过程:首先逐一删除目录里的所有文件,然后删除目录。目录本身也是一个文件,故删除方法与删除文件一致。 

  3. 几种不同的删除命令 

  .rm 命令 

  一般删除命令,删除过程上述已说明。 

  .mv命令 

  格式:mv 文件1 文件2 

  处理过程是将文件2的数据块释放,然后将文件1的名称改为文件2,再释放文件2所占的i节点。 

  . > 命令 

  格式:>文件名 

  若产生一个新文件,>命令仅仅申请一个i节点,而不写入任何文件内容;若清空一个已经存在的文件,则释放文件所占的数据块,并将文件长度清零。 

  三、被删文件的恢复策略 

  要恢复被删除的文件,只能根据删除后留下的东西去做文章。文件被删除后留下了什么呢?由上述分析可知:其一、留下了文件的内容;其二、留下了“现场”。文件的恢复策略只能从这两个方面来分析。以下谈几种恢复策略。 

  1.根据磁盘现场进行恢复 

  如果文件被删除,现场未被破坏(即文件被删除后硬盘未发生过写操作),而且假定只删除了一个文件,那么可根据系统的分配算法进行恢复。因为系统建立一个文件时,必定根据某一特定的分配算法决定文件占用的数据块位置。而当该文件被删除后,它所占用的数据块被释放,又回到系统的分配表中,这时如果重新建立一个文件,系统根据原来的分配算法分配出的数据块必定跟该文件原来占用的数据块一致,而且我们知道,UNIX文件最后一数据块尾部多出的字节是全部置0的,据此只要调用系统的数据分配算法,在系统中一块块的申请数据块,因为UNIX文件最后一个数据块尾部多出的字节全部为0,所以,只要发现一个分配出的数据块中尾部全为0,即可认为文件结束,由此可确定文件长度和内容,进而实现恢复。方法如下: 

  ⑴申请一个索引节点,即向系统申请创建一个新文件名而不写入任何内容。如:#>/tmp/xx 

  ⑵调用系统分配数据块算法getnextfreeblock()得到一个数据块号,记入某一地址表变量中。 

  ⑶读出这个数据块,判断其尾部是否全部连续为0,若不是,则回到(2),若是,则进行(4)。 

  ⑷首先用系统函数fstat得到/tmp/xx的i节点号,然后将(2)步所得的地址表写入索引节点的地址表中(注意间址问题),并根据数据块个数和最后一块中有效数据长度计算出文件大小,写入i节点的di_size字段。 

  ⑸回写系统的索引节点表即可。 

  需要说明的是,第一,系统分配数据块的算法因不同的UNIX版本而不同;第二,有的UNIX如SCO UNIX 5.0版,其空闲数据块的分配和回收是使用一种动态链表的数据结构来实现的,它们的文件恢复更加容易,只要在空闲链表中的表尾去寻找即可,笔者另行描述。 

  2. 根据内容恢复。 

  若现场已被破坏,即硬盘发生过写操作,那么只好根据内容来恢复。而且,由于UNIX是一个多进程、多用户系统,它每一次开关机或硬件、通讯故障等都会记录系统日志、.sh_history等,硬盘现场被破坏可能性极大。因此讨论按内容恢复的方法具有更大的实用价值。笔者经过实际探索得出下列四种恢复策略供参考。 

  ⑴关键字搜索法 

  如果知道被删除的文件内容中若干字节的内容,而且该文件长度又不超过一个磁盘块,那么可以在整个文件系统中搜索这一字节串,得出一个文件所在的数据块,将它们的块号填入一个i节点,即可恢复一个文件,搜索文件系统的算法很简单,说明如下: 

  a. #df -k 确定文件系统的设备文件名(如/dev/root) 

  b.用下述函数搜索,若成功,返回数据块号,反之返回-1。其中fsname是文件系统的设备名,如/dev/root,comp()参数是实现搜索条件的函数。 

  long searchfs(char *fsname , int comp()) 

  { 

  FILE *fp; 

  char buf[1024]; 

  long i=0; 

  fp=fopen(fsname,"r"); 

  while (!feof(fp)) 

  { 

  fread(buf,1024,1,fp); 

  if (comp()) /* 检查是否符合搜索条件 */ 

  return i; /* 若成功返回块号 */ 

  i++; 

  } 

  fclose(fp); 

  return -1; /* 未找到符合条件的块,返回-1*/ 

  } 

  ⑵精确长度搜索法 

  如果知道被删除文件的精确长度(字节数),那么可根据一个数据块的大小,计算出文件的最后一个数据块中数据的精确长度,该数据块中其他字节必然是全0。根据这一条件,通过搜索整个文件系统,找出其中符合条件的数据块,若出现多个块符合要求,则还需要根据其他条件区分。但不管怎样,根据精确长度分析也是恢复数据的一个策略。 

上一页  [1] [2] [3] 下一页

 
  • 上一篇文章:

  • 下一篇文章:
  • 广告
    阅读top10
    普通文章跟“系统崩溃”说再见
    普通文章打开开始菜单的第三只
    普通文章利用Ghost软件快速安装
    普通文章UNIX系统被删文件的恢
    普通文章为NTFS、FAT分区制作N
    普通文章加快速度 整理磁盘碎片
    普通文章如何制作自己的Window
    普通文章系统软件的安装与恢复
    普通文章解决Ghost恢复系统后不
    普通文章硬盘分区不求人
    普通文章让电脑启动更快的十五
    普通文章安全模式有妙用
    普通文章用好系统文件检查器
    普通文章电脑诊治之Windows故障
    查看UNIX系统被删文件的恢复策略全部内容
    本站提供:电脑教程 网页制作 Flash教程 PhotoShop教程等免费教程。
    Copyright © 2006-2008轻松学电脑All Rights Reserved