基于ext4的文件系统删除文件后的恢复方法

本文详细介绍了Linux ext3/4文件系统中文件删除的原理,以及如何利用extundelete工具进行数据恢复。重点强调了两种无法恢复的情况,并提供了恢复文件的具体步骤,包括安装恢复软件、定位被删除文件的inode等。此外,还提醒了在生产环境中进行恢复操作需要注意的事项。
摘要由CSDN通过智能技术生成

原作:https://blog.51cto.com/chenshifei/1855951

警告:若数据块被覆盖,则无法恢复,第一时间问清楚是什么时候删除的数据,叮嘱不要继续再动了。

一、文件删除原理

    在ext3/4文件系统中,inode索引节点除了存放文件属性还指向文件的block节点,是书的目录,block存放文件的实际数据,是书的每一页,文件的上级目录的block存放的是文件名及其inode节点编号,删除文件实际上是删除文件名和inode节点编号的关联以及inode节点内的指针信息,那么实际上,文件的block还在,加上ext3/4文件系统是日志文件系统,格式化时会分配一个固定大小的空间的日志文件journal,它记录创建和删除文件的记录,当删除一个文件,操作系统首先把文件inode信息和文件名称写入到journal,然后删除文件并清空inode原始数据指针。

二、有两种情况无法恢复

    1)当新的数据写入到被删除文件占用的block后,原来的inode号就指向新的数据,那么这样是无法找回的。

    2)当journal日志文件存满之后,会释放前面的空间,循环使用,存放最新的记录,如果删除文件的记录被覆盖,是恢复不了的。

三、恢复文件的原理

    根据journal日志文件残留inode的信息,定位到相关目录,恢复残留inode对应的block。但日志文件恢复只适合小数据量的恢复,因为journal的空间有限,存放不了太多记录。对于大文件如oracle等数据库文件恢复采用逆向推算和数据文件本身特点来提取。

四、恢复过程

1. 安装恢复软件extundelete

redhat 系列
sudo yum install extundelete -y 

debian/ubuntu系列

sudo apt-get install extundelete -y


2. 如果是挂载的磁盘请卸载磁盘

umount -lf /dev/sdb

3. 从根节点开发扫描,扫描结果如下所示

extundelete --inode 2 /dev/sda2

基于ext4的文件系统删除文件后的恢复方法_ext4

 

4. 找到被删除文件所在的父目录或祖父目录的号码继续向下扫描(目录的inode号是其目录下面其他文件的开始的inode号,所以以它为基准向下扫描)

基于ext4的文件系统删除文件后的恢复方法_删除_02

5. 被删除的文件在3306目录,所以继续以3306的inode号为起始扫描

extundelete --inode 3801090 /dev/sda2

基于ext4的文件系统删除文件后的恢复方法_恢复_03

6. 恢复被删除的文件(执行这条命令前,请cd进入到空间足够的分区,以免恢复造成空间不足)

extundetele --restore-inode 3801094 /dev/sda2

基于ext4的文件系统删除文件后的恢复方法_恢复_04


7. 文件恢复后存放在执行命令时所在目录下的RECOVERED_FILES目录下,名称已变,建议文件数不多,一个个恢复再改名

基于ext4的文件系统删除文件后的恢复方法_ext4_05

基于ext4的文件系统删除文件后的恢复方法_删除_06

8. 恢复整个文件夹则不用改名,做这步前最好把文件夹中的内容备份到其他地方,以免恢复被覆盖,未测试过

extundelete /dev/sda2 --restore-directory /data/3306/

基于ext4的文件系统删除文件后的恢复方法_删除_07

 

9. 注意事项

如果是生产环境,上面有其他业务,应该确保在用户访问量最低的半夜进行,恢复需要卸载磁盘,不卸载没有尝试过,主要是有数据还在写入到磁盘,容易出错。

10. 善后工作

收回非必要的权限,目录755,文件644,上线代码可用jenkins配合shell,shell拷贝前备份原来的包,如果没有这套最好让运维人员帮助上线,原则上开发人员没有任何权限。顶多给一个启动相关服务,查看相关日志的权限。公司最重要的是制度流程,什么人有什么权限必须要有书面规定,人员要权限也必须有申请记录,以免自己背黑锅!
 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值