Skip to content

ddrescue 数据恢复

利用 ddrescue 进行磁盘克隆和数据恢复

核心命令

sudo ddrescue -d -J -r 3 -b 4096 -c 256k --timeout=300s --force /dev/sdb /dev/sdc mapfile.ddrescue

-r 3 标准重试次数控制(替换不支持的 --max-retries) -b 4096 强制 4K 对齐(替代 --sector-size=4096) -c 1M 设置 1MB 拷贝块大小(提升克隆效率) --timeout=300s 单 I/O 超时 300 秒(仍可用)

错误 sudo ddrescue -d -J -r 3 -b 4096 -c 1M --timeout=300s --force /dev/sdb /dev/sdc mapfile.ddrescue terminate called after throwing an instance of 'std::bad_alloc' what(): std::bad_alloc

这个 std::bad_alloc 错误表示 ddrescue 在尝试分配内存时失败了,通常是由于 -c 1M 参数设置的缓冲区过大导致的。

示例

sudo ddrescue -d -J -r 3 -b 4096 -c 256k --timeout=300s --force /dev/sdb /dev/sdc mapfile.ddrescue
GNU ddrescue 1.27
Press Ctrl-C to interrupt
     ipos:    7340 MB, non-trimmed:        0 B,  current rate:    174 MB/s
     opos:    7340 MB, non-scraped:        0 B,  average rate:    262 MB/s
     ipos:   19922 MB, non-trimmed:        0 B,  current rate:  95325 kB/s
     opos:   19922 MB, non-scraped:        0 B,  average rate:  88546 kB/s
     ipos:   25165 MB, non-trimmed:        0 B,  current rate:    116 MB/s
     opos:   25165 MB, non-scraped:        0 B,  average rate:  80401 kB/s
     ipos:  193986 MB, non-trimmed:        0 B,  current rate:    116 MB/s
     opos:  193986 MB, non-scraped:        0 B,  average rate:  81954 kB/s
     ipos:  255852 MB, non-trimmed:        0 B,  current rate:       0 B/s
     opos:  255852 MB, non-scraped:        0 B,  average rate:  90640 kB/s
non-tried:        0 B,  bad-sector:        0 B,    error rate:       0 B/s
  rescued:  256060 MB,   bad areas:        0,        run time:     47m  4s
pct rescued:  100.00%, read errors:        0,  remaining time:         n/a
                              time since last successful read:          0s
Copying non-tried blocks... Pass 1 (forwards)
Finished