linux系统:rm-rf执行以后,怎么办?

家好我是历史,身为liunx系统管理员,rm命令是不是经常在用呢?有没有做过rm命令以后,瞬间感觉无语的时候!

让大家看看我的血的教训!                  
     

果真感觉蛋疼了,欲哭无泪啊!写了一天的成果,想着把之前备份的文件删除呢,结果把刚写完的删了。

国外著名linx管理员守则中有这么一条:“慎用rm -rf命令,除非你知道此命令将带来什么后果。” 可见这个命令的重要性啊,书中看到的这句话,确实很对。
说了这么多,教教大家执行了rm命令后 该这么办吧,是有办法回复的,我刚经过试验证实了,google有一个开源的包 叫ext3grep工具他可以回复删除的文件,甚至是drop database
xcy; 对,就是误删除的数据库都可以回复。

   先说一下他的工作原理吧,然后我在把试验分享给大家, 工作原理其实也不难,这个工具需要在ext3或者ext4 的文件系统上才可以实现,因为ext3文件系统是日志型文件系统,ext3文件系统储存信息的时候是由inode号和block块存储的。
神马? 不知道什么是inode号?和block块? 好吧,在说明白点,比如:一个分区比如一本书,那么block块就是书每页的内容,而inode号 就是书的目录,系统找文件的时候先找inode号 然后根据inode号去找硬盘上的block快信息,明白了吧! 

     
  在说一下删除的原理吧。 当硬盘上的一个文件删除,其实没有真正想象中的那样在硬盘上清除掉的,他是把inode号和block块的那个链子 断开,但是真正的数据还是在硬盘上的,有没有感觉在windos上删除是那么快,没考虑到这吧,当你在删除文件的地方重新复制了新文件,那时候才会把之前的文件覆盖掉,也就是说删除了没有关系,千万不要往那个位置放文件了。

源码包下载位置:http://down.51cto.com/data/709491

原理说完了,开始实战。

环境介绍: 系统版本:CentOS release 5.4 (Final)

1 安装之前先检查有没有这个包: rpm -qa | grep e2fsprogs

2 ext4grep 是个源码包,需要编译安装

检查一下e2fsprogs包是否完整,我的却一个-devel的包,所以要先yum install e2fsprogs* 我偷懒了嘿嘿

解压ext3源码包

进入源码包,然后开始检查包的完整性 执行: ./configure 如果在这个过程中到最后有error那么先检查你的是不是少 e2fsprogs-devel

在进行 make && make install (编译 编译安装) 一般这里不会有问题如果这里报错了 检查你系统是不是缺少 gcc gcc-c++ 这俩包 你可以 yum install gcc* 全部安装 有好处没有坏处哈哈哈

等待完整完,,好了安装完以后。可以先查看一个是否完成成功了,用: ext3grep -v 命令查看ext3的版本信息如下如:

当然如果不知道命令怎么用可以输入:ext3grep --help 查看

然后我需要手动创建一个分区, 创建命令: fdisk /dev/sda 这个因为没有办法保存图像所有我直接显示的创建完成以后的。如果大家不知道怎么创建 可以查看我的 linx基本命令(文件系统章节)。

然后 把这个分区y用ext3分区格式格式化 并且挂载到mnt目录下。

