使用mc恢复被删除文件

简介: http://www.linuxpk.com/118.htmlSteven Hirsch,一个Linux的良师益友,他是如此的友善,给我解释了如何使用(一个特定编译的版本)Midnight Commander来恢复文件。

http://www.linuxpk.com/118.html

Steven Hirsch,一个Linux的良师益友,他是如此的友善,给我解释了如何使用(一个特定编译的版本)Midnight Commander来恢复文件。具有讽刺意义的是,这个曾经以Linux里所能见到的疯狂的速度删除文件的工具居然是我恢复文件的最佳希望。

  在我真诚地希望你不会看到成百上千的必须文件高速消失时,我希望你已经准备好了黎明的到来。你可能希望作为root用户执行;我们会加载并卸载分区,并使用这些原始的磁盘分区进行工作。就象下面的例子一样,如果你要卸载诸如/home之类的分区,这可能尤其必要。

  在你的系统上取得Midnight Commander的一份拷贝

  虽然它不是唯一具有恢复删除文件能力的程序,但是它是我最熟悉的恢复删除文件的工具。现在,缺省情况下MC已经包含了恢复删除文件的代码。如果你的发行版本中没有MC,就从http://www.gnome.org/mc/获取一份拷贝并在系统中安装上。

  进行恢复的最好时机是在你删除文件之后——你希望要把恢复的文件尽可能少变动地恢复到文件系统中。

  建立一个测试文件并将这个文件删除

  你应该在需要的时候可以加载并卸载的分区上执行这些操作——不要在你的web server的主分区上执行这些操作。

  选取一个非root的分区(使用mount命令来查看已经加载的分区)。对于本例来说,让我们假定/dev/sdd1是加载在/home上的。这样创建一个测试文件:

  echo "Just a test file" >/home/testfile

  rm -f /home/testfile

  如果你是在root分区(或者更糟糕的情况,你只有一个分区)上创建的这个文件,那么你就要在下个月我介绍如何在root分区上安全操作时再来看一下了。

  卸载删除文件的分区

  在本例中,这可以通过执行下面的命令来实现:

  umount /dev/sdd1

  不要试图在一个已经加载的分区上恢复文件——这样你可能会破坏磁盘。

  启动Midnight Command并选择要恢复的文件

  mc

  在mc中,输入:

  cd undel:/dev/sdd1

  你只能在mc中使用这个命令,其它地方都不行。在mc中使用“cd”命令和在命令提示符中的效果相同;该命令会改变目录。这个特定语法的命令指示mc显示该分区上所有删除的可以恢复的文件,而不是显示目录中的文件。

  耐心等待一会,mc正在整个ext2文件系统上查找删除的inode(i节点)(一个inode中包含了一个文件的_contents_,但是没有文件名)。大约一分钟左右,你就会在这个窗口中看到一个显示有一些名字类似“23434632:2”的文件列表。这些项的日期和时间是对应的inode被删除的日期和时间。我发现最有用的是对这个窗口根据时间进行排序:

  , r, s, m,

  或者

  , l, s, m,

  你也可以使用 “查看”特性来观察inode的内容。在你认为删除文件的时间靠近窗口中列出的时间的文件上面按下<ins>键。这样就把这些文件立即标记成已恢复的。

  恢复文件

  在其它窗口(使用键在mc中切换窗口)中,在/tmp下建立一个空目录,例如/tmp/deletedfiles。

  mkdir /tmp/deletedfiles

  现在切换回unel窗口并按下键把这些文件拷贝到实际的文件系统中。如果你已经处理完了,就可以按下键离开mc——见屏幕底部的说明。

  现在是重新加载/home分区的最好时机,使用下面的命令:

  mount /home

  现在,你可能希望逐个查看一下这些文件,并确定实际的名字应该是什么。既然这些文件都在/tmp/deletedfiles目录中,你可以把它们和其它文件一样处理,例如:

  cd /tmp/deletedfiles

  mv 23434632:2 /home/testfile

  如果你多次删除了一个文件,那么你就会得到一个文件的多个拷贝;你需要确定哪个文件是你希望保留的。

  就是这样,你已经从Linux分区中恢复出文件来了。

  对于这种处理方法有几点需要注意。首先,这种特殊的恢复技巧只能在ext2分区上工作。其次,如果文件是在运行2.0.x版本的内核的系统上删除的,那么恢复过程只能最大可以恢复文件的前面12288字节。这是删除过程中的一个bug,它没有把文件作为一个整体保留到文件删除为止。可能在比我使用的更新的2.0.x版本的内核中已经修正了这个问题,但是我知道在2.2.x版本的内核中这个问题已经修正了。

  这种特性的荣誉应该归功于Ted T’so和其它ext2文件系统的作者,也应该归功于Miguel de Icaza和其它的MC的作者。

  十分感谢Bob DeRosa,感谢他允许我再次在LinuxMonth中发表文章。

  William 是Vermont, USA的一个Open-Source的开发者、狂热的追求者和倡导者。本文来自:http://www.linuxpk.com/118.html
 

目录
相关文章
|
10天前
|
算法 安全 固态存储
删除的文件怎么找回?删除文件恢复全面指南
我们常常在日常生活或工作中不小心删除了重要文件,这样的情况可能瞬间让人感到无助。不过,数据恢复技术已相当成熟,我们可以通过多种方法来找回误删的文件。下面我们将从简单到复杂逐步讲解找回删除文件的方法,希望可以帮助大家在意外发生时及时找回丢失的文件。
|
4月前
|
存储 Shell API
对回收站里的文件进行操作
这篇文章介绍了如何使用C++对Windows系统的回收站进行操作,包括删除和恢复文件。 代码示例展示了如何遍历回收站中的文件,以及如何使用SHFILEOPSTRUCT结构体进行文件恢复或删除。此外,文章还提到了使用Boost等第三方库进行文件操作的高级接口,例如Boost.Filesystem,提供了跨平台的文件系统操作,包括文件路径处理、遍历目录、文件复制和删除等功能。 总的来说,文章提供了一种使用Windows API和Boost库在C++中操作回收站的方法。
|
存储 Shell API
C++实现对回收站里的文件进行操作
本篇文章主要为大家详细介绍了C++如何使用代码对回收站里的文件进行操作,譬如文件的删除与恢复等。 方式一:设置不同的SHFILEOPSTRUCT结构体,调用SHFileOperation函数就可以实现拷贝、删除、移动等文件操作 SHGetSpecialFolderLocation函数: 原型: HRESULT SHGetSpecialFolderLocation(HWND hwnd, int csidl, PIDLIST_ABSOLUTE* ppidl) 该函数用于获取特殊文件夹的物理路径。它接受以下参数: hwnd:可选参数,指定父窗口的句柄。如果不需要与窗口关联,可以设置为NU
162 0
|
网络安全
rm -rf 误删除数据如何进行恢复
rm -rf 误删除数据如何进行恢复
1149 0
|
Linux
删除恢复的文件
当Linux计算机受到入侵时,常见的情况是日志文件被删除,以掩盖攻击者的踪迹。管理错误也可能导致意外删除重要的文件,比如在清理旧日志时,意外地删除了数据库的活动事务日志。有时可以通过lsof来恢复这些文件。
854 0
|
监控 Oracle 关系型数据库
[20171208]强制删除归档日志文件.txt
[20171208]强制删除归档日志文件.txt --//测试环境,产生日志太多,想强制删除. RMAN> delete archivelog all ; released channel: ORA_DISK_1 allocated channel: ORA...
1429 0