Linux恢复文件双手锏

Posted Linux无限探索

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux恢复文件双手锏相关的知识,希望对你有一定的参考价值。

当你在系统中有意或无意地使用 shift + delete 组合键、删除选项,或是清空回收站的方式来删除一个文件时,该文件的内容并没有从硬盘(或是其它存储设备)上直接销毁。它仅仅是从系统的目录结构中被移除,然后你在删除文件的目录下就看不到该文件了,但是这个文件仍然存在你磁盘中的某个位置上。如果你有一个合适的工具和相关的专业知识,你就可以从电脑中恢复已丢失的文件。然而,随着你存储的文件越来越多,删除的文件将会被覆盖,你可能只能恢复最近删除的文件了。

在这篇文章中,我们将阐明如何在 Linux 系统中使用 TestDisk 来恢复硬盘上已删除或丢失的文件,它是非常优秀的修复工具,随一款免费的叫做 PhotoRec 的工具发布。PhoteRec 工具用于从存储介质比如硬盘,数码相机和 cdrom 设备中恢复丢失的文件。(LCTT 译注:PhotoRec 的意思是 Photo Recovery,不是 Photo Recorder。)

在 Linux 系统中安装 TestDisk(PhotoRec)

在系统中执行以下相关的命令来安装 TestDisk:

------- On Debian/Ubuntu/Linux Mint -------
$ sudo apt-get install testdisk
------- On CentOS/RHEL/Fedora -------
$ sudo yum install testdisk
------- On Fedora 22+ -------
$ sudo dnf install testdisk
------- On Arch Linux -------
$ pacman -S testdisk
------- On Gentoo -------
$ emerge testdisk

如果你的 Linux 系统仓库中没有这个安装包,可以从 这里 下载然后在 Live CD 中运行即可。

这个安装包也可以在应急修复 CD 工具中找到,比如 Gparted LiveCD 、 Parted Magic 、 Ubuntu Boot CD 、 Ubuntu-Rescue-Remix 及其它工具等。

安装完成之后,使用 root 账号权限打开文本窗口,启动 PhotoRec,并指定已删除文件的分区:

$ sudo photorec /dev/sda3

你将会看到下面的交互界面:

Linux 系统 PhotoRec 数据恢复工具

使用左右箭头选择菜单选项,按回车键确认。要继续恢复操作,选择[Proceed]并单击 Enter。

你将看到下面的界面:

选择分区进行文件恢复

选择 [Options] 来查看可用的恢复选项,如下图所示:

Linux 系统文件恢复选项

按Q返回,在下图界面,你可以指定你想要查询并恢复的文件扩展名。因此,选择[File Opt],按回车键确认。

按s来选择或取消选择所有的文件扩展名,如果你已经取消选择了所有的文件扩展名,只需要使用向右箭头选择你想要恢复的文件类型即可(或者按向左箭头取消选择)。

例如,我想恢复所有系统中丢失的.mov类型的文件:

指定恢复文件类型

按b键保存设置,之后你应该看到如下图所示信息。单击回车键返回(或者按Q键),再按Q键返回到主界面。

保存文件恢复设置

现在选择[Search]开始文件恢复。在下图中,选择存储文件分区的文件系统类型,然后按回车键。

选择文件系统类型来恢复删除的文件

下一步,如下图所示,选择是仅对空闲空间还是整个分区进行分析。注意选择整个分区将会让操作过程变得更长更慢。选择合适的选项后,按回车键继续。

选择文件系统进行分析

选择一个目录用于存储将要恢复的文件,选择完成之后,按C键继续。选择不同分区的目录,以避免当更多的文件存储在这个分区时覆盖掉已删除的文件。

按向左箭头返回到根分区下。

选择要保存恢复文件的目录

下图显示正在被恢复的指定类型的已删除文件。你可以按回车键来停止操作。

注意:在恢复的过程中,你的系统会变得很慢,很可能会卡住一段时间,请耐心等待直至恢复完成。

在 Linux 系统中恢复已删除的文件

最后, Photorec 工具将会显示出已恢复文件的数量及保存的路径。

Linux 文件恢复情况汇总

默认情况下,已恢复的文件将会以 root 账号权限保存,因此,你需要以提升权限的方式打开文件管理器来访问这些文件。

使用如下命令(指定你的文件管理器):

$ gksudo nemo
或
$ gksudo nautilus
想了解更多的信息,访问 PhotoRec 官网: http://www.cgsecurity.org/wiki/PhotoRec。

