图片来源:DBMS Internals
在我们的日常生活中,偶尔会出现这样的经历:辛苦下载的资料文(wén)件一不小(xiǎo)心被误删,又(yòu)或者正奋力在键盘上敲打,電(diàn)脑突然黑屏。
遇见这种情况,先不用(yòng)着急,因為(wèi)真正的数据还在電(diàn)脑里。
想要找回被误删除的文(wén)件,首先要了解下,電(diàn)脑文(wén)件在我们点击删除后,到底跑哪儿去了?
電(diàn)脑文(wén)件是如何进行保存的
在这之前,我们需要先了解几个概念。
電(diàn)脑包括操作系统在内的所有(yǒu)文(wén)件都存储在硬盘上。而一般来说,无论哪种机械硬盘,都是由盘片、磁头、盘片主轴、控制電(diàn)机、磁头控制器、数据转换器、接口、缓存等几个部分(fēn)组成。
磁盘在格式化时被划分(fēn)成许多(duō)同心圆,这些同心圆轨迹叫做磁道。
所有(yǒu)盘面上的同一磁道构成一个圆柱,通常称做柱面,每个圆柱上的磁头由上而下从“0”开始编号。
操作系统以扇區(qū)的形式将信息存储在硬盘上,每个扇區(qū)包括512个字节的数据和一些其他(tā)信息。一个扇區(qū)主要有(yǒu)两个部分(fēn),存储数据地点的标识符和存储数据的数据段。
了解了上述的概念,我们简单描述下文(wén)件读写的过程。
首先操作系统将文(wén)件存储到磁盘上时,按柱面、磁头、扇區(qū)的方式进行,即最先是第一磁道的第一磁头下的所有(yǒu)扇區(qū),然后,是同一柱面的下一磁头。以此类推,一个柱面存储满后就推进到下一个柱面,直到把文(wén)件内容全部写入磁盘。
文(wén)件的删除过程是怎样的
现在我们知道了文(wén)件读写的大致原理(lǐ),接下来就开始说说今天的正题——文(wén)件删除。
文(wén)件存储的物(wù)理(lǐ)形式就是把一些二进制数据保存在磁盘上,如果我们要删除某个文(wén)件,就像我们写作业用(yòng)橡皮擦或者涂改液擦抹掉已有(yǒu)的文(wén)字一样。
但是要知道,電(diàn)脑文(wén)件的读写首先是高速和频繁的,拷贝一部電(diàn)影,一般至少都要十几秒(miǎo)起,反过来想想,假如要删掉硬盘里的某部電(diàn)影,如果按照涂改液修改作业的原理(lǐ),我们得用(yòng)新(xīn)的数据覆盖它,如果是这样,岂不是删个電(diàn)影都要几秒(miǎo)钟起,这样无论是对计算机本身还是電(diàn)脑用(yòng)户而言都是不合理(lǐ)的。
所以,计算机的操作系统(如大家常用(yòng)的windows10)一般删除文(wén)件只是删除对文(wén)件的引用(yòng),把文(wén)件曾经所占的磁盘物(wù)理(lǐ)空间在逻辑上释放出来。后面如果有(yǒu)新(xīn)的数据存储,直接在此基础上进行覆盖就好了。所以到这里,我们应该清楚了一点,如果你的文(wén)件意外删除或者损坏等,请马上停止任何写入操作。
在硬盘上,都存储着一张文(wén)件分(fēn)配表FAT,该表记录每个文(wén)件存储在磁盘的具體(tǐ)地点,我们可(kě)以理(lǐ)解成新(xīn)华字典的目录一样,写明了每个字对应所在的页码,FAT的作用(yòng)也大致如此。
我们在删除文(wén)件时,操作系统只是修改了这个文(wén)件的文(wén)件名的前两个代码,同时在与之对应的表中文(wén)件名称做上了删除标记。
对于这一点,我们可(kě)以理(lǐ)解成硬盘上这个文(wén)件區(qū)域被打上了“拆迁”标记,并在地图上抹掉了它存在的坐(zuò)标,但它其实还在那。
在我们需要新(xīn)的空间进行存储时,任何被打上“拆迁”标记的區(qū)域都可(kě)以用(yòng)于存储新(xīn)的数据,即被新(xīn)数据覆盖。
那么自然地,只要存储原来文(wén)件信息的扇區(qū)没有(yǒu)写入任何新(xīn)的数据,所有(yǒu)的原文(wén)件内容依然存在。
所以,至此我们清楚了:電(diàn)脑中删除掉的文(wén)件,在没有(yǒu)被新(xīn)的数据覆盖之前,依旧存在于你的硬盘上。
已删除的文(wén)件是否可(kě)以恢复
到这里我们已经差不多(duō)了解了文(wén)件删除的大致情况,是否可(kě)以逆推下文(wén)件恢复的原理(lǐ)呢(ne)?
其实很(hěn)简单,文(wén)件恢复的思路就是查找分(fēn)析磁盘上的文(wén)件头,找出其中做过删除标记的文(wén)件并尝试重写其被改写的两个代码,进而进行数据恢复。
目前市面上文(wén)件恢复软件的原理(lǐ)大致一样,區(qū)别是它们对文(wén)件头的扫描以及恢复分(fēn)散存放的文(wén)件数据能(néng)力不同。
如果想要真正删除掉某个文(wén)件,应该怎么做呢(ne)?你可(kě)以通过专业工具软件在删除的文(wén)件區(qū)域全部写入二进制中的0,又(yòu)或者可(kě)以手动用(yòng)其他(tā)垃圾文(wén)件进行覆盖硬盘操作。
(据微信公众号“数字北京科(kē)學(xué)中心”)