然后 我进入了挂载的目录里, 创建了xcy目录, 把/etc/passwrd 和 /etc/my.cnf 俩个文件复制到了/mnt/xcy目录中,并且 把俩个文件改了下名字 为了我的辨认。 最后我执行了 rm -rf /xcy/* 把xcy文件中的文件都删除了。

咳咳,然后我首先做的是卸载下来 把挂载的分区,因为 怕别人动了我的文件夹 在里面复制了东西我就没有办法恢复了,在下面我执行:ext3grep /dev/sda5 --ls --inode 2 给你们解释一下

ext3grep 删除文件的分区 --ls --innode inode号

为什么最后我们要写2 因为我不知道我的删除的文件的inode号多少, 所有我写的是最大的inode / 的inode号 可以用: ls -id / 查看

执行下去以后就会看到 他在刷帮你找删除的文件们。。


继续走,,扫到最后我们想要知道的文件夹的inode号是2099 然后我们继续执行扫描命令: ext3grep /dev/sda5/ --ls --lnode 2009 这个命令他就会扫 xcy目录下的所有文件(包括删除 还有没有删除文件的inode号了) ,然后我们就可以扫除来了,my.cnf.xcy
innode号 是2011 passwd.xcy 文件的inode号 是2010

现在我们的目标马上就要达到了,知道了俩个文件的inode号 就可以进行恢复了.

然后我们执行 ext3grep /dev/sda5 --restore-inode 2011 (恢复my.cnf.xcy文件)

我们在执行 ext3grep /dev/sda5 --restore-inode 2010
(恢复passwrd.xcy文件)

然后我们将卸载的文件系统重现挂载上去。

恢复了,文件不会在原来的位置,他会自动在/ 下创建一个叫RESTORED_FILES 目录 你以后所有恢复的文件都会在这里保存着,还有文件的名字是以inode号命名的 你需要手动修改回来原名字,不要怕不知道那个文件是那个,还记得我们 --ls 扫描的时候他都有对应的文件和inode号

文件恢复了,哈哈 是不是很激动啊,解决了liunx 下不能恢复的问题,这样就可以大大节约成本 不用找硬盘恢复工具 不用花钱了, 对了还有呢, 这个同样可以恢复 mysql 数据库 误操作删除了库或者表
都可以恢复 原理嘛 其实就是恢复相对应的mysql数据库中的文件了,自己尝试一下吧,

对了在说一下,我截图中 圈起来了是正确的命令,别的很多有操作错误的,因为毕竟第一次试验吗。。成功了很高兴,,希望能帮到和我同样遭遇的朋友们。

最后来个总结缺点: 我试验发现这个功能有些缺点:

1 条件必须是ext3 ext4 日志文件系统才可以做到,别的我就不清楚了。

2 我这个是自己创建的分区/dev/sda5 也就是说我知道删除的文件在那个分区上,假如你删除了文件知道在哪里分区中 那么你就需要从sda1 ....sdaN 都试一遍吧,,,,。

有什么问题可以留言 联系我 我看到了可以帮大家解决。。。

时间: 2024-11-26 18:57:21

linux系统:rm-rf执行以后,怎么办?的相关文章

linux文件rm -rf删除之后文件恢复

问题描述 linux文件rm -rf删除之后文件恢复 一.介绍extundelete 1.extundelete的文件恢复工具,该工具最给力的一点就是支持ext3/ext4双格式分区恢复. 2. 在实际线上恢复过程中,切勿将extundelete安装到你误删的文件所在硬盘,这样会有一定几率将需要恢复的数据彻底覆盖. 3. extundelete还是有很大的不完整性基于整个磁盘的恢复功能较为强大基于目录和文件的恢复还不够强大. 4. extundelete执行完毕后在当前目录生产一个RECOVER

Linux系统中查看执行中的进程占用内存量的方法

Linux中查看某个进程占用内存的情况,执行如下命令即可,将其中的[pid]替换成相应进程的PID号: 代码如下: cat /proc/[pid]/status 说明 /proc/[pid]/status中所保存的信息除了内存信息,还包括进程IDs.信号等信息,此处暂时只介绍内存相关的信息. 字段                 说明 VmPeak        进程所使用的虚拟内存的峰值 VmSize         进程当前使用的虚拟内存的大小 VmLck          已经锁住的物理内

详细讲解Linux系统Iptables规则执行顺序

预备知识(转): iptable有三种队列(表)规则,mangle queue, filter queue, nat queue. 1.The first is the mangle table which is responsible for the alteration of quality of service bits in the TCP header. 2.The second table is the filter queue which is responsible for pa

Linux系统中重复执行命令的方法小结

  普通的重复执行命令 实际操操作过程中,经常会遇到重复执行同一命令,以观察其结果变化的情况,以前经常是上下键加回车,或是Ctr+p然后回车的方式. 现在告诉大家一个好用的命令--watch,它可以全屏执行这个命令,并显示执行结果.例如: 代码如下: #watch uptime #watch -t uptime #watch -d -n 1 netstat -ntlp #watch -d 'ls -l | fgrep goface' //监测goface的文件 #watch -t -differ

阿里云使用Linux系统有哪些问题

ECS Linux服务器发现未授权登录用户 ECS Linux服务器配置yum源 ECS Linux下解压rar格式的压缩文件 Linux查看实时带宽流量情况 ECS Linux开启swap(虚拟内存) linux磁盘空间用满的处理方法 ECS Linux服务器出现死机或者卡顿现象分析 ECS Linux系统Mysql备份的导入导出 ECS Linux系统查看编码 ECS Linux程序异常退出提示out of memory ECS Linux如何查看端口状态 如何分析php-cgi进程占用cp

进程的切换和系统的一般执行过程【转】

转自:http://www.cnblogs.com/20135124freedom/p/5391170.html 陈民禾 原创作品转载请注明出处 <Linux内核分析>MOOC课程 http://mooc.study.163.com/course/USTC-1000029000 一.关于进程调度的基本知识       进程的几种不同分类:第一种分类:类型一:I/O-bound:频繁的进行I/O,通常会花费很多的时间等待I/O操作的完成:类型二:CPU-bound:计算密集型 ,需要大量的CPU

第八周 进程的切换和系统的一般执行过程【转】

转自:http://www.cnblogs.com/20135305yg/p/5379542.html 一.进程切换的关键代码switch_to分析 进程的调度时机与进程的切换: 操作系统中的进程调度算法是从运行队列中选择一个新进程,选择的过程中运用了不同的策略 进程调度的时机: 中断处理过程(包括时钟中断.I/O中断.系统调用和异常)中,直接调用schedule(),或者返回用户态时根据need_resched标记调用schedule() 内核线程可以直接调用schedule()进行进程切换,

linux中怎样防止rm -rf误删除文件

过程:用ln做目录链接测试时,执行了rm -rf彻底删除该目录链接下的内容,执行完了,才发觉悲剧了.. 后来我想想 可以恢复不,不过后来已经晚了.需要把你的分区 改写只读 ,可是我装系统的时候就一整块... 通过debugfs 查询 目录node  代码如下 复制代码 1966083  (12) .    1966081  (4084) ..   <1966084> (4072) rdesktop.sh    <1966085> (4052) .rdesktop.sh.swp  

在linux系统中执行Runtime.getRuntime().exec(&amp;amp;quot;gunzip -c 原路径/***.unl.gz &amp;amp;gt; 目标路径/***.unl&amp;amp;quot;)

问题描述 在linux系统中执行Runtime.getRuntime().exec("gunzip-c原路径/***.unl.gz>目标路径/***.unl"),执行失败,但没有报错,目标路径没有文件????