extundelete 检测文件已删除原理

extundelete 检测文件删除主要使用的是ext文件系统中的ext2_dir_entry_2 结构体(又称为目录项):
        struct ext2_dir_entry_2 {
                  __le32 inode; // 文件入口的inode号,0表示该项未使用
                  __le16 rec_len;// 目录项长度
                  __u8 name_len;// 文件名包含的字符数
                  __u8 file_type; // 文件类型

                 //以上四项共占8个字节(定长)
                 char name[255];// 文件名(这是一个数组,根据name_len这一项确定长度,不定长)
};
        在深入理解linux内核架构第九章ext文件系统中讲到该结构体长度必须是4的倍数,所以可以通过 ((dirent->name_len & 0xFF) + 8 + 3) & ~3)获取当前目录项结构大小,这也是extundelete中获取结构体长度的方法。
        对于一个目录来说,它的inode结构体中指向的块存储的一个或多个ext2_dir_entry_2结构体并且连续存放, '.'和'..'是最开始的两个结构体。
        ext2_dir_entry_2结构体中rec_len 是一个偏移量,表示从一个目录项到下一个目录项之间的偏移量,文件系统代码在从该目录删除一项时会利用该信息(为不必移动目录文件的相当一部分内容,不会删除结构体,而是将删除项前一项的rec_len设置为一个值,跳过删除项,指向删除项的后一项,类似于单链表的删除操作)
        可通过下图理解:


上图中得到t2的地址,然后读取该结构体中的信息就可以得到已经删除文件的文件名。
这就是执行extundelete --inode 2 /dev/sda1 获取分区下面已删除文件的原理
        

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值