如何从已被擦除且变为未分配状态的整个ext4磁盘恢复数据?
如何从已被擦除且变为未分配状态的整个ext4磁盘恢复数据?
先别慌!你这种情况——刚擦除磁盘就失败,之后完全没挂载或写入过数据,恢复的概率其实非常高,毕竟ext4的核心文件系统结构还没被新数据覆盖。下面是一步步的实操建议:
第一优先级:绝对别碰这块磁盘
别挂载它,别往上面写任何东西,哪怕是临时文件也不行。现在磁盘上的残留数据还完整,一旦写入新内容,就可能彻底覆盖掉要恢复的文件,到时候神仙也救不了。先做磁盘镜像,再在镜像上操作
直接在原磁盘上恢复有风险,最好先给整个磁盘做个镜像文件,后续操作都在镜像上进行:sudo dd if=/dev/sdX of=/path/to/external/disk/recovery.img bs=4M status=progress把
/dev/sdX换成你要恢复的磁盘(比如原来的sdb),/path/to/external/disk/要选一个空间足够大的外部存储路径,bs=4M是加快镜像速度,status=progress能看到实时进度。先用TestDisk尝试恢复分区表
TestDisk是专门恢复分区和文件系统的工具,适合你这种分区被擦除但文件内容还在的情况:- 如果是NixOS,先进入包含TestDisk的shell:
nix-shell -p testdisk - 运行
sudo testdisk,选择要恢复的磁盘(或者刚才做的镜像文件recovery.img) - 选择分区表类型(一般是
Intel/PC partition),然后按Analyze->Quick Search - 如果扫描到原来的ext4分区,选中它按
P就能预览里面的文件,确认是你要的内容后,按Write恢复分区表,重启系统后就能正常挂载磁盘了。
- 如果是NixOS,先进入包含TestDisk的shell:
如果TestDisk没找到分区,用PhotoRec按文件签名恢复
要是分区表彻底找不回来,PhotoRec可以跳过分区表,直接通过文件的签名(比如JPG的开头标识、PDF的特征码)来恢复文件:- 运行
sudo photorec,同样选择目标磁盘或镜像文件 - 选择要扫描的区域(这里选
Free空间,因为磁盘现在是未分配状态) - 选择恢复文件的保存目录必须是外部磁盘,绝对不能选要恢复的磁盘本身
- 开始扫描,它会自动识别并恢复各种类型的文件,恢复后可能会给文件重命名,需要你自己慢慢整理分类。
- 运行
额外提醒
- 恢复出来的文件可能有损坏,但大部分完整的文件都能正常打开
- 如果是极其重要的数据,自己操作没把握的话,可以找专业数据恢复公司,但成本会比较高,不过你的情况自己操作应该就能搞定
备注:内容来源于stack exchange,提问作者0x9c




