ddrescue 的用途
故障盘做镜像用 ddrescue:它支持多轮小步读取与 mapfile 续传,先把易读区域取下来,再逐轮回补难读区。与 dd 相比,它不会因为一个坏块就整体失败,也不会反复摩擦同一区域。
核心目标是不加剧损伤
每多一次上机读取,坏盘进一步恶化的概率就更高。因此策略是尽快生成完整镜像,之后所有分析与提取都在镜像副本上进行,原件只在必要时再读。
基本信息
| 基本命令 | ddrescue -d -r1 /dev/sda disk.img disk.map |
|---|---|
| mapfile | 记录读取状态,支持断点续传与多轮复读 |
| 读取策略 | 先快后慢,逐轮提高重试次数 |
| 设备访问 | -d 直接访问设备,绕过系统缓存 |
| 完成后 | 计算 sha256 并登记证据清单 |
| 适用平台 | Linux 上的 GNU ddrescue(Debian 系包名 gddrescue) |
典型使用场景
- 故障盘的取证镜像
- 坏道分区上的数据抢救
- 需要多次上机读取时保留进度
- 评估可读区域与坏道分布
- 为后续恢复与取证提供稳定副本
两轮读取故障盘
两轮读取故障盘
ddrescue -d -r1 /dev/sda /evidence/disk.img /evidence/disk.map
ddrescue -d -r3 /dev/sda /evidence/disk.img /evidence/disk.map
ls -la /evidence/disk.img /evidence/disk.map
head -n 20 /evidence/disk.map # 查看读取率与坏区分布
sha256sum /evidence/disk.img | tee /evidence/disk.img.sha256输出逐列读法
| 字段 | 含义 | 正常/异常 |
|---|---|---|
| rescued 比例 | 已成功读取的占比 | 长时间停滞说明难读区需要换策略 |
| bad areas | 坏区数量与大小 | 集中分布说明盘面存在局部损伤 |
| errsize | 出错涉及的数据量 | 用于评估数据可恢复程度 |
| 状态字符 | ? 未读、* 坏区、+ 已读 | 按状态规划下一轮读取范围 |
故障盘上机时间越短越好:先取镜像,任何文件系统修复都在镜像副本上做;直接在故障盘上 fsck 或挂载会加剧损伤并改写原始数据。
多轮读取之间可以让盘静置一段时间再继续;磁头不稳的盘可考虑更换读取设备或控制环境温度,但前提是不加剧损伤,且要记录每次尝试的条件。
在镜像副本上做后续处理
在镜像副本上做后续处理
losetup -r /dev/loop0 /evidence/disk.img # 只读回环
mount -o ro,noload /dev/loop0 /mnt/evidence
ls /mnt/evidence | head
cp -a /evidence/disk.img /backup_disk/ # 至少留一份异地副本镜像完成后的收尾
- 计算并保存镜像与 mapfile 的哈希
- 把镜像复制到第二块介质上
- 记录盘序、设备号与采集时间
- 把 mapfile 一并归档,说明读取轮次与条件