zoukankan      html  css  js  c++  java
  • Linux 下误删除恢复,(文件名无法找回)

    手贱命令写错了,直接把一个目录下的文件全删了,用下面的方法虽然恢复了,但是还是有几个文件没有找回来。。。(可以找回,但是要在另一个盘进行操作

    如果不小心用rm –rf xxx删除了文件或目录,在ext2文件系统上是可以恢复的,但需要满足以下3个基本条件:

    1. 1.     需要有root的权限;
    2. 2.     删除文件所在的文件系统类型是ext2,可以用”df –T”命令查看文件系统类型;
    3. 3.     安装有debugfs,Linux默认都自带的,可以”whereis debugfs”看下debugfs是否存在。

    满足了以上3个条件就可以开始动手恢复了。被删除的文件数据一般不会实际删除掉,只是索引被删除而已,除非被后面的写磁盘操作覆盖,另外,删除的文件是没办法获取到文件名的,只有一个inode的编号,如果你想通过文件名恢复文件那只是徒劳,不过还是有很多办法准确恢复出我们想要的数据,下面以实际操作过程进行演示:

     

    假设我不小心用”rm *”删除了/home/xuanbiao/delfiles目录下的3个.h文件。

    恢复过程如下:

    1. 1.     查看当前的系统时间,大概确定文件什么时候被删除的,这个后面会有用:

    $ date

    Wed Oct  8 19:56:53 CST 2008

    1. 2.     获取用户的uid,这个后面定位删除文件的时候也会有用,如果不知道是哪个用户删除的也没关系,还可以根据其它的信息来定位:

    $ cat /etc/passwd | grep "xuanbiao"

    xuanbiao:x:663:504::/home/xuanbiao:/bin/bash

    第3列即用户”xuanbiao”对应的uid

    1. 3.     查看一下磁盘的使用情况:

    $ df –T

    Filesystem    Type   1K-blocks      Used Available Use% Mounted on

    /dev/sda1     ext2    10317828   3591220   6202492  37% /

    none         tmpfs     2022720         0   2022720   0% /dev/shm

    /dev/sda3     ext2   340815496  54413776 269089276  17% /home

    以上可以确定删除文件所在的文件系统类型是ext2,磁盘的使用率是17%,由于这台机子有很多用户在使用,而且磁盘还有很大的空间,不用担心删除的文件被覆盖。但你想确保成功率或者机子只有较少用户使用情况下,可以将删除文件所在分区挂载为只读模式:

    $ umount /mnt/entertain

    $ mount /dev/sda3 /mnt/entertain -o ro

    1. 4.     切换到root用户:

    $ su root

    1. 5.     找到debugfs所在位置:

    $ whereis debugfs

    debugfs: /sbin/debugfs /usr/share/man/man8/debugfs.8.gz

    1. 6.     运行debugfs打开删除文件所在的分区:

    $ /sbin/debugfs /dev/sda3

    debugfs 1.35 (28-Feb-2004)

    debugfs: 

    1. 7.     列出所有被删除的文件:

    在上面显示的debugfs命令行下输入lsdel

    debugfs:lsdel

    这个步骤需要一定的时间,分区越大时间越长,debugfs会扫描整个分区的所有indoe,然后将被删除的inode以more的形式打印出来:

    Inode  Owner  Mode    Size    Blocks   Time deleted

    18448394    500 100664 4033517  986/ 986 Tue Jul  1 12:19:41 2008

    13      0 100600   4096    1/   1 Wed Jul  2 14:26:47 2008

    4866049    501  40700      0    1/   1 Thu Jul  3 11:12:46 2008

    4866050    501 100644    383    1/   1 Thu Jul  3 11:12:46 2008

    4866051    501 100644    304    1/   1 Thu Jul  3 11:12:46 2008

    第1列是inode的编号,这个比较重要,第2列是uid,第4列是文件大小,第6列是删除的时间。

    1. 8.     定位被删除的文件:

    Debugfs以more形式列出所有被删除的文件,如果要一个一个查找的话那是比较困难的,首先从删除时间定为,先根据步骤1获取的时间定位到当天删除的文件,如果你能精确到小时或分钟当然最好了:

    / Wed Oct  8

    19628043      0 100644  52049   14/  14 Wed Oct  8 00:00:11 2008

    40618326    584 100644   4096    1/   1 Wed Oct  8 13:38:06 2008

    40618327    584 100644    123    1/   1 Wed Oct  8 13:38:06 2008

    39634369    588 100644  12288    3/   3 Wed Oct  8 15:08:51 2008

    39634368    588 100640  16384    4/   4 Wed Oct  8 15:08:57 2008

    39634362    588 100600 48496640  713/ 713 Wed Oct  8 15:09:04 2008

    39634364    588 100600 48492544  713/ 713 Wed Oct  8 15:09:04 2008

    然后根据uid、删除的大概时间、删除文件个数及文件的大小来定位是哪些文件,先通过步骤2获取的uid观察第2列找到当天该用户删除的项,然后观察某个大概时间里是否刚好有这么多个文件被删除(这是因为用rm *删除的文件时间是一样的),如果文件大小也差不多那就可以很肯定了,这种定位一般是比较准确的,当然你可以把当天的所有删除文件都恢复也是可以的,然后一个一个去确认。

    通过这种方法我定位到了我删除的文件:

    41828370    663 100644   5817    2/   2 Wed Oct  8 19:56:52 2008

    41828371    663 100644   2371    1/   1 Wed Oct  8 19:56:52 2008

    41828372    663 100644   3077    1/   1 Wed Oct  8 19:56:52 2008

    1. 9.     恢复被删除的数据:

    如果文件不多可以通过命令”dump <inode> dst_file_path”一个一个恢复,另外恢复的文件最好存放在其它的分区以避免删除的数据被覆盖:

    debugfs: dump <41828370> /dump/1.h

    恢复了inode编号为41828370的文件,存放为/dump/1.h,打开发现确实是我删除的文件,然后就可以放心的把下面2个文件也一起恢复了。

     

    但如果被删除的文件比较多,一个一个恢复的话那是比较麻烦的。可以选择批量恢复,步骤如下:

    1)     将刚定位的inode项原始数据保存在一个文件里,如dellist

    41828370    663 100644   5817    2/   2 Wed Oct  8 19:56:52 2008

    41828371    663 100644   2371    1/   1 Wed Oct  8 19:56:52 2008

    41828372    663 100644   3077    1/   1 Wed Oct  8 19:56:52 2008

    2)     然后将dellist文件数据转换一下:

    $ cat dellist | awk '{print "dump <"$1"> /dump/"$1".h"}' > cmd

    cmd的内容如下:

    dump <41828370> /dump/41828370.h

    dump <41828371> /dump/41828371.h

    dump <41828372> /dump/41828372.h

    3)     批量恢复文件:

    $ /sbin/debugfs /dev/sda3 < cmd

    运行后就会在/dump/目录下生成了所有被删除的文件,

    10.  将文件转移到xuanbiao用户目录下:

    将恢复的文件拷到/home/xuanbiao的某个目录下,然后更改文件的所属者就OK了

    $ chown xuanbiao:nsqa *

  • 相关阅读:
    Zend Framework 2.1.5 中根据服务器的环境配置调用数据库等的不同配置
    在基于 Eclipse 的 IDE 中安装和使用 Emmet(ZenCoding)
    【翻译】Emmet(Zen Coding)官方文档 之六 自定义 Emmet
    【翻译】Emmet(Zen Coding)官方文档 之二 缩写
    【翻译】Emmet(Zen Coding)官方文档 之七 一览表
    【翻译】Emmet(Zen Coding)官方文档 之三 CSS 缩写
    【翻译】Emmet(Zen Coding)官方文档 之四 动作
    【翻译】Emmet(Zen Coding)官方文档 之一 web 编程的必备工具
    Zend Framework 2 时区设置警告问题的解决
    【翻译】Emmet (Zen Coding) 元素类型
  • 原文地址:https://www.cnblogs.com/chenhuan001/p/7088057.html
Copyright © 2011-2022 走看看