需求描述
生产中会遇到用户误操作删除文件系统中文件的情况,而我们经常用的就是Ext文件系统,Ext3/4居多。
本篇文章大致说明下Ext文件系统文件误删后应该如何操作?如何恢复?
工具介绍
网上针对Ext文件系统中文件恢复的文章比较多,用的工具大部分是:extundelete
extundelete介绍:http://extundelete.sourceforge.net/
原理
Linux上删除文件的时候,只会收回其inode,inode表中inode数据不会删除,inode中文件分配的数据块也不会删除,所以可以通过工具扫描inode表,解析之后恢复数据。
恢复前提
- 删除文件的inode没有被重新分配
- 删除文件的inode里分配的数据块没有重新分配给别的inode
所以遇到误删文件后的紧急处理如下:
- 立即停止所有写入;
- 最保险的就是卸载挂载的云硬盘;或者重新挂载为只读模式;
参考
https://blog.csdn.net/u012843189/article/details/80143998
http://blog.51cto.com/ixdba/1566856
实践步骤
下面描述如何通过工具extundelete来恢复Ext文件系统里误删的文件。
安装extundelete
CentOS环境:1
2
3
4
5
6
7
8# yum install -y e2fsprogs* e2fslibs*
# wget //nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
# yum install bzip2
# tar -jxvf extundelete-0.2.4.tar.bz2
# cd extundelete-0.2.4
# ./configure
# make
# make install
extundelete的help如下:
1 | # extundelete --help |
extundelete 常用命令
1 | # extundelete --inode 2 /dev/rbd0 ## 查看根目录下文件信息 |
操作实例
这里以ceph rbd提供的块设备为例讲解如何扫描恢复误删的文件。
首先扫描根目录下的文件信息:
1 | # extundelete --inode 2 /dev/rbd0 |
然后可以执行恢复:
恢复单个文件
1
# extundelete /dev/rbd0 --restore-file labels.lst
恢复一个目录
1
# extundelete /dev/rbd0 --restore-directory log-train
恢复所有
1
# extundelete /dev/rbd0 --restore-all