用extundelete
恢复Ext文件系统中误删的文件
Linux有时候执行了
rm -rf
等操作误删了文件绝对是一件可怕的事情,好在有一些解决的办法可以临时救急。如果我们的Linux的文件系统属于ext文件系统,那么可以用一款叫做extundelete
的工具。
工具原理
Linux下执行rm并不会真正删除文件,而是将该文件的inode
节点所在的数据块释放。在数据块被系统重新分配前,这部分数据还是可以找回来的。因此删除文件后要立即umount
这个分区,这样做其实是为了让外界不再写入,当然我们也可以只将误删文件所在的分区设为readonly
模式。
强调一遍,如果要保证数据恢复成功率较高,那么在发现误删之后,应当第一时间将被误删的文件所在的分区锁住(即将该分区设置为readonly
或者umount
该分区)。
extundelete
的安装与使用
以CentOS
为例
- 安装
$ sudo yum -y install e2fsprogs e2fsprogs-libs e2fsprogs-devel #安装依赖
$ wget https://astuteinternet.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
$ tar -xjvf extundelete-0.2.4.tar.bz2
$ cd extundelete-0.2.4
$ ./configure
$ sudo make 2>&1 | tee make.log
$ sudo make install 2>&1 | tee make_install.log
使用
- 查找要恢复的文件所在的分区
$ df -h Filesystem 1K-blocks Used Available Use% Mounted on /dev/sda1 495844 64150 406094 14% /boot
- 假设我们需要恢复的文件在/boot分区中,通过如下方式恢复误删的文件。
$ extundelete /dev/sda1 --restore-file hosts #恢复单个文件,恢复名为hosts的误删文件 $ extundelete /dev/sda1 --restore-files test/ #恢复一个目录,恢复名为test的误删目录 $ extundelete /dev/sda1 –-restore-all #恢复整个分区
注:上面的命令会在当前路径下新建一个RECOVERED_FILES文件夹,并将恢复成功的文件放置在这个文件夹中。
经过实际测试,–-restore-all恢复地比较成功,在初次删除后可以很好的恢复文件及目录结构。而恢复单独的文件或者目录则未成功。
原文链接:https://my.oschina.net/looly/blog/261912
如果Linux的文件系统为xfs
或者其他类型,推荐恢复工具PhotoRec
,该工具支持多种平台,包括Windows
,macOS
等,且比较简单使用。