问题描述:
今天有用户反馈他的台式机2T机械盘无法成功挂载,环境是DELL 台式机 + Ubuntu 22.04,挂载报错信息如下:
挂载文件系统时出错
Error mounting/dev/sda1 at /media/data: can't read superblocck
on/dev/sda1 (udisks-error-quark, 0)
首先使用硬盘检测工具检测到2T硬盘已经存在物理故障,处于崩溃边缘。 给用户先替换了一块2T新硬盘,下面针对故障硬盘做数据恢复操作,恢复时间约24小时,恢复数据接近1T。
Linux 机械硬盘数据恢复完整流程
适用于:
机械硬盘坏道、无法挂载、ext4 superblock 损坏
需要最大化恢复数据
0. 准备工作
硬件准备:三块 2TB 硬盘
| 角色 | 设备名 | 说明 |
|---|---|---|
| 坏盘(源盘) | /dev/sda |
原始损坏的 2TB 机械盘 |
| 镜像存放盘 | /dev/sdb1(挂载点:/media/data1) |
用于存放 disk.img 与 disk.log |
| 恢复盘(目标盘) | /dev/sdc |
用于写入恢复后的完整磁盘镜像 |
三块盘必须物理独立,避免误覆盖。
1. 环境信息
坏盘:
/dev/sda(2TB)镜像存放盘:
/dev/sdb1(挂载点/media/data1)恢复目标盘:
/dev/sdc工具:GNU ddrescue 1.23
2. 安装 ddrescue
sudo apt update
sudo apt install gddrescue
ddrescue --version
3. 第一阶段:快速复制(不重试坏道)
目标:尽可能快地抢救所有可读数据
sudo ddrescue -f -n /dev/sda /media/data1/disk.img /media/data1/disk.log
特点:
跳过坏道
速度快
最大化抢救可读数据
示例输出:
rescued: 1967 GB, bad areas: 1, read errors: 3
pct rescued: 90.37%
注:若镜像盘空间不足,可只恢复部分数据(如本次案例)。
4. 第二阶段:坏道重试(最多 3 次)
适用于镜像盘空间足够、需要最大化恢复率的情况
sudo ddrescue -d -r3 /dev/sda /media/data1/disk.img /media/data1/disk.log
参数说明:
-d:直接磁盘访问,提高坏道读取成功率-r3:对坏道最多重试 3 次使用同一个
disk.log,确保不重复读取已成功区域
本次案例因镜像盘空间不足未执行,但流程必须保留给用户参考。
5. 将 disk.img 写入恢复盘 /dev/sdc(整盘写入)
必须写入整盘
/dev/sdc,不能写入/dev/sdc1
sudo ddrescue -f /media/data1/disk.img /dev/sdc restore.log
示例输出:
average rate: 122 MB/s
run time: 4h 28m
6. fsck 修复恢复盘文件系统
必须在未挂载状态下执行
sudo fsck.ext4 /dev/sdc1
示例输出:
recovering journal
Setting free blocks count...
clean, 7356612/122101760 files, 253088743/488378368 blocks
说明:
journal 成功恢复
文件系统结构完整
无严重损坏
7. 挂载恢复盘并检查数据
sudo mount /dev/sdc1 /mnt
cd /mnt
ls
结果:
所有关键目录可正常访问
数据成功恢复
8. 本次恢复的关键结论
成功恢复 1967GB(≈90%) 数据
剩余未读部分(约 32GB)未影响文件系统结构
fsck 修复后文件系统完全可用
数据恢复成功率极高
9. 本次恢复的经验总结
ddrescue 必须分阶段执行:
第一阶段 -n:快速复制
第二阶段 -r:坏道重试(若空间足够)
镜像文件大小 = 整盘容量,而不是已使用容量
恢复盘必须是整盘写入,而不是写入分区
fsck 是恢复流程中最关键的一步
即使镜像不完整,ext4 仍可能成功修复