首页/安全/取证与溯源速查/ddrescue 采集可疑介质
证据与报告57 条

ddrescue 采集可疑介质

对存在坏道的介质用 ddrescue:先快速抓取可读区域,再对疑难区域多轮重试,映射文件让过程可中断续跑。

取证与溯源速查安全更新于 2026-10-13

ddrescue 的适用场合

当介质存在坏道、读取频繁报错时,普通 dd 会在错误处反复重试甚至卡死,既拖长现场时间又加速介质劣化。ddrescue 的设计目标是「先把能读的读出来」:它按块记录读取状态到映射文件,可随时中断并精确续跑,还支持跳过已验证区域、反向读取与多轮重试。对可疑硬盘、老化的 U 盘与存储卡,它是首选的采集工具。

基本信息

适用平台Linux/Unix(GNU ddrescue,包名 gddrescue)
核心参数-d 直接访问设备、-r N 重试次数、第三个位置参数为映射文件
常用开关-n 跳过刮擦阶段快速抓取、-b 指定扇区大小、-R 反向、-f 强制
产物镜像文件与映射文件(记录每块的读取状态)
查看进度ddrescuelog -t 映射文件,输出各状态区块统计
关键约束映射文件必须与镜像一起保留,否则无法续跑与复核

典型使用场景

  • 硬盘出现坏道,需要尽快把可读数据固定下来
  • 现场时间有限,先快速抓取主要区域,之后再补读疑难区
  • 采集过程可能被中断(供电、时间窗口),需要可续跑方案
  • 需要一份出错区域的「地图」,用于说明证据缺口范围
  • 对老化介质避免重复读取,防止进一步劣化
  • 为客户交付时说明哪些扇区未能读取

分阶段采集与续跑

分阶段采集与续跑
# 第一阶段:跳过刮擦,尽快把可读区域抓下来
ddrescue -n /dev/sdb /evidence/sdb.dd /evidence/sdb.map
# 第二阶段:对未读区域多轮重试(-r3 表示三轮)
ddrescue -d -r3 /dev/sdb /evidence/sdb.dd /evidence/sdb.map
# 中断或断电后,重复同一条命令即可从上次位置续跑
ddrescue -d -r3 /dev/sdb /evidence/sdb.dd /evidence/sdb.map
# 查看映射统计:已读、未读、坏块等状态
ddrescuelog -t /evidence/sdb.map
# 输出汇总信息,便于写入采集记录
ddrescuelog -v /evidence/sdb.map | head -20
# 完成后计算镜像哈希并记录
sha256sum /evidence/sdb.dd | tee /evidence/sdb.sha256

映射状态与判读

项含义判读要点
finished / rescued已成功读取的比例未达 100% 时报告要注明缺口范围
bad areas判定为坏的区域块数数量与位置决定是否还能恢复关键文件
non-tried尚未尝试的区域分阶段采集时该值应随轮次下降
non-trimmed/non-scraped未修剪或未刮擦的区域进入重试阶段后会逐步收敛
errsize出错区域总大小用于评估数据损失范围,写入采集记录
介质持续报错时,先在原盘上尽快完成镜像,后续所有分析都针对镜像进行。在现场反复读取只会加速劣化,还可能让原本可读的区域也变得不可读。
首轮不要直接上高重试次数:先用 -n 快速抓取,再对剩余区域分轮重试,整体耗时更短且对介质更友好。重试次数按需逐步提高,避免长时间卡在个别坏块上。

易错点

  • 第一次就设置很高的重试次数,时间全耗在少数坏块上,可读数据迟迟没有固定
  • 删掉或覆盖映射文件,续跑能力与出错区域统计一起丢失,只能从头再来
  • 以为镜像长度一致就代表内容完整,实际坏区可能被跳过或填零,必须看映射统计
  • 在未做电源保障的情况下长时间采集,意外断电后若映射文件损坏则进度作废
  • 采集完成不及时算哈希,介质归还后完整性无法再证明

数据来源与参考

  • GNU ddrescue 官方文档(-d、-r、mapfile)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