运维日记002-extundelete恢复Linux系统误删除的文件
2016-07-17 18:25
573 查看
运维日记002-extundelete恢复Linux系统误删除的文件
关于extundelete
extundelete是一个用来恢复ext3/ext4分区的文件的工具。它会利用分区中的日志信息尝试恢复被删除的文件。但是,并非每个被删除的文件都能确保被恢复,所以养成良好的备份习惯是非常重要的。extundelete恢复文件的原理
在介绍使用extundelete进行恢复数据之前,简单介绍下关于inode的知识。在Linux下可以通过“ls –id”命令来查看某个文件或者目录的inode值,例如查看根目录的inode值,可以输入:# ls -id /
可以看到,根目录的inode值为2.
在恢复文件时,extundelete会通过文件系统的inode信息(根目录的inode一般为2)来获得当前文件系统下所有文件的信息,包括存在的和已经删除的文件,这些信息包括文件名和inode。然后利用inode信息结合日志去查询该inode所在的block位置,包括直接块,间接块等信息。最后利用dd命令将这些信息备份出来,从而恢复数据文件。
下载与安装
首先请注意,切勿将extundelete安装到你误删除的文件所在的硬盘,这样会有一定几率将需要恢复的数据彻底覆盖。请将待恢复文件的分区挂载为只读。如:#mount -o remount,ro /dev/sda2
目前最新的版本是2013年1月发布的版本0.2.4,请到以下网址下载源代码:
https://sourceforge.net/projects/extundelete/files/latest/download
安装过程
#tar jvxf extundelete-0.2.4.tar.bz2 #cd extundelete-0.2.4 #./configure #make #make install
configure过程中可能会提示缺少g++或者e2fsprogs-devel等包,yum install安装即可。安装完成后,可执行程序默认安装在/usr/local/bin/extundelete位置
用法详解
命令格式:extundelete [options] [action] device-file
其中选项(options)主要有:
–version, -[vV],显示软件版本号。
–help,显示软件帮助信息。
–superblock,显示超级块信息。
–journal,显示日志信息。
–after dtime,时间参数,表示在某段时间之后被删的文件或目录。
–before dtime,时间参数,表示在某段时间之前被删的文件或目录。
动作(action)主要有:
–inode #,显示节点“#”的信息。
–block #,显示数据块“#”的信息。
–restore-inode #[,#,…],恢复命令参数,表示恢复节点“#”的文件,恢复的文件会自动放在当前目录下的RESTORED_FILES文件夹中,使用节点编号作为扩展名。
–restore-file ‘path’,恢复命令参数,表示将恢复指定路径的文件,并把恢复的文件放在当前目录下的RECOVERED_FILES目录中。
–restore-files ‘path’,恢复命令参数,表示将恢复在路径中已列出的所有文件。
–restore-all,恢复命令参数,表示将尝试恢复所有目录和文件。
-j journal,表示从已经命名的文件中读取扩展日志。
-b blocknumber,表示使用之前备份的超级块来打开文件系统,一般用于查看现有超级块是不是当前所要的文件。
-B blocksize,表示使用数据块大小来打开文件系统,一般用于查看已经知道大小的文件。
实战
例如在sdb1分区创建一些文件和文件夹,然后用rm -rf删除之,我们尝试恢复一下,恢复后的文件保存在/tmp下:#mount /dev/sdb1 /mnt/data #cp /etc/fstab /mnt/data #cp /etc/passwd /mnt/data #vim /mnt/data/a.txt #mkdir /mnt/data/b #cd /mnt/data #cp a.txt b/ #cd b #mkdir c #cd .. #rm -rf fstab passwd a.txt b #mount -o remount,ro /dev/sdb1 #cd /tmp #extundelete /dev/sdb1 --inode 2
从输出的信息可以看到被删除的文件及其inode号。例如inode12和13号两个节点对应的文件(分别为fstab和passwd)被删除,则通过以下命令恢复之:
#extundelete /dev/sdb1 --restore-inode 12 #extundelete /dev/sdb1 --restore-inode 13
恢复后的文件存放在当前目录的RECOVERED_FILES目录下,命名为file.#(#为inode号)。然后用diff对比一下恢复后的文件和原文件是否一样:
#diff /etc/fstab file.12 #diff /etc/passwd file.13
没有输出,则表示恢复的文件和原文件是一模一样的。也可以通过文件名或者目录名来恢复文件或整个目录:
# extundelete /dev/sdb1 --restore-file a.txt # extundelete /dev/sdb1 --restore-directory b
也可以一次性的恢复分区内所有被删除的文件
# extundelete /dev/sdb1 --restore-all
在实验中作者发现,extundelete在恢复一些空白文件夹或者零字节文件时会失败。
【参考文献】
http://bbs.51cto.com/thread-1128928-1.html
http://extundelete.sourceforge.net/
http://extundelete.sourceforge.net/options.html
相关文章推荐
- 运维入门
- 运维提升
- 【DevOps】为什么我们永远疲于奔命?
- linux 自动化运维工具ansible的使用详细教程
- MongoDB入门教程之常用的运维技术介绍
- 运维的85 条军规
- 运维工程师的职责和前景
- 运维 -- Python
- ceph 运维常用命令总结
- Linux运维工程师非常有用Linux命令之ifconfig
- 实际运维中处理的事故问题
- 几个常用的Linux监控脚本
- DNS原理及其解析过程
- 线上应用故障排查之一:高CPU占用
- 线上应用故障排查之二:高内存占用
- Lazy Linux: 10 essential tricks for admins
- WEB应用运维你必须知道的HTTP Caching
- 运维提升