我正在使用旧的随机数据覆盖我的硬盘驱动器dd
:
dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512
这是一个 2TB 阵列,而我的 MacBook(运行 Linux,好吗?)只能以 3.7MB/s 左右的速度写入数据,这非常可悲,因为我看到我家里的台式机的写入速度为 20MB/s。今晚回家的时候,我想把dd
这里的跑步停下来,带回家,看看用更强大的机器一夜之间能取得什么样的进步。
我一直在使用一个简单的循环来监控进度:
while true; do kill -USR1 $PID ; sleep 10 ; done
输出如下所示:
464938971+7 records in
464938971+7 records out
238048755782 bytes (238 GB) copied, 64559.6 s, 3.7 MB/s
dd
如果我在家恢复通行证,我该如何重新启动?我知道这个seek
参数,但是我应该将它指向什么,记录号还是字节数?
答案1
正如@don_crissti 已经评论的那样,只需使用seek=
即可恢复。
dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=512 seek=464938971
GNU dd
还支持以字节为单位查找,因此无论块大小如何,您都可以准确恢复:
dd if=/dev/urandom of=/dev/disk/by-uuid/etc bs=1M \
seek=238048755782 oflag=seek_bytes
即使对于像/dev/urandom
.
如果您正在寻找更快的替代方案,您可以cryptsetup plainOpen
使用随机密钥并将其归零,它应该快/dev/urandom
一个数量级(不使用 AES-NI),甚至全速运行(使用 AES-NI)。
shred -n 1
如果伪随机数据足以满足您的用例,您也可以使用。shred
即使在非常慢的机器上,也应该能够利用完整的磁盘速度。
答案2
只是提醒那些想要复制而不只是随机化磁盘的人(这不是那common) : 你可以用它skip=BLOCKS
来启动阅读在适当的位置,并seek=BLOCKS
开始写作在正确的位置。两个选项都使用块,而不是字节。中断/重新启动时,建议删除一堆块以防万一。通常值得将bs
值提高到 512 以上,因为如果连续读取大量数据,可以获得更好的性能。
就您而言,它确实是您需要传递给的块值seek
。也许您应该尝试调整bs
以查看是否可以提高速度,因为/dev/random
应该很快(当没有可用熵时,伪随机和非阻塞)
答案3
克隆磁盘:
扩展于这从这个线程回答,这就是克隆整个磁盘并恢复的方式:
此示例针对从 5400rpm 旋转驱动器复制到特定系统上的 SSD 进行了优化。 gdd
代表GNU dd
:
> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' bs=4M status=progress
247426187264 bytes (247 GB, 230 GiB) copied, 2082 s, 119 MB/s
59012+0 records in
59011+0 records out
247510073344 bytes (248 GB, 231 GiB) copied, 2082.92 s, 119 MB/s
我可以通过以下两种方式之一恢复此操作:
> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=59011 skip=59011 \
status=progress
或者:
> sudo gdd 'if=/dev/rdisk3' 'of=/dev/rdisk6' \
bs=4M \
seek=247510073344 skip=247510073344 \
oflag=seek_bytes iflag=skip_bytes \
status=progress
59011
在第一个示例中,我们使用and not 的原因59012
是因为59011
有多少块大小的记录在中断之前被完全复制。 (记录出来)。
答案4
如果可以的话,使用
#ddrescue from to logfile
ddrescue /dev/sda /dev/sdb logfile
保持日志文件远离 from 或 to...,如果您必须按 ctrl-c 或其他键,ddrescue 将读取其自己的日志文件并自动恢复。它还首先简单地复制所有内容,并且由于它可以从日志文件中恢复,因此您可以告诉它“返回并更努力地尝试”其他内容。