到此为止吧!在这篇文章中,我们阐明了使用 PhotoRec 工具来恢复磁盘中已删除或丢失文件每一个步骤。这是目前为止我使用过的最可靠和有效的恢复工具,如果你知道还有其它相似的工具,请在评论中跟大家分享。


via: http://www.tecmint.com/photorec-recover-deleted-lost-files-in-linux/

作者:Aaron Kili 译者:rusking 校对:jasminepeng

本文由 LCTT 原创编译,Linux中国 荣誉推出

原文来自:https://linux.cn/article-8122-1.html

本文地址:https://www.linuxprobe.com/photorec-testdisk.html 

本文原创地址:https://www.linuxprobe.com/photorec-testdisk.html

linux extundelete 删除文件恢复

  • extundelete是基于Linux的一个数据恢复工具,它通过分析文件系统的日志,解析出所有文件的inode信息,从而可以恢复Linux下主流的ext3,ext4文件系统下被误删除的文件。
  • [问题案例]最近看到群里提到如何恢复LINUX下ext4误删的文件,之前听说过ext3分区恢复工具ext3grep,但是恢复ext4一直没有概念,而且目前线上的系统分区格式都是ext4,SO网上找到了一款叫extundelete的文件恢复工具,该工具最给力的一点就是支持ext3/ext4双格式分区恢复,对我们运维攻城狮算是一款神器级别的软件,这里整理了如下文档,供大家参考。
  • 在安装extundelete之前需要安装e2fsprogs,e2fsprogs-libs,e2fsprogs-devel。

    这里用:yum install e2fsprogs e2fsprogs-libs e2fsprogs-devel 来完成安装。

     

     

    注意事项

    • 恢复文件的时候一定要卸载磁盘分区

     

  •  

    虚拟机:        vmware workstation 9.0.2

    操作系统:      CentOS6.3 x64

    extundelete:   extundelete-0.2.4

     

    一.试验环境

    1.首先关闭SELINUX

    # setenforce 0

    # vi /etc/sysconfig/selinux

    ---------------

    SELINUX=disabled

    ---------------

     

    2.在虚拟机上创建一个2G的磁盘

    技术分享

     

    3.进入系统,创建一个2G的主分区

    # fdisk /dev/sdb

    ---------------------

    n+p+1+回车+回车+w

    ---------------------

     

    4.使分区无需重启就能生效

    # partx -a /dev/sdb

     

    5.格式化为ext4分区并挂载

    # mkfs.ext4 /dev/sdb1

    # mkdir /data

    # mount /dev/sdb1 /data

    注: 在实际线上恢复过程中,切勿将extundelete安装到你误删的文件所在硬盘,这样会有一定几率将需要恢复的数据彻底覆盖。

    建议加装一块硬盘将extundelete安装到此硬盘,再做以下操作。

     

    二.extundelete安装

    1.安装依赖包

    # yum install e2fsprogs* -y

     

    2.下载并安装extundelete

    # wget http://nchc.dl.sourceforge.NET/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

    # tar -jxvf extundelete-0.2.4.tar.bz2

    # cd extundelete-0.2.4

    # ./configure --prefix=/usr/local/extundelete

    # make && make install

     

    3.验证是否安装成功

    # cd /usr/local/extundelete/bin

    # ./extundelete -v

    ---------------------

    extundelete version 0.2.4

    libext2fs version 1.41.12

    Processor is little endian.

    ---------------------

     

    4.设置环境变量

    # echo "PATH=/usr/local/extundelete/bin:$PATH" >> /etc/profile

    # echo "export PATH" >> /etc/profile

    # source /etc/profile

     

    5.上传一些图片,安装包等文件到/data目录

    # cd /data

    # yum install lrzsz -y

    # rz

    -------------

    本地文件.....

    -------------

    # ls

    ------------------

    lost+found  MySQL-5.6.10.tar.gz  nginx.conf  pic.jpg

    ------------------

     

    6.全部删除

    # rm -rf *

     

    7.查看被删除文件

    1).查看前需卸载该磁盘分区

    # cd ~

    # umount /dev/sdb1

     

    2).查看文件

    注:一般一个分区挂载到一个目录下时,这个”根”目录的inode值为2

    我们为了查看根目录所有文件,所以查看分区inode为2的这个部分

    # extundelete /dev/sdb1 --inode 2

    --------------------------------

    .....

     

    File name                                       | Inode number | Deleted status

    .                                                 2

    ..                                                2

    lost+found                                        11             Deleted

    mysql-5.6.10.tar.gz                               12             Deleted

    nginx.conf                                        13             Deleted

    pic.jpg                                           14             Deleted

    --------------------------------

    注:标记为”Deleted”的文件则是被删除的文件

     

    8.恢复指定的文件

    注: 默认被删文件会恢复到当前目录下的RECOVERED_FILES目录中去

    # extundelete --restore-file pic.jpg /dev/sdb1  

    # cd RECOVERED_FILES/

    # ll

    ----------------

    -rw-r--r-- 1 root root 52592 8月  13 07:18 pic.jpg

    ----------------

     

    9.完全恢复设备上文件

    # extundelete --restore-all /dev/sdb1

    # ll

    -----------------------------------

    总用量 34464

    -rw-r--r-- 1 root root 35174149 8月  13 07:24 mysql-5.6.10.tar.gz

    -rw-r--r-- 1 root root     4551 8月  13 07:24 nginx.conf

    -rw-r--r-- 1 root root    52592 8月  13 07:18 pic.jpg

    -rw-r--r-- 1 root root    52592 8月  13 07:24 pic.jpg.v1

    -----------------------------------

    注:这里完全恢复并不会把之前恢复的pic.jpg文件覆盖掉,而是重命名为pic.jpg.v1

     

    10.恢复指定的时间点后被删文件

    1).指定一个时间点

    # date -d "Sep 4 03:09:13 2013" +%s

    ------------------

    1378235353

    ------------------

    2).恢复这个时间点后的文件

    # extundelete --restore-all --after “1378235353” /dev/sdb1

    --------------------

    ..........

    --------------------

    注:如果要恢之前的就用before参数。extundelete命令与after结合使用,在进行恢复时非常有用,可以过滤掉那太旧的文件,减小恢复压力。

     

    11.检验是否恢复成功

    # md5sum RECOVERED_FILES/mysql-5.6.10.tar.gz

    ------------------------------------

    9dcee911fb4bc7e977a6b63f4d3ffa63  RECOVERED_FILES/mysql-5.6.10.tar.gz

    ------------------------------------

    上传刚才误删的mysql安装包

    # rz

    ...

    # md5sum mysql-5.6.10.tar.gz

    ---------------------------------

    9dcee911fb4bc7e977a6b63f4d3ffa63  mysql-5.6.10.tar.gz

    ---------------------------------

    MD5值相同,恢复成功。。。

     

    -----------大功告成-------------

     

    extundelete反删除总结

    一、介绍extundelete

             1.extundelete的文件恢复工具,该工具最给力的一点就是支持ext3/ext4双格式分区恢复。

             2. 在实际线上恢复过程中,切勿将extundelete安装到你误删的文件所在硬盘,这样会有一定几率将需要恢复的数据彻底覆盖。

             3. extundelete还是有很大的不完整性,基于整个磁盘的恢复功能较为强大,基于目录和文件的恢复还不够强大。

             4. extundelete执行完毕后在当前目录生产一个RECOVERED_FILES目录,里面即是恢复出来的文件,还包括文件夹。

             5.任何的文件恢复工具,在使用前,均要将要恢复的分区卸载或挂载为只读,防止数据被覆盖使用。

                       umount /dev/partition 

                       mount -o remount,ro /dev/partition

             6.保持良好的习惯,绝对比恢复数据要更简单。

    二、安装

             0.yum install e2fsprogs* e2fslibs* -y

             1.wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

             2.tar -axf extundelete-0.2.4.tar.bz2 -C /usr/local/src

             3.cd /usr/local/src/extundelete-0.2.4

             4../configure --prefix=/usr/local/extundelete

             5.make

       6.make install

             7.ln -s /usr/local/extundelete/bin/* /usr/local/bin/

     

    三、使用及命令

        1. umount或者read only 分区

                       umount /dev/partition 

                       mount -o remount,ro /dev/partition

     

        2.切换到存储恢复文件的目录

                       cd $dir

            

        3.命令

    Usage: extundelete [options] [--] device-file

    Options:

      --superblock           打印指定分区的超级块信息。如不加任何的参数,

    此选项是默认的.     

    extundelete --superblock /dev/sda3 <---> extundelete /dev/sda1

                           

      --journal              显示块的日志信息,同--superblock。

    extundelete --journal /dev/sda1

     

      --after dtime          只恢复指定时间【dtime】(时间戳)之后,被删除的数据

     

    假如删除的时间大概是2011-7-26 14:30

    date -d "Jul 26 14:30" +%s

    得出秒数 1234567890

    恢复此时间后删除的所有文件

    extundelete /dev/sdb1 --after 1234567890 --restore-all

     

      --before dtime         只恢复指定时间【dtime】(时间戳)之前,被删除的数据

     

    Actions:

      --inode ino                显示某分区inode为x的信息,一般是查看该分区下所有的文件.

    extundelete --inode 2 /dev/sda1

     

      --block blk              显示某分区block为x的信息.

     

      --restore-inode ino[,ino,...] 恢复一个或多个指定inode号的文件,该恢复的文件,

    保存在当前目录下的RECOVERED_FILES里,文件名为【file.$inode】

    extundelete /dev/sda1 --restore-inode 13,14

     

      --restore-file ‘filename‘        恢复指定的文件(被删除的),文件位于当前目录下

    的RECOVERED_FILES/$filename,文件名还是原来的              

    extundelete /dev/sda1 --restore-file initramfs-2.6.32-358.el6.x86_64.img

     

      --restore-files ‘read_filename‘  恢复指定的文件(真实存在的)中的内容,

    文件位于当前目录下的RECOVERED_FILES/$filename,文件名还是原来的

                                                            vi test_restore.txt(结尾不可有多余的空格)

                                                                     System.map-2.6.32-358.el6.x86_64

                                                                     config-2.6.32-358.el6.x86_64

                                                                     symvers-2.6.32-358.el6.x86_64.gz

                                                                     vmlinuz-2.6.32-358.el6.x86_64

                                                                     initramfs-2.6.32-358.el6.x86_64.img

             extundelete /dev/sda1  --restore-files test_restore.txt

     

     

      --restore-directory ‘dir-name‘      恢复指定的目录,文件位于当前目录下的

    RECOVERED_FILES/$dir-name,文件名还是原来的

                                                                      extundelete /dev/sda1  --restore-files grub

     

      --restore-all                          恢复某分区里所有被删除的数据,文件名还是原来的

                                                                     extundelete /dev/sda1   --restore-all

       4.例

        ①--superblock

    技术分享

          ②--journal

    技术分享

     

          ③--after dtime

    假如删除的时间大概是2011-7-26 14:30

    date -d "Jul 26 14:30" +%s

    得出秒数 1234567890

    恢复此时间后删除的所有文件

    /usr/local/bin/extundelete /dev/sdb1 --after 1234567890 --restore-all

    技术分享

        ④--before dtime

    技术分享

          ⑤--inode

    技术分享

    技术分享

          ⑥--restore-inode ino[,ino,...]

    技术分享

          ⑦--restore-file ‘filename‘

    技术分享

        ⑧--restore-files ‘read_filename‘

    技术分享

          ⑨--restore-directory ‘dir-name‘

    技术分享

          ⑩--restore-all

    技术分享

    恢复单个目录:

    extundelete  /dev/sdb1 --restore-directory  /MongoDB

    恢复所有误删文件:

    extundelete  /dev/sdb1 --restore-all

     

    extundelete还可以实现恢复某个时间段的数据。可以通过“--after”和“--before”参数实现!

    【原理】extundelete恢复数据的过程:

    在数据被误删除后,第一时间要做的就是卸载被删除数据所在的分区,如果是根分区的数据遭到误删,就需要将系统进入单用户模式,并且将根分区以只读模式挂载。这样做的原因很简单,因为将文件删除后,仅仅是将文件的inode节点中的扇区指针清零,实际文件还储存在磁盘上,如果磁盘继续以读写模式挂载,这些已删除的文件的数据块就可能被操作系统重新分配出去,在这些数据库被新的数据覆盖后,这些数据就真的丢失了,恢复工具也无力回天。所以!以只读模式挂载磁盘可以尽量降低数据库中数据被覆盖的风险,以提高恢复数据成功的比例。

以上是关于Linux恢复文件双手锏的主要内容,如果未能解决你的问题,请参考以下文章

linux恢复映射关系

linux extundelete 删除文件恢复

Linux文件误删除恢复操作

在linux下删除的共享文件怎么恢复

Linux文件误删恢复

linux下误删数据文件恢复