如何使用dd从上次中断位置继续擦除200GB HDD?
解决dd中断后确保HDD末尾区域被擦除的方法
别慌,我们不用重新跑完整的200GB擦除,可以精准只处理未写入的末尾部分,既省时间又安全。下面是分步操作:
1. 先确保硬盘处于可操作状态
- 首先卸载该硬盘的所有挂载分区(避免权限冲突和数据损坏):
这里的sudo umount /dev/sdX*/dev/sdX是你的HDD设备路径(比如/dev/sdb),一定要确认准确,别误写成系统盘! - 后续所有命令都用root权限执行(加
sudo),避免再次出现Permission denied。
2. 确定需要补写的起始位置
如果你还记得dd中断时的终端输出(比如显示184320+0 records in/out),这个数字就是已写入的块数(假设你用的bs=1M参数)。比如184320块×1MB=180GB,剩下的20GB就是需要补写的区域。
如果记不清具体进度,也可以直接选择覆盖最后一段区域(比如最后20GB)——就算之前写到了更后面,多覆盖一点也没坏处:
- 先获取硬盘总大小(转成MB单位):
200GB硬盘的结果大概是204800MB,若要覆盖最后20GB(20480MB),起始块数就是sudo blockdev --getsize64 /dev/sdX | awk '{print $1/1024/1024}'204800 - 20480 = 184320。
3. 补写末尾区域的零数据
用dd的seek参数跳过已写入部分,只写剩余区域:
sudo dd if=/dev/zero of=/dev/sdX bs=1M seek=184320
seek=184320表示跳过前184320个1MB块,直接从该位置开始写零;- 如果你想固定写某一段大小(比如20GB),可以加
count=20480:sudo dd if=/dev/zero of=/dev/sdX bs=1M seek=184320 count=20480
4. 验证擦除结果
写完后,检查末尾区域是否全为零:
sudo dd if=/dev/sdX bs=1M skip=184320 | hexdump -C | head
如果输出全是00 00 00 00 ...,就说明末尾区域已经成功擦除。
额外注意事项
- 全程不要挂载硬盘分区,否则可能导致写入失败或数据损坏;
- 再次确认设备路径
/dev/sdX正确,擦错硬盘会丢失所有数据; - 若担心硬盘自动卸载,可以临时关闭自动休眠:
完成擦除后再改回原设置(比如sudo hdparm -S 0 /dev/sdX-S 60表示10分钟休眠)。
内容的提问来源于stack exchange,提问作者Hashim Aziz
相关产品推荐
相关产品推荐

