下面是小编为大家收集的UNIX系统被删文件的恢复策略Windows系统(共含5篇),仅供参考,欢迎大家阅读,希望可以帮助到有需要的朋友。同时,但愿您也能像本文投稿人“snoozecat”一样,积极向本站投稿分享好文章。
来源:软件世界李贵林陈朝晖 与DOS/ Windows 不同,UNIX文件被删除后很难恢复,这是由UNIX独特的文件系统结构决定的,UNIX文件目录不像DOS/Windows那样,文件即使被删除之后仍保存有完整的文件名、文件长度、始簇号(即文件占有的第一个磁盘块号)等重要信息;
来源:软件世界 李贵林 陈朝晖
与DOS/Windows不同,UNIX文件被删除后很难恢复,这是由UNIX独特的文件系统结构决定的。UNIX文件目录不像DOS/Windows那样,文件即使被删除之后仍保存有完整的文件名、文件长度、始簇号(即文件占有的第一个磁盘块号)等重要信息;相反,它的文件信息全部依靠一种被称为i节点的数据结构来描述,而i节点在相应文件被删除之后即被清空,因此,要想直接恢复被删除的文件内容几乎是不可能的,必须另辟蹊径。本文结合实际,讨论几种文件恢复策略及其关键步骤的具体实现。
一、UNIX文件系统结构
我们知道,UNIX是以文件卷作为其文件系统存储格式的,而不同的UNIX系统,文件卷格式是有差异的,甚至即使是同一UNIX操作系统的不同版本,其文件系统未必完全相同,例如:SCO UNIX 4.1版与5.0版文件系统结构就有明显差异,但只要是UNIX系统,其文件卷的基本结构是一致的。分析如下:
不管是什么UNIX系统,不管什么版本,其文件卷至少包括引导块、超级块、i节点表、数据区等几个部分。除此之外,不同UNIX版本可能还有不同的差异。例如:SCO UNIX系统的位图索引块和位图块AIX的逻辑卷表等。这些系统的特殊性不影响下文的恢复策略,故这里不作讨论,仅介绍标准UNIX文件卷结构。
1. 引导块
位于文件卷最开始的第一扇区,这512字节是文件系统的引导代码,为根文件系统所特有,其他文件系统这512字节为空。
2. 超级块
位于文件系统第二扇区,紧跟引导块之后,用于描述本文件系统的结构。如i节点长度、文件系统大小等,其结构存放于/usr/include/sys/filsys.h中,其结构如下:
struct filsys
{
ushort s_isize; /*磁盘索引节点区所占用的数据块数*/
daddr_t s_fsize; /*整个文件系统的数据块数*/
short s_nfree; /*在空闲块登录表中当前登记的空闲块数目*/
daddr_t s_free[NICFREE]; /*空闲块登记表*/
short s_ninode; /*空闲索引节点数*/
ino_t s_inode[NICINOD]; /*空闲节点登记表*/
char s_flock; /*加锁标志位*/
char s_ilock; /*节点加锁标志位*/
char s_fmod; /*超级块修改标志*/
char s_ronly; /*文件系统只读标志*/
time_t s_time; /*超级块上次修改的时间*/
short s_dinfo[4]; /*设备信息*/
daddr_t s_tfree; /*空闲块总数*/
ino_t s_tinode; /*空闲节点总数*/
char s_fname[6]; /*文件系统名称*/
char s_fpack[6];
long s_fill[13]; /*填空位*/
long s_magic; /*指示文件系统的幻数*/
long s_type; /*新文件系统类型*/
};
3. i节点表
i节点表存放在超级块之后,其长度是由超级块中的s_isize字段决定的,其作用是用来描述文件的属性、长度、属主、属组、数据块表等,其数据结构在/usr/include/sys/ino.h中,如下:
struct dinode
{
ushort di_mode;
short di_nlink;
ushort di_uid;
ushort di_gid;
off_t di_size;
char di_addr[40];
time_t di_atime;
time_t di_mtime;
time_t di_ctime;
};
4. 目录结构
UNIX所有文件均存放于目录中,目录本身也是一个文件。目录存放文件的机制如下:首先,目录文件本身也象普通文件一样,占用一个索引节点,其次,由这个索引节点得到目录内容的存放位置,再次,从其内容中取出一个个的文件名和它对应的节点号,从而访问一个文件。目录结构如下:
索引节点号(2字节) .(本目录)(14字节)
索引节点号(2字节) ..(父目录)(14字节)
索引节点号(2字节) 文件名(14字节)
索引节点号(2字节) 文件名(14字节)
索引节点号(2字节) 文件名(14字节)
由上可知文件名是依靠目录来描述的,文件的内容和其他信息则由索引节点来描述。
二、文件的删除过程
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。根据这一条件,通过搜索整个文件系统,找出其中符合条件的数据块,若出现多个块符合要求,则还需要根据其他条件区分。但不管怎样,根据精确长度分析也是恢复数据的一个策略。
⑶内容关联法
如果知道文件内容中存在某种可实现的关联,例如文件的校验和,或者文件内容的某种上下文关系,那么也可通过搜索整个文件系统,通过反复尝试寻找符合关联条件的磁盘数据块,进而恢复一个文件。
⑷环境比较法
如果知道删除文件所在的文件系统的安装过程,那么,另行找一台完全相的机器,按原来完全相同的步骤安装相同版本的UNIX和相应的其他软件,可以想象,新的机器环境会与原来的环境基本相同,比较两个机器上相同文件系统的内容,可以推断出被删除文件的大致位置,至少可以大大减少查找的范围,一旦查找的范围足够小时,可以用逐个观察和尝试的方法结合其他条件恢复数据,降低恢复的难度,增加恢复的可靠性。
UNIX系统下文件系统恢复的具体实现依赖于不同操作系统和不同版本的具体文件系统结构和磁盘块分配算法。本文试图总结出一种一般性的思路和策略,限于篇幅,不能详细讨论它们的具体实现过程。
answer 回复于:-02-12 15:19:02太专业了。
不过是好东西,加精华。
yeungxl 回复于:2003-02-12 15:39:38SCO OSR下有更容易的解决方案,具体参见:
www.chinaunix.net/bbsjh/4/15420.html
午夜聆听 回复于:2003-02-12 19:56:51华山大哥的帖子。好精典
quicksand 回复于:2003-02-13 16:28:05好,收藏!
sdclearcase/“ target=”_blank“ >ccf 回复于:2003-02-13 20:11:57实现起来困难。
原文转自:www.ltesting.net
方法一:
如果错误操作删除文件马上发现可以使用撤销快捷键【Ctrl+Z】将文件恢复,
方法二:1、加入你错误的将图片1.jpg删除,因为图片文件都有限,不会太大,删除之后都会进入回收站!右击还原,
文件就会恢复到被删除时候所在目录;
2、如果是大型文件被执行删的时候会提示文件太大无法进入回收站是否永久删除。这种文件在回收站是找不到的! CTrl+Z撤销快捷键有时候也找不回来。
以上就是Win8.1系统下快速恢复误删的软件的两种方法,简单实用的小技巧。
共享程序文件丢失 大多数Win98或其应用程序文件安装前都是压缩文件,必须由安装程序或Extract命令解压,但也有一些共享程序文件安装前并未压缩,如office97使用的许多动态链接库文件。如果你在运行程序时系统提示此类文件丢失,可按以下方法处理; 1.记下文
共享程序文件丢失
大多数Win98或其应用程序文件安装前都是压缩文件,必须由安装程序或Extract命令解压。但也有一些共享程序文件安装前并未压缩,如office97使用的许多动态链接库文件。如果你在运行程序时系统提示此类文件丢失,可按以下方法处理;
1.记下文件以及它所在的文件夹名称,根据后者可确定文件属于那个程序或到哪去找。
2.运行Win98”资源管理器“→”工具“菜单下的”查找“→”文件或文件夹“命令,在”名称和位置“选项卡的”名称“框内输入完整的文件名,单击”浏览“按钮找到安装程序所在盘符或文件夹,完成后”开始查找“。
3.选中窗口下部找到的文件,单击鼠标右键选择”复制“。再打开丢失文件所在的文件夹,将找到的文件”粘贴“到其中即可。
此法用于恢复DLL之类的共享程序文件较好,条件是Win98及”资源管理器“能够运行。笔者曾用它恢复了office97丢失的Msvcrt40.dll文件,但由于未压缩的共享程序文件较少,故虽然方便但局限性较大,
Win98系统文件丢失
Win98系统文件丢失的现象是:启动过程系统提示某些系统文件被破坏或被替换为旧版本,导致系统的部分功能无法使用。此时只要Win98和”附件“中的”系统工具“程序可以运行,就能用下面的方法恢复:
1.记下丢失的系统文件名称和路径,运行Win98”附件“→”系统工具“叫”系统信息“程序。
2.单击”系统信息“程序”工具“菜单中的”系统文件检查器“命令。
3.选中”系统文件检查器“中的”从安装软盘提取一个文件“项,然后在下面的文本框内输入要替换的文件名,如Update.sys。
4.单击”开始“按钮,打开”提取文件“对话框。如果你使用原始安装盘进行恢复且事先用”系统文件检查器“扫描过系统,它会自动在”还原自“和”将文件保存到“框内给出文件的源路径和恢复路径,如”F:\Win98“与”C:\Windows\System32\drivers“。否则需要单击”浏览“按钮手工给出相关路径,然后单击”确定“即可自动完成丢失文件的提取和恢复。
此法可以自动恢复Win98系统文件,也能手工恢复其他微软应用程序(使用CAB压缩格式)中的文件。前提是系统破坏不太严重(Win98及”系统文件检查器“能够运行),事先用”系统文件检查器“扫描过系统最好。笔者曾用此法恢复了许多丢失文件的Win98,在Win98及”系统文件检查器"能够运行时最好使用此法。
原文转自:www.ltesting.net
病毒似乎总以破坏winxp系统文件为乐,林林总总的病毒对系统的危害性也不尽相同,一旦windows xp的系统文件损坏,我们该怎么办?是重装还是系统恢复?这些方法效率太低,其实我们可以采取更简单有效的方法,那就是从winXP的系统光盘中修复被病毒破坏的文件,
恢复winxp系统文件步骤
1.在winxp安装光盘中搜索被破坏的文件,这里搜索要有一个技巧,那就是文件名的最后一个字符用下划线“_”代替,如果你搜索“Notepad.exe”则需要用“Notepad.ex_”来代替。
2.文件搜索到了之后接着打开winxp的命令行模式(开始-运行-CMD),然后再输入:“EXPAND 源文件的完整路径 目标文件的完整路径”,
例如: EXPAND D:\SETUP\NOTEPAD.EX_ C:\Windows\NOTEPAD.EXE。有一点需要注意的是,如果路径中有空格的话,那么需要把路径用双引号(英文引号)包括起来。
3.如果在windows XP光盘中搜索不到你想要的文件,你可以在“CAB”文件中寻找,由于Windows XP把“CAB”当作一个文件夹,所以对于Windows XP系统来说,只需要把“CAB”文件右拖然后复制到相应目录即可。
4.其他windows平台操作大同小异,你搜索到的包含目标文件名的“CAB”文件。打开命令行模式,输入:“EXTRACT /L 目标位置 CAB文件的完整路径”,例如: EXTRACT /L C:\Windows D:\I386\Driver.cab Notepad.exe。同前面一样,如同路径中有空格的话,则需要用双引号把路径包括起来。
被删除系统文件恢复全攻略
电脑在使用过程中难免会遇到更换机器、中毒、系统崩溃、升级等情况,有时还需要进行硬盘的格式化,结果发现有些重要的数据忘记备份,那后悔也来不及了!难道真的没有办法了吗?不,能恢复的!
那数据为什么能恢复呢?这主要取决于硬盘数据的存储原理,先看一下硬盘上数据存放的原理吧。硬盘中由一组金属材料为基层的盘片组成,盘片上附着磁性涂层,靠硬盘本身转动和磁头的移动来读写数据的。其中最外面的一圈称为“0”磁道。上面记录了硬盘的规格、型号、主引导记录、目录结构等一系列最重要的信息。我们存放在硬盘上的每一个文件都在这里有登记,相当于文件的户口簿。在读取文件时,首先要寻找0磁道的有关文件的初始扇区,然后按图索骥,才能找到文件的老巢。但是删除就不一样了,系统仅仅对零磁道的文件信息打上删除标准。但这个文件本身并没有被清除。只是文件占用的空间在系统中被显示为释放,而且,当你下次往硬盘上存储文件时,系统将会优先考虑真正的空白区,只有这些区域被用完以后,才会覆盖上述被删文件实际占有的空间。另外,即使硬盘格式化后(如Format),只要及时抢救,还是有很大希望的。下面我就向大家做详细的介绍。
EasyRecovery是一个威力非常强大的硬盘数据恢复工具,能够帮你恢复丢失的数据以及重建文件系统,
下面我们就以EasyRecovery为例,介绍删除软件恢复的过程。
一、回收站里被删除文件
首先我们启动EasyRecovery,点击左边列表中的“数据修复”。
数据修复里面有六个选项,我们点击“DeletedRecovery”,它的功能是查找并恢复已删除的文件。
选择要恢复文件所在的分区,在默认情况下软件对分区执行的是快速扫描,如果你需要对分区进行更彻底的扫描,就在“完成扫描”前打上勾就行了,选择好分区后,我们点击“下一步”。
点击下一步后,软件就开始扫描你刚才选择的分区了。 经过3~4分钟的扫描后结果就出来了,你点击左面文件夹列表中的文件夹,在右面列出来到文件就是能被恢复的删除文件,选择一个要恢复的文件,一定要把前面的勾打上,然后点击“下一步”。
选择好要恢复的文件后,我们就来选择恢复目标的选项,一般我们都是恢复到本地驱动器里的,那么我们点击后面的“浏览“来选择文件保存的目录(选择分区时请注意,保存的分区不能与文件原来所在的分区一样,否则不能保存)。
点击下一步后,文件就开始恢复了,恢复完成后,弹出一个对话框显示文件恢复摘要,你可以进行保存或者打印,然后点击“完成”。一个文件就被恢复了。