程序员误操作导致数据丢失,忙了一个星期的项目,就这样白费了。老板的训斥和经理的训斥接二连三。然后就没有休息,加班,甚至忙到凌晨都离不开那该死的电脑。我感觉我想死?对于那些不喜欢备份数据的朋友来说是个好消息。说说数据恢复,这里我们会一步一步教你如何使用简单的工具来恢复你删除的数据。工具:hexedit、fdisk以下内容操作均在root环境下完成。hexedit:在linux上,hexedit常用来修改程序的十六进制代码。而fdisk这里就不介绍了。现在让我们走进磁盘的世界,看看磁盘对数据做了什么。首先,在终端下使用root权限运行以下命令:命令:fdisk-l/dev/sdb1是今天的主角,从图中可以清楚的看到一些相关数据,比如大小,扇区,以及磁盘大小的I/O等等。磁盘格式是ext4,不是MS上的vfat32和NTFS格式,文末贴了FAT32的图片。第一步:运行fdisk,使用专家模式备份Partition表。ext4的分区表很简单,一般备份分区表是ext4.img。备份用于避免恢复期间的数据损坏。第二步:首先在目标sdb1上执行切割命令,将sdb1上的文件移动到电脑硬盘上。执行完成后,使用hexedit打开sdb1。剪切的文件名:usb.png命令:hexedit-s/dev/sdb1可以看到图片中的文件名和扇区,有没有发现图片的设备是sdc1?由于磁盘自动挂载,发生了devcrashChange,数据不会随着磁盘的devchange而改变。已在此处找到文件名的位置。接下来,需要找到文件头。如何找到文件头?您可以使用hexedit进行十六进制搜索。如果需要ASCII,可以按TAB键切换到ASCII区域。文件的大小决定了文件在磁盘上占用的扇区数,1扇区==512字节。图中显示了文件头偏移量和扇区。提取十六进制值并将其写入文件。恢复后的图片:看起来很简单,就是单个文件的剪切操作和数据恢复。在此提醒大家:保存在磁盘中的数据删除后无法恢复,但剪切的数据也可以恢复。下面我们来看一下磁盘数据删除后如何操作。在磁盘上执行删除命令,删除一个名为1.gif的文件。操作如下:可以看到图中扇区从文件头到文件尾的变化。headersector:264056,endsector:264057文件大小1K,图片很小。新建一个文件,然后执行删除操作,可以看到磁盘数据的变化。文件头扇区:264056,结束扇区:264061,第一个删除的文件头扇区:264056,结束扇区:264057,所以可以看到第一个删除的数据被覆盖,第二个保留了删除的数据。该操作是为了演示磁盘上单个文件的数据恢复和磁盘中的数据变化。接下来我们看一下双档的操作。磁盘上存在两种不同类型的文件。文件名:partition.zip文件名:cab.ico第一个文件的头扇区:264056,结束扇区:264058第二个文件的头扇区:264064,结束扇区:264076发现第一个文件的结束扇区与第二个文件的头扇区相差几个扇区,那么中间有什么不同呢?可以看到中间的差值全部用00补齐。这里总结一下这次在linux上的实际操作:ext4文件系统执行裁剪文件名:usb.png扇区67120文件头:扇区264064文件尾:扇区264076执行删除文件名:1.gif扇区67112(覆盖)文件头:开始:扇区264056结束:扇区264057(覆盖)文件名:56.jpg扇区67112文件头:开始:扇区264056结束:扇区264061删除单个文件时,覆盖最后删除的数据。保存文件(1)文件名:partition.zip扇区67112文件头:起始扇区264056结束扇区264058(2)文件名:cab.ico扇区67112文件头:起始扇区264064结束扇区:264068剪切区:sector4删除264扇区264056存储area:与delete区共存storagearea:存储单个文件时,存储的文件覆盖delete区的数据。数据恢复:当多个文件被删除时,删除的数据十六进制将保留在删除区。如果创建了新的文件数据,删除的数据十六进制将被覆盖。附图:FAT32磁盘格式示意图:
