文件恢复工具extundelete官网:http://extundelete.sourceforge.net/

使用方法,在页面里找到download,下载源码安装包:extundelete-0.2.4.tar.bz2

安装:

[root@localhost extundelete-0.2.]# yum -y install e2fsprogs-libs e2fsprogs e2fsprogs-devel
[root@localhost extundelete-0.2.]# rpm -q e2fsprogs-libs e2fsprogs e2fsprogs-devel
[root@localhost extundelete-0.2.]# tar jxvf extundelete-0.2..tar.bz2
[root@localhost extundelete-0.2.]# cd extundelete-0.2.
[root@localhost extundelete-0.2.]#extundelete-0.2.]# ./configure && make && make install

使用:

#查看能恢复的数据:
[root@localhost ~]# extundelete /dev/sdc1 --inode
#恢复单个文件
[root@localhost ~]# extundelete /dev/sdc1 --restore-file somefile
#恢复目录
[root@localhost ~]# extundelete /dev/sdc1 --restore-directory /somedir
#恢复所有文件
[root@localhost ~]# extundelete /dev/sdb1 --restore-all

使用步骤不再赘述,详情请参考别人博客:https://www.cnblogs.com/yuhuLin/p/7027253.html

但是让我郁闷的是测试的时候居然报错了:(而且问题我也没有解决,如果着急就别往下看了)

报错的是Centos7.4 + SSD硬盘 + ext4,但是找了另外一个Centos7 +SAS+ext4的硬盘恢复成功了,看来恢复工具也不是万能的,数据无价,谨慎操作才是根本。

[root@ceph01 src]# ./extundelete /dev/sdc1  --restore-all
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Loading journal descriptors ... descriptors loaded.
*** Error in `./extundelete': double free or corruption (!prev): 0x000000000141efd0 ***
======= Backtrace: =========
/lib64/libc.so.(+0x7c619)[0x7f84baff0619]
./extundelete[0x40ce6b]
./extundelete[0x40ff86]
./extundelete[0x404654]
/lib64/libc.so.(__libc_start_main+0xf5)[0x7f84baf95c05]
./extundelete[0x404b8f]
======= Memory map: ========
-0041c000 r-xp fd: /home/wangdong/extundel/extundelete-0.2./src/extundelete
0061c000-0061d000 r--p 0001c000 fd: /home/wangdong/extundel/extundelete-0.2./src/extundelete
0061d000-0061e000 rw-p 0001d000 fd: /home/wangdong/extundel/extundelete-0.2./src/extundelete
0061e000-0061f000 rw-p :
013fd000-0143f000 rw-p : [heap]
7f84b4000000-7f84b4021000 rw-p :
7f84b4021000-7f84b8000000 ---p :
7f84ba717000-7f84bad58000 rw-p :
7f84bad58000-7f84bad6f000 r-xp fd: /usr/lib64/libpthread-2.17.so
7f84bad6f000-7f84baf6e000 ---p fd: /usr/lib64/libpthread-2.17.so
7f84baf6e000-7f84baf6f000 r--p fd: /usr/lib64/libpthread-2.17.so
7f84baf6f000-7f84baf70000 rw-p fd: /usr/lib64/libpthread-2.17.so
7f84baf70000-7f84baf74000 rw-p :
7f84baf74000-7f84bb12c000 r-xp fd: /usr/lib64/libc-2.17.so
7f84bb12c000-7f84bb32c000 ---p 001b8000 fd: /usr/lib64/libc-2.17.so
7f84bb32c000-7f84bb330000 r--p 001b8000 fd: /usr/lib64/libc-2.17.so
7f84bb330000-7f84bb332000 rw-p 001bc000 fd: /usr/lib64/libc-2.17.so
7f84bb332000-7f84bb337000 rw-p :
7f84bb337000-7f84bb34c000 r-xp fd: /usr/lib64/libgcc_s-4.8.-.so.
7f84bb34c000-7f84bb54b000 ---p fd: /usr/lib64/libgcc_s-4.8.-.so.
7f84bb54b000-7f84bb54c000 r--p fd: /usr/lib64/libgcc_s-4.8.-.so.
7f84bb54c000-7f84bb54d000 rw-p fd: /usr/lib64/libgcc_s-4.8.-.so.
7f84bb54d000-7f84bb64e000 r-xp fd: /usr/lib64/libm-2.17.so
7f84bb64e000-7f84bb84d000 ---p fd: /usr/lib64/libm-2.17.so
7f84bb84d000-7f84bb84e000 r--p fd: /usr/lib64/libm-2.17.so
7f84bb84e000-7f84bb84f000 rw-p fd: /usr/lib64/libm-2.17.so
7f84bb84f000-7f84bb938000 r-xp fd: /usr/lib64/libstdc++.so.6.0.
7f84bb938000-7f84bbb37000 ---p 000e9000 fd: /usr/lib64/libstdc++.so.6.0.
7f84bbb37000-7f84bbb3f000 r--p 000e8000 fd: /usr/lib64/libstdc++.so.6.0.
7f84bbb3f000-7f84bbb41000 rw-p 000f0000 fd: /usr/lib64/libstdc++.so.6.0.
7f84bbb41000-7f84bbb56000 rw-p :
7f84bbb56000-7f84bbb98000 r-xp fd: /usr/lib64/libext2fs.so.2.4
7f84bbb98000-7f84bbd98000 ---p fd: /usr/lib64/libext2fs.so.2.4
7f84bbd98000-7f84bbd99000 r--p fd: /usr/lib64/libext2fs.so.2.4
7f84bbd99000-7f84bbd9b000 rw-p fd: /usr/lib64/libext2fs.so.2.4
7f84bbd9b000-7f84bbd9e000 r-xp fd: /usr/lib64/libcom_err.so.2.1
7f84bbd9e000-7f84bbf9d000 ---p fd: /usr/lib64/libcom_err.so.2.1
7f84bbf9d000-7f84bbf9e000 r--p fd: /usr/lib64/libcom_err.so.2.1
7f84bbf9e000-7f84bbf9f000 rw-p fd: /usr/lib64/libcom_err.so.2.1
7f84bbf9f000-7f84bbfc0000 r-xp fd: /usr/lib64/ld-2.17.so
7f84bbfd6000-7f84bc1ae000 rw-p :
7f84bc1bd000-7f84bc1c0000 rw-p :
7f84bc1c0000-7f84bc1c1000 r--p fd: /usr/lib64/ld-2.17.so
7f84bc1c1000-7f84bc1c2000 rw-p fd: /usr/lib64/ld-2.17.so
7f84bc1c2000-7f84bc1c3000 rw-p :
7ffc13f68000-7ffc13f89000 rw-p : [stack]
7ffc13fc8000-7ffc13fca000 r-xp : [vdso]
ffffffffff600000-ffffffffff601000 r-xp : [vsyscall]

磁盘本身SSD的,用VMWare虚拟机虚拟出来的磁盘,挂载到系统上,用mkfs.ext4格式化成了ext4,也mount上去,写了文件,然后删除,然后umount,然后恢复,结果竟然挂了。官网说依赖包“ensure you have e2fsprogs version 1.41 or newer”,我的也符合要求啊。

[root@localhost extundelete-0.2.]# rpm -qa | grep e2fsprogs
e2fsprogs-devel-1.42.-.el7.x86_64
e2fsprogs-libs-1.42.-.el7.x86_64
e2fsprogs-1.42.-.el7.x86_64

为什么?看代码也不是很多,看看自己能不能定位出问题。

#打开core
[root@localhost src]# ulimit -c unlimited
#运行产生core文件
[root@localhost src]# ./extundelete /dev/sdc1 --restore-all
#调试运行后产生的core文件
[root@localhost src]# gdb extundelete core.
(gdb) bt
# 0x00007f80061a71f7 in raise () from /lib64/libc.so.
# 0x00007f80061a88e8 in abort () from /lib64/libc.so.
# 0x00007f80061e6f47 in __libc_message () from /lib64/libc.so.
# 0x00007f80061ee619 in _int_free () from /lib64/libc.so.
# 0x000000000040ce6b in init_journal (fs=fs@entry=0x1f8e0a0, jfs=0x1f8e0a0, jsb=jsb@entry=0x7fffdea06aa0) at extundelete.cc:
# 0x000000000040ff86 in examine_fs (fs=0x1f8e0a0) at cli.cc:
# 0x0000000000404654 in main (argc=, argv=0x7fffdea07088) at cli.cc:
(gdb)

最终出错在extundelete.cc:1167,恕本人才疏学浅,gdb各种运行跟踪打断点,也没看出代码有什么问题,根据报错的情况可以大概猜测“应该是某种原因导致一开始new的指针类型发生了变化,导致delete的时候释放越界导致的,并非是多次释放指针造成的”。想想只是实验一下功能,一次性的,那我直接在最后return掉,不释放内存,行不行

                 Log::debug << std::endl;
}
return ; finally:
delete[] buf;
delete[] descbuf;
delete[] blocks;

结果这一关过了,下一关又卡住了

(gdb) bt
# 0x00007fef076451f7 in raise () from /lib64/libc.so.
# 0x00007fef076468e8 in abort () from /lib64/libc.so.
# 0x00007fef07684f47 in __libc_message () from /lib64/libc.so.
# 0x00007fef0768c619 in _int_free () from /lib64/libc.so.
# 0x00007fef0820e716 in ext2fs_free () from /lib64/libext2fs.so.
# 0x00007fef082092d7 in ext2fs_close2 () from /lib64/libext2fs.so.
# 0x000000000040466a in main (argc=, argv=0x7ffe9c53c598) at cli.cc:

我不closefs行不行

         //errcode = ext2fs_close (fs);
if (errcode) {
com_err(Config::progname.c_str(), errcode, "when trying to close filesystem");
}

结果,虽然不coredump了,但是也没成功:(RECOVERED_FILES一个文件都没有)

[root@localhost src]# ./extundelete /dev/sdc1  --restore-all
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Loading journal descriptors ... descriptors loaded.
Searching for recoverable inodes in directory / ...
recoverable inodes found.
Looking through the directory structure for deleted files ...
recoverable inodes still lost.
No files were undeleted.

但我磁盘中本身是有文件的:

[root@localhost src]# extundelete /dev/sdc1 --inode
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... groups loaded.
Group:
Contents of inode :
| ed ff 5c 0c 3a 5c | .A.......@\.:@\
| 0c 3a 5c | .:@\............
| 0a f3 | ................
| 3a | ............:$..
| | ................
| | ................
| | ................
| | ................
| 1c f0 f5 f0 f5 1c db be | ......b..b...R
| 5c | t6@\............
00a0 | | ................
00b0 | | ................
00c0 | | ................
00d0 | | ................
00e0 | | ................
00f0 | | ................ Inode is Allocated
File mode:
Low bits of Owner Uid:
Size in bytes:
Access time:
Creation time:
Modification time:
Deletion Time:
Low bits of Group Id:
Links count:
Blocks count:
File flags:
File version (for NFS):
File ACL:
Directory ACL:
Fragment address:
Direct blocks: , , , , , , , , , , ,
Indirect block:
Double indirect block:
Triple indirect block: File name | Inode number | Deleted status
.
..
lost+found
test Deleted

由于没有研究过ext4文件系统相关的东西,因此此问题也没看出什么眉目,目前也不急于使用这个功能,问题也没有解决,待之后研究出结果之后出来结帖。

本人测试所使用的系统:

[root@ceph01 src]# cat /etc/redhat-release
CentOS Linux release 7.4. (Core)
[root@ceph01 src]# uname -a
Linux ceph01 3.10.-693.2..el7.x86_64 # SMP Tue Sep :: UTC x86_64 x86_64 x86_64 GNU/Linux

唉。。。。。。

Linux上文件恢复工具的更多相关文章

  1. linux上文件的上传和下载

    现整理一篇linux上文件的上传和下载 第一种方式就是在windos上安装工具 如: 工具如何使用我就不赘述了,easy 第二种方式就是使用liux的命令(首先是文件上传) 上传文件(首先创建文件夹如 ...

  2. 如何用golang获取linux上文件的访问/创建/修改时间

    在linux上想获取文件的元信息,我们需要使用系统调用lstat或者stat. 在golang的os包里已经把stat封装成了Stat函数,使用它比使用syscall要方便不少. 这是os.Stat的 ...

  3. 第3章 Linux上文件的权限管理

    3.1 文件/目录的权限 3.1.1 文件的权限 每个文件都有其所有者(u:user).所属组(g:group)和其他人(o:other)对它的操作权限,a:all则同时代表这3者.权限包括读(r:r ...

  4. windows下实现linux的远程访问以及linux上文件的上传和下载

    在网络性能.安全性.可管理性上,Linux有着其他系统无法比拟的强大优势,而服务器对这些方面要求特别高,因此Linux常常被用来做服务器使用.而当我们需要维护linux服务器的时候,就需要远程访问li ...

  5. linux 下文件恢复工具extundelete介绍

        下载 http://extundelete.sourceforge.net/ bunzip2 extundelete-0.2.0.tar.bz2 tar xvf extundelete-0.2 ...

  6. UltraEdit 和Notepad++ 使用ftp直接编辑linux上文件

    安装ftp服务 apt-get install vsftpd 安装完后更改相关配置文件 /etc/vsftpd.conf cp /etc/vsftpd.conf /etc/vsftpd.conf.ol ...

  7. linux上文件挂载的案例

    cat /etc/fstab 将172.20.20.117上的172.20.20.117:/data/nfs/zichan/目录挂载到172.20.20.112机器上,其实类似目录共享 在需要挂载的机 ...

  8. linux上文件内容去重的问题uniq/awk

    1.uniq:只会对相邻的行进行判断是否重复,不能全文本进行搜索是否重复,所以往往跟sort结合使用. 例子1: [root@aaa01 ~]# cat a.txt 12 34 56 12 [root ...

  9. 关于linux上文件无法正确显示中文的情况解决

    其实有遇到过多次,而且还有几次是css在预编译的时候,系统编码不对也会报错. 贴一个写的还不错的文章:http://www.360doc.com/content/11/0728/09/7102324_ ...

随机推荐

  1. C#发送内置图片的html格式邮件的代码

    将写内容过程经常用的内容段备份一次,下面的内容是关于C#发送内置图片的html格式邮件的内容,应该对码农们也有用处.MailMessage m = new MailMessage();m.Subjec ...

  2. 通过本质看现象:关于Integer受内部初始化赋值范围限制而出现的有趣现象

    左手代码,右手文章.——朱季谦 这是我的第一篇技术博客,作为一名技术小菜鸟,总体而言显得很拙见,但也算是成长路上的一个小脚印,希望能在以后的日子里,可以对JAVA技术有一个更加深入的思考与认识. 前几 ...

  3. 关于BDD100k数据输入处理mask变为56*56

    Mask_rcnn数据训练 Mask rcnn往里面送的是数据原图,可能没有把mask送里面,而且mask的数据 56*56,仿照coco——inspect_data重点考虑 Bounding box ...

  4. iOS日历控件

    项目需要,前一阵子重构了下iPad工程,添加了一个滚动无缝日历. 当时没有头绪,网上找了一个源码改吧改吧就上线了(参考链接),这个功能很多而且流畅性也特别好,推荐不会写的可以参考下. 这几天,活不太忙 ...

  5. GP数据库 常用SQL语句

    GP数据库 常用SQL语句 --1,查看列名以及类型 select upper(column_name) ,data_type from information_schema.columns wher ...

  6. 如何实现win7系统多用户同时远程登录

    使用Win7系统的时候,不同的管理账号远程登录桌面时,会把远程登录的人给记下来.如何设置Win7让两个账号的两会话同时存在,且相互之间不冲突. 方法/步骤     第一步:创建需要远程的两个用户账号. ...

  7. 自制操作系统Antz(11)——实现shell(下)命令响应

    我已经规范了系统代码风格,类似于按照linux分包,把各部分功能区分开了 Antz系统更新地址 Linux内核源码分析地址 Github项目地址 在之前的任务中,我们已经通过直接操作显卡驱动完成了简单 ...

  8. ThreadLocal的意义和实现

    可以想像,如果一个对象的可变的变量被多个线程访问时,必然是不安全的. 在单线程应用可能会维持一个全局的数据库连接,并在程序启动时初始化这个连接对象,从而避免在调用每个方法时都传递一个Connectio ...

  9. Python 调用 C# dll库最简方法

    1.为什么要跨平台编程?双平台编程或多平台编程,只是为提供更好开发更兼容的解决方案的一种手段,编程时服务于产品和客户的,也是因地制宜. 先安装python所需的库clr ,我这里已经安装了,可以去对应 ...

  10. restorecon【转】

    本文转载自:https://blog.csdn.net/sinat_36888624/article/details/6076650 estorecon命令用来恢复SELinux文件属性即恢复文件的安 ...