本文档分为4大部分
第一部分为 linux文件删除原理
第二部分为 windows文件删除原理
第三部分为 数据存储及恢复的基本原理
第四部分为 个人总结和经验之谈
前3部分是网络收集整理,都不是原文 所以无法找到文章出处 谅解
第四部是自己写的 是多年的工作经验总结
数据无价. 别怕麻烦.
一、linux文件删除原理
Linux是通过link的数量来控制文件删除的,只有当一个文件不存在任何link的时候,这个文件才会被删除.一般来说,每个文件都有2个link计数器:i_count 和 i_nlink.
i_count的意义是当前文件使用者(或被调用)的数量
i_nlink 的意义是介质连接的数量(硬链接的数量)
可以理解为i_count是内存引用计数器,
i_nlink是磁盘的引用计数器.
当一个文件被某一个进程引用时,对应i_count数就会增加;当创建文件的硬链接的时候,对应i_nlink数就会增加.
对于删除命令rm而言,实际就是减少磁盘引用计数i_nlink.这里就会有一个问题,如果一个文件正在被某个进程调用,而用户却执行rm操作把文件删除了,那么会出现什么结果呢?
当用户执行rm操作删除文件后,再执行ls或者其他文件管理命令,无法再找到这个文件了,但是调用这个删除的文件的进程却在继续正常执行,依然能够从文件中正确的读取及写入内容.这又是为什么呢?
这是因为rm操作只是将文件的i_nlink减少了,如果没其它的链接i_nlink就为0了;
但由于该文件依然被进程引用,因此,此时文件对应的i_count并不为0,所以即使执行rm操作,但系统并没有真正删除这个文件,当只有i_nlink及i_count都为0的时候,这个文件才会真正被删除.也就是说,还需要解除该进程的对该文件的调用才行.
以上讲的i_nlink及i_count是文件删除的真实条件,但是当文件没有被调用时,执行了rm操作删除文件后是否还可以找回被删的文件呢?
前面说了,rm操作只是将文件的i_nlink减少了,或者说置0了,实际就是将文件名到inode的链接删除了,此时,并没有删除文件的实体即(block数据块),此时,如果及时停止机器工作,数据是可以找回的,如果此时继续写入数据,那么当新数据就可能会被分配到被删除的数据的block数据块,此时,文件就会被真正的回收了,那时就是神仙也没有办法了.
二、windows文件删除原理
存储在硬盘中的每个文件都可分为两部分:
文件头和存储数据的数据区.
文件头用来记录文件名、文件属性、占用簇号等信息,
文件头保存在一个簇并映射在FAT表(文件分配表)中.而真实的数据则是保存在数据区当中的.
平常所做的删除,其实是修改文件头的前2个代码,这种修改映射在FAT表中,就为文件作了删除标记,并将文件所占簇号在FAT表中的登记项清零,表示释放空间,这也就是平常删除文件后,硬盘空间增大的原因.
而真正的文件内容仍保存在数据区中,并未得以删除.要等到以后的数据写入,把此数据区覆盖掉,这样才算是彻底把原来的数据删除.
如果不被后来保存的数据覆盖,它就不会从磁盘上抹掉.
用Fdisk分区和Format格式化和文件的删除类似,前者只是改变了分区表,后者只是修改了FAT表,都没有将数据从数据区直接删除.
由文件删除的原理可知,要彻底删除数据,只有把删除文件所在的数据区完全覆盖掉.
绝大部分彻底删除工具所使用的就是这个道理:把无用的数据反复写入删除文件的数据区,
并进行多次地覆盖,从而达到完全删除文件的目的.
Windows的这种伪删除,虽然给我们带来了好处,让我们有后悔药可吃.但对于很机密的文件就有了麻烦,存在着被重新恢复的可能性.所以,删除机密文件,一定要借助彻底删除工具,让机密文件彻底”粉身碎骨”,这样你就可以高枕无忧了
三、数据存储及恢复的基本原理
现实中很多人不知道删除、格式化等硬盘操作丢失的数据可以恢复,以为删除、格式化以后数据就不存在了.
事实上,上述简单操作后数据仍然存在于硬盘中,懂得数据恢复原理知识的人只需几下便可将消失的数据找回来,不要觉得不可思议,在了解数据在硬盘、优盘、软盘等介质上的存储原理后,你也可以亲自做一回魔术师.
数据存储及恢复第一步–分区
硬盘存放数据的基本单位为扇区,我们可以理解为一本书的一页.
当我们装机或买来一个移动硬盘,第一步便是为了方便管理–分区.无论用何种分区工具,都会在硬盘的第一个扇区标注上硬盘的分区数量、每个分区的大小,起始位置等信息,术语称为主引导记录(MBR),也有人称为分区信息表.当主引导记录因为各种原因(硬盘坏道、病毒、误操作等)被破坏后,一些或全部分区自然就会丢失不见了,根据数据信息特征,我们可以重新推算计算分区大小及位置,手工标注到分区信息表,”丢失”的分区回来了.
数据存储及恢复第二步–文件分配表
为了管理文件存储,硬盘分区完毕后,接下来的工作是格式化分区.格式化程序根据分区大小,合理的将分区划分为目录文件分配区和数据区,就像我们看得小说,前几页为章节目录,后面才是真正的内容.
文件分配表内记录着每一个文件的属性、大小、在数据区的位置.
我们对所有文件的操作,都是根据文件分配表来进行的.文件分配表遭到破坏以后,系统无法定位到文件,虽然每个文件的真实内容还存放在数据区,系统仍然会认为文件已经不存在.
我们的数据丢失了,就像一本小说的目录被撕掉一样.要想直接去想要的章节,已经不可能了,要想得到想要的内容(恢复数据),只能凭记忆知道具体内容的大约页数,或每页(扇区)寻找你要的内容.我们的数据还可以恢复回来.
数据存储及恢复第三步–格式化与删除
我们向硬盘里存放文件时,系统首先会在文件分配表内写上文件名称、大小,并根据数据区的空闲空间在文件分配表上继续写上文件内容在数据区的起始位置.然后开始向数据区写上文件的真实内容,一个文件存放操作才算完毕.
删除操作却简单的很,当我们需要删除一个文件时,系统只是在文件分配表内在该文件前面写一个删除标志,表示该文件已被删除,他所占用的空间已被”释放”,其他文件可以使用他占用的空间.
所以,当我们删除文件又想找回他(数据恢复)时,只需用工具将删除标志去掉,数据被恢复回来了.当然,前提是没有新的文件写入,该文件所占用的空间没有被新内容覆盖.
格式化操作和删除相似,都只操作文件分配表,不过格式化是将所有文件都加上删除标志,或干脆将文件分配表清空,系统将认为硬盘分区上不存在任何内容.
格式化操作并没有对数据区做任何操作,目录空了,内容还在,借助数据恢复知识和相应工具,数据仍然能够被恢复回来.
数据存储及恢复第四步–理解覆盖
数据恢复工程师常说:”只要数据没有被覆盖,数据就有可能恢复回来”.
因为磁盘的存储特性,当我们不需要硬盘上的数据时,数据并没有被拿走.
删除时系统只是在文件上写一个删除标志,格式化和低级格式化也是在磁盘上重新覆盖写一遍以数字0为内容的数据,这就是覆盖.
一个文件被标记上删除标志后,他所占用的空间在有新文件写入时,将有可能被新文件占用覆盖写上新内容.
这时删除的文件名虽然还在,但他指向数据区的空间内容已经被覆盖改变,恢复出来的将是错误异常内容.
同样文件分配表内有删除标记的文件信息所占用的空间也有可能被新文件名文件信息占用覆盖,文件名也将不存在了.
当将一个分区格式化后,有拷贝上新内容,新数据只是覆盖掉分区前部分空间,去掉新内容占用的空间,该分区剩余空间数据区上无序内容仍然有可能被重新组织,将数据恢复出来.
同理,克隆、一键恢复、系统还原等造成的数据丢失,只要新数据占用空间小于破坏前空间容量,数据恢复工程师就有可能恢复你要的分区和数据.
数据存储及恢复第五步–硬件故障数据恢复
硬件故障占所有数据意外故障一半以上,常有雷击、高压、高温等造成的电路故障,高温、振动碰撞等造成的机械故障,高温、振动碰撞、存储介质老化造成的物理坏磁道扇区故障,当然还有意外丢失损坏的固件BIOS信息等.
硬件故障的数据恢复当然是先诊断,对症下药,先修复相应的硬件故障,然后根据修复其他软故障,最终将数据成功恢复.
电路故障需要我们有电路基础,需要更加深入了解硬盘详细工作原理流程.机械磁头故障需要100级以上的工作台或工作间来进行诊断修复工作.另外还需要一些软硬件维修工具配合来修复固件区等故障类型.
数据存储及恢复第六步–磁盘阵列RAID数据恢复
磁盘阵列的存储原理这里不作讲解,可参看本站阵列知识文章,其恢复过程也是先排除硬件及软故障,然后分析阵列顺序、块大小等参数,用阵列卡或阵列软件重组,重组后便可按常规方法恢复数据.
总结
这篇文章只是让大家基本了解数据存储和数据恢复的基本原理,不是给那些数据恢复高手看的.目的是让大家不再感觉到数据恢复的神秘,懂得一点数据恢复的知识和数据恢复原理,可以最大限度的拯救遭遇意外的数据,避免更大的损失.真正的原理和数据恢复工作要稍微复杂一些.
四、
个人总结
1. 数据的重要性
在实际的工作中,尽量是给自己的数据做分类,分级.根据实际情况,把自己的数据备份多分,以免不可抗拒因素导致数据丢失.
比如非常重要的数据,硬盘一份,移动硬盘一份,不同的网盘每个一份.
虽然实际的工作量很大,但是数据无价.
最起码不会因为各种天灾而导致数据丢失.
不太重要的文件可以硬盘+移动硬盘足以.
或者考虑网络上的同步盘.
我个人使用过很多同步盘工具,发现较大的文件或者目录,在进行频繁修改的时候容易出问题(估计是同步盘厂商的问题,架构设计不够好.)
很多用同步盘的朋友在编辑或者修改大文件的时候,都出现了各种各样稀奇古怪的问题.导致数据的混乱或者丢失.
所以.尽量是用同步盘来备份.而不要把经常要改动的东西放到同步盘.
2. 关于数据删除
不管是linux还是windows,都尽量把 回收站(windows/linux) 或 者rm(linux) 好好利用起来.
数据无价,不要怕麻烦.
就linux来说,给rm加上”alias”避免rm误删或者加上一个小回收站脚本(可以参考我个人博客: http://www.sa-log.com/153.html )
就windows来说.尽量不要关闭回收站和使用直接删除.养成要习惯,定期检查和清空回收站. 避免误删和浪费磁盘空间.
3. 关于移动设备安全
不管是U盘和移动硬盘.
3.1 尽量不要直接拔下设备,而是使用弹出.
在一些时候无法弹出,这就没办法了.要么直接拔,要么重启电脑.尽量做到减少就好了.
3.2 尽量是只用来存数据,避免直接在U盘或者移动硬盘直接编辑或者打开文件.
在实际使用中,如果正好赶上在读写磁盘的某一个部分的时候而突然拔下设备.导致设备没有正常的把数据保存好,有几率损坏数据和有小的几率导致分区表故障.
3.3 在早期,一些移动设备可能会被木马顶上,在移动设备增加auto程序,也就是说插上硬盘就会中毒(虽然在现在这种情况已经很低了).
为了自己的数据安全,可以关闭移动设备的自动运行,或者是在插入移动设备的时候按住shift
4. 给自己的数据做好分类,尽量把重要的数据放到一个靠后的分区.
一些比较悲催的情况.比如雷击,断电导致分区表损坏,1分区丢失,会直接把原来的D盘当作第一个分区来使用.
发现系统坏了,直接做系统.导致磁盘数据丢失.这种情况很难修复.
6. raw磁盘修复和数据恢复
在实际工作和使用中.不管是sd卡,U盘,移动硬盘.经常会出现磁盘分区变为raw. 插入设备的时候提示是否格式化.
如果出现这种情况一定要注意,不要进行过多的操作.以免导致数据无法修复(原因请参考上文).
网络上关于raw修复的方式很多,但是就我个人来说,基本都失败了.
最后找到了一个国外的工具 “GetDataBack for NTFS” 和 “GetDataBack for FAT” 最终解决了我的问题
切记,
1. 尽量减少磁盘的写操作,以免数据真的无法恢复.
2. 在备份前可以考虑使用UltraISO将磁盘备份(如果磁盘很大可能会占磁盘空间和速度较慢)
常见恢复方式如下(网上常见方式我都失败了. 在这做个笔记,记录下大概的关键字.我失败了,没准适合你们.)
1. 修改磁盘权限
2. CHKDSK F: /F
3. EasyRecovery
4. 进入pe,使用磁盘修复工具
5. power data recovery
6. 各种raw修复工具 (传说这个最省事,不需要恢复数据,我失败了)
7. winhex修复分区表 (传说这个最省事,不需要恢复数据,我失败了)
8. 使用 DiskGenius 修复分区 (传说这个最省事,不需要恢复数据,我失败了)
9. 易我分区表 (传说这个最省事,不需要恢复数据,我失败了)
如果真的可以的话,尽量是尝试使用winhex来修复分区表.这个是最快最省事的,并且出错几率很低.
缺点就是难度较大.
使用软件来修复分区表,因为软件的特点并不清楚.万一把分区表彻底弄坏了.就只能恢复数据了.恢复数据的时间就会很长了.
使用恢复软件没什么可说的. 就是时间长,风险低.
linux的数据修复就没什么了.各种工具都比较多.而且他和windows的filesystem原理不同.
只要不破坏数据块.恢复的几率还是很高的.就不在这里写了.
切记,数据无价. 别怕麻烦.
- 本文固定链接: http://www.sa-log.com/155.html
- 转载请注明: 王, 帅 于 我的系统记录 发表