您的位置:首页 > 运维架构 > Linux

运维日记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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  运维