哎,今天修改完毕设论文,就把以前的那些给删了。结果吃完饭回来,发现修改好的那个也不见了。真是悲剧,眼看后天就要答辩了……一把泪啊。第一反应就是看能恢复不。百度了一下,还真的有相关的文章,最后用ntfsundelete这个软件找回了删除的文件。感觉这个软件不错,所以就认真看了一下man文档,学习了一下这个软件。此处总结一下。
适用范围:此小工具仅适用于恢复ntfs文件系统的分区。关于ext2、ext3、ext4的误删文件恢复方法,请看其他相关文章。(PS. 该小工具是ntfs-3g里面带的一个小工具。所以安装的时候,装ntfs-3g即可,装ntfsundelete可能找不到该软件。而且,好像有一个专门的网站做一个叫NTFS Undelete的恢复软件,这个软件仅仅是windows下面用的,和linux下的ntfsundelete不同)。
该软件有三种运行模式:scan,undelete,copy。
scan模式。这种模式也是默认的模式。它只是简单的读取NTFS卷,找到那些被删的文件。然后列出这些文件的节点、名字、大小。
undelete模式。这种模式下,会根据正则表达式或者节点尽可能多的恢复你的数据,恢复出的数据保存在另外亦歌地方,注意,不是原来的地方哦。这一方面是出于安全考虑,另一方面是因为ntfs写支持的原因。
copy模式。这种模式是安装时可选的。他会将一个分区的MFT保存到一个文件。这是有在调试的时候会有用。
使用限制(不可恢复的情况)
当一个文件被删除以后,MFT记录就会将其标记为未使用,代表磁盘使用情况的位图就会更新。如果不立即关电源,那么原来存放该文件的空间就可能被重写。更糟糕的是,MFT记录可能已经被用来记录其他的文件。如果是这些情况,那么文件将不可恢复。
尽管一些文件的簇没有被使用,但是一些短生命周期的文件也可能不可恢复。(我存储论文的那个文件夹就不可恢复,但里面的文件都可恢复,还没搞懂为什么...)
关于语系。在NTFS文件系统中,所有的文件名都是以Unicode存储,ntfsundelete会将其转换为当前语系(比如我的是utf-8.zh)显示出来,这样就可以成功的支持和恢复一些中文文件。
扩展MFT记录。在极少数情况下,单个MFT记录可能不够大,不能存储描述一个文件的元数据(比如一个文件有成百上千个小部分)。这种情况下,将会出现一个MFT记录存储文件名,其他的存储数据信息。nftsundelete不会试图把这些记录拼起来,而是简单的显示所有没有命名的数据。
关于压缩和加密文件。ntfsundelete不能恢复压缩和加密文件。当扫描到这些文件时,将显示为不可恢复。
关于恢复文件的大小和日期。为了恢复一个文件,ntfsundelete必须读取文件的元数据。不幸的是,这些信息不总是完整的。当一个文件被删除了以后,元数据将处于一种易变的状态,比如文件大小可能为0;文件的时间可能被设置为它被删除的时间或者一个随机的时间。为了安全起见,ntfsundelete将会选取它扫描到的最大的文件大小写入磁盘。并尽量将文件的日期设置为它最后别修改的时间。
用法:ntfsundelete [options] device。关于option选项,此处列举几个常用的:
-d 该选项后面跟一个路径,表示恢复或者扫描结果要存储的地方
-f 该选项将会重写一些敏感的默认值,例如不要覆盖当前已经存在的文件。
-i 该选项表示恢复这些节点的文件,多个节点用逗号或者“-”隔开
-o 该选项指定恢复或者copy的结果的名字
-t 该选项指定从当前时刻起前t段时间内删除的文件,可以使用d、w、m、y后缀分别表示天、周、月、年。
-u 选择undelete模式。
其他参数可以参看man文档。
下面是我恢复我的文件的过程,作为使用例子:
确定被删文件所在的分区(可以使用sudo fdisk -l查看,我的是在sda6分区)
卸载该分区(也可以使用-f参数,而不卸载,)
查看我最近1天该分区删除的文件
显示结果如下:
大家可以看到,有的文件大小显示为0,那就代表不可恢复,比如我的那个“毕设2”文件夹。然后每个文件都列出了他的节点(node,第一列),根据节点号就可以恢复文件。最后一句表面我有54个文件可以恢复。
恢复文件。因为我的那个“毕设2”文件夹无法恢复,所以我就恢复两个word文件了(节点号分别为1800和1835,恢复到我的主目录下)。命令如下:
因为必须使用root权限才可以执行该软件,导致恢复以后的文件也是root权限,所以恢复后再修改一下文件所以者即可:
这样就ok了。
后天就答辩了,幸亏找回来了,不然……