在麒麟OS中误删ext4文件后,可通过extundelete(依赖日志)、photorec(原始扫描)、debugfs(inode级恢复)或journal日志回溯四种方法恢复数据,前提均为未覆盖写入。

如果您在麒麟OS系统中误删除了ext4分区上的重要文件,且尚未进行大量写入操作,则存在较高概率通过专业工具恢复部分或全部数据。以下是针对该场景的多种可执行恢复方法:
一、使用extundelete恢复已删除文件
extundelete是一款专为ext3/ext4文件系统设计的开源恢复工具,依赖于文件系统未被覆盖的日志信息(如inode状态和extents),适用于删除后未重启、未写入新数据的场景。
1、打开终端,确认目标分区设备名,例如/dev/sdb1,使用命令:sudo fdisk -l | grep ext4。
2、安装extundelete:执行sudo apt update && sudo apt install extundelete(麒麟OS基于Ubuntu/Debian源时适用);若源中无包,需从源码编译安装。
3、卸载目标分区(必须卸载):运行sudo umount /dev/sdb1;若提示busy,使用sudo lsof +D /mnt/data排查并终止相关进程。
4、执行恢复:若需恢复全部文件,运行sudo extundelete /dev/sdb1 --restore-all;若仅恢复特定目录,使用sudo extundelete /dev/sdb1 --restore-directory /home/user/docs。
5、恢复结果默认保存在当前目录下的RECOVERED_FILES文件夹中,检查后手动迁移至安全位置。
二、使用photorec扫描原始数据块
photorec不依赖文件系统结构,而是直接扫描磁盘扇区中符合文件头尾特征的数据块,适用于ext4元数据严重损坏、extundelete失效或分区已被格式化的情况,但恢复后的文件将丢失原始名称与目录结构。
1、安装testdisk包(含photorec):执行sudo apt install testdisk。
2、运行photorec:输入sudo photorec,按提示选择对应磁盘和目标逻辑分区(如/dev/sdb1)。
3、在文件系统类型选项中,选择Other(即使原为ext4,因photorec跳过文件系统解析)。
4、指定存储恢复文件的目标路径(**必须位于其他物理磁盘或挂载的独立分区**),避免写入原分区造成二次覆盖。
5、选择要恢复的文件类型(可全选或按需勾选),启动扫描;扫描时间取决于分区大小及磁盘性能,完成后进入文件提取阶段。
三、使用debugfs交互式恢复inode级数据
debugfs是e2fsprogs套件中的底层ext系列文件系统调试工具,允许直接访问未清除的inode内容,适用于知晓被删文件大致inode编号或需提取特定残留数据块的情形。
1、获取被删文件的inode号(如有备份或记得删除前ls -i输出);若无,先运行sudo debugfs /dev/sdb1进入交互模式。
2、在debugfs提示符下输入lsdel,列出所有已删除但仍保留在磁盘上的inode条目,记录目标文件的inode编号(如123456)。
3、退出debugfs,执行恢复命令:sudo debugfs -R "dump /tmp/recovered_file" /dev/sdb1。
4、恢复后的文件无扩展名且可能含碎片,需用file命令识别类型,并结合hexdump或strings进一步分析内容完整性。
四、挂载为只读快照并启用ext4日志回溯
若系统启用了ext4的journal功能且日志未被覆写,可通过挂载只读快照并解析journal内容尝试定位删除操作前的状态,该方法对系统配置与操作时机要求极高,仅适用于高级用户。
1、确保目标分区未被挂载,执行sudo dumpe2fs -h /dev/sdb1 | grep -i journal,确认Journal inode存在且状态为clean。
2、创建内存映射只读镜像:sudo dd if=/dev/sdb1 of=/tmp/sdb1.img bs=4M count=1024(截取前几GB用于快速分析)。
3、使用sudo debugfs -j /tmp/sdb1.img -R "logdump"导出日志摘要,搜索包含unlink或delete关键字的时间戳段落。
4、定位到对应事务ID后,使用sudo debugfs -j /tmp/sdb1.img -R "logdump -t 0xabc123"(替换为实际事务ID)提取该次操作涉及的inode变更详情。











