朋友被执行dd命令清零硬盘后,数据恢复的血泪实录

2687 字
13 分钟
朋友被执行dd命令清零硬盘后,数据恢复的血泪实录

朋友被执行dd命令清零硬盘后,数据恢复的血泪实录#

警告:本文包含真实的硬盘损坏场景和数据恢复方案,阅读前请确保你没有在执行任何危险命令。

😱 事情经过#

事情是朋友跟我说的。

那天晚上,他在折腾一台瘦客户机(就是那种巴掌大的小主机),想改成低功耗下载机。他的一位”朋友”看他折腾得热闹,发来一条消息:

“试试这个命令,可以清理硬盘坏道:”

Terminal window
dd if=/dev/zero of=/dev/sda bs=4M

他扫了一眼,心想:dd 命令熟啊,磁盘复制工具,以前用过。if 是输入,of 是输出,bs 是块大小。看起来就是把什么东西写到硬盘里,应该是修复类的操作吧?

于是他想都没想,回车。

终端开始输出进度,他还挺高兴,觉得对方在帮他优化硬盘。过了大概两分钟,突然觉得不对劲——这进度条怎么一直在走?而且速度怎么这么快?

定睛一看:

  • if=/dev/zero —— 输入源是零设备,也就是源源不断输出 0
  • of=/dev/sda —— 输出目标是第一块硬盘
  • bs=4M —— 每次写4MB

翻译成人话:它在把整个硬盘全部填成0。

他当场按 Ctrl+C,但已经晚了。两分钟的 dd 足够把分区表、引导记录、文件系统的关键区域全部抹成渣。

重启。黑屏。再重启。还是黑屏。

那台瘦客户机,变成了一块价值几百元的砖头。

然后他来找我说这个事。我听完血压都上来了,给他科普了半天。😂

最惨的是,他那台瘦客户机里原来还装了三个操作系统,全没了。


🔍 为什么这条命令这么狠?#

为了让他理解这条命令的杀伤力,我当时打了个比方:

rm -rf / 相当于把房子里的家具全砸了,但房子结构还在。

dd if=/dev/zero of=/dev/sda 相当于把地基和承重墙一起炸平,房子直接变平地。

这串指令的破坏力,是 rm -rf / 的 Pro Max 版。

画个图更直观:

正常硬盘结构:
┌─────────────────────────────────────────┐
│ MBR/GPT分区表 │ 文件系统元数据 │ 你的数据 │
└─────────────────────────────────────────┘
执行 dd if=/dev/zero of=/dev/sda 后:
┌─────────────────────────────────────────┐
│ 0000000000000000000000000000000000000 │
└─────────────────────────────────────────┘

dd 命令是Linux下的磁盘级复制工具,它操作的是裸设备(/dev/sda 是整个硬盘,不是某个分区)。一旦开始写入,它不会管硬盘上有什么,直接从第一个字节开始,一个扇区一个扇区地填0。

被抹掉的关键东西:

被抹掉的东西后果
分区表 (MBR/GPT)系统不知道硬盘有几个区,多大
引导记录 (GRUB/Bootloader)开机找不到系统入口,直接黑屏
文件系统超级块文件系统结构丢失,数据变成”无头苍蝇”
inode表文件名、权限、位置信息全没
你的数据文档、照片、配置……全部变成0

最可怕的是: dd 不会问你要不要确认,不会进回收站,不会留下日志。它就像一台推土机,直接碾过去。


⚠️ 危险命令黑名单#

我把这类命令整理了一个黑名单,看到任何一个,立刻停手,先查清楚再执行:

Terminal window
# 🔴 绝对不要执行
dd if=/dev/zero of=/dev/sdX # 全盘清零
dd if=/dev/urandom of=/dev/sdX # 随机覆盖(更狠,连恢复都困难)
dd if=/dev/zero of=/dev/sdX1 # 清零某个分区(同样危险)
mkfs.ext4 /dev/sda1 # 格式化分区
mkfs.ntfs /dev/sdb1 # 同上
rm -rf / # 删根目录
rm -rf /* # 同上变种
> /dev/sda # 重定向清空硬盘
chmod -R 777 / # 改根目录权限(系统崩溃)

识别特征:

  • 包含 /dev/sd 的 dd 命令(sd 后面是硬盘标识)
  • of= 指向 /dev/sdX 而不是文件路径
  • rm -rf 后面跟 / 或 /*
  • mkfs 系列命令

铁律:凡是操作 /dev/sd* 的命令,先 lsblk 确认设备,再执行。


🔧 数据恢复方案#

如果你也遇到了类似的情况,别慌,还有救。根据硬盘类型不同,恢复方案也不同。

方案一:机械硬盘(HDD)恢复#

机械硬盘的特点是数据写在磁片上,即使分区表被抹了,磁片上的磁性痕迹还在。只要没有被覆盖,数据是可以恢复的。

步骤1:立刻关机,不要再写入任何数据#

这是最重要的!一旦继续写入,新数据会覆盖旧数据的磁性痕迹,那时候神仙也救不回来。

步骤2:用Live USB启动,挂载硬盘为只读#

做一张 Arch/Ubuntu Live USB,从U盘启动,不要进入原系统。

Terminal window
# 查看硬盘列表,确认目标硬盘
lsblk
# 输出示例:
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
# sda 8:0 0 500G 0 disk ← 这是被清零的硬盘
# sdb 8:16 1 32G 0 disk /run/archiso/bootmnt ← 这是U盘
# 用只读方式挂载(防止意外写入)
sudo mkdir -p /mnt/recovery
sudo mount -o ro /dev/sda /mnt/recovery

步骤3:使用 TestDisk 恢复分区表#

TestDisk 是开源神器,专门恢复丢失的分区。

Terminal window
# Arch Linux
sudo pacman -S testdisk
# Ubuntu
sudo apt install testdisk
# 运行
sudo testdisk /dev/sda

操作流程:

  1. 选择 [Create] 创建日志
  2. 选择被清零的硬盘(/dev/sda)
  3. 选择分区表类型(Intel/PC 或 EFI GPT)
  4. 选择 [Analyse] 分析当前分区结构
  5. 选择 [Quick Search] 快速搜索丢失的分区
  6. 找到分区后,按 P 预览文件,确认数据还在
  7. 选择 [Write] 写回分区表

步骤4:如果分区表恢复失败,用 PhotoRec 恢复文件#

如果分区表彻底完蛋,TestDisk 救不回来,就用 PhotoRec(和 TestDisk 同 suite)。

它不依赖文件系统,而是直接扫描磁盘的磁性痕迹,根据文件头特征恢复文件。

Terminal window
sudo photorec /dev/sda

操作流程:

  1. 选择硬盘 → 选择分区(或选 Whole disk 全盘扫描)
  2. 选择文件系统类型(Other 对应 ext4/ntfs)
  3. 选择恢复文件保存位置(必须是另一块硬盘或U盘,不能是原盘!)
  4. 等待扫描完成(500G硬盘可能需要几小时)

PhotoRec 的局限:

  • 恢复的文件没有原始文件名(会命名为 f0000001.jpg 这种)
  • 文件目录结构丢失,所有文件混在一起
  • 部分碎片化的文件可能损坏

步骤5:高级方案 — 用 ddrescue 做镜像后恢复#

如果硬盘有物理坏道,或者想更安全地操作,先用 ddrescue 做全盘镜像,然后在镜像上操作。

Terminal window
# 安装
sudo pacman -S ddrescue
# 做镜像(源盘 → 镜像文件,存到另一块硬盘)
sudo ddrescue -d /dev/sda /mnt/backup/sda.img /mnt/backup/sda.log
# 在镜像上恢复分区
sudo losetup -fP /mnt/backup/sda.img
sudo testdisk /dev/loop0

方案二:移动硬盘 / SSD 恢复#

移动硬盘和SSD的恢复逻辑完全不同。

移动硬盘(外接HDD)#

如果是机械移动硬盘,恢复方案和上面的机械硬盘一样,用 TestDisk + PhotoRec。

如果是移动固态硬盘(PSSD),参考下面的SSD方案。

SSD 的特殊性#

SSD 有 TRIM 和 磨损均衡 机制,这让恢复变得困难:

SSD特性对恢复的影响
TRIM删除数据后,SSD控制器会主动清零闪存块,数据物理上消失
磨损均衡数据在闪存芯片上不断搬移,旧位置的数据可能被覆盖
OP预留空间部分闪存区域对用户不可见,但可能存着旧数据

结论:

  • 如果SSD支持TRIM且已执行 → 数据基本无法恢复
  • 如果TRIM未执行(旧系统/未正确卸载)→ 还有一线希望
  • 如果是企业级SSD(带掉电保护)→ 恢复概率稍高

SSD恢复步骤#

Terminal window
# 1. 检查TRIM状态
sudo hdparm -I /dev/sda | grep "TRIM"
# 如果显示 "Deterministic read ZEROs after TRIM" 或 "Non-deterministic"
# 说明TRIM已启用,恢复希望渺茫
# 2. 尝试用 TestDisk(和HDD一样)
sudo testdisk /dev/sda
# 3. 如果TestDisk不行,用 PhotoRec 全盘扫描
sudo photorec /dev/sda
# 4. 专业工具(商业软件)
# R-Studio、Disk Drill、EaseUS Data Recovery 等
# 这些工具对SSD的FTL(闪存转换层)有更好的解析能力

SSD恢复的现实:

  • 家用SSD(TRIM开启)→ 成功率 < 10%
  • 企业级SSD → 成功率 20-40%
  • 如果刚清零就断电 → 成功率 50%+

🛡️ 预防措施(血泪换来的经验)#

1. 操作前 triple-check#

Terminal window
# 执行任何危险命令前,先确认目标设备
lsblk
# 确认 /dev/sda 是不是你要操作的那块盘!
# 用 dry-run 模式先测试
dd if=/dev/zero of=/dev/sda bs=4M count=1 status=progress
# 只写4MB,看看是不是目标设备,确认无误再去掉 count=1

2. 给危险命令加别名(防手滑)#

在 ~/.bashrc 或 ~/.zshrc 里加:

Terminal window
# 给dd加确认提示
alias dd='echo "⚠️ 你正在执行dd命令,目标设备是?"; read -p "确认目标设备: " dev; echo "即将执行 dd,目标: $dev"; read -p "按回车继续,Ctrl+C取消"; dd'
# 给rm -rf / 加保护
alias rm='rm -I' # 删除多个文件时提示

3. 定期备份(最重要)#

Terminal window
# 用 rsync 做增量备份
rsync -avP --delete /home/important/ /mnt/backup/important/
# 用 borgbackup 做版本化备份
borg create /mnt/backup/repo::$(date +%Y%m%d) /home
# 用 Timeshift 做系统快照(类似Windows还原点)
sudo timeshift --create --comments "Before dangerous operation"

4. 用虚拟机/容器做实验#

Terminal window
# 在虚拟机里折腾,搞崩了快照恢复
# 或者用 systemd-nspawn 容器
sudo systemd-nspawn -D /var/lib/machines/test-arch

5. 重要数据 3-2-1 备份原则#

  • 3 份数据副本
  • 2 种不同存储介质(硬盘+云盘/磁带)
  • 1 份异地备份

📝 总结#

场景恢复成功率推荐工具
机械硬盘,刚清零就断电70-90%TestDisk + PhotoRec
机械硬盘,清零后继续写入30-50%PhotoRec 全盘扫描
SSD(TRIM开启)< 10%专业商业软件
SSD(TRIM未开启)40-60%TestDisk + R-Studio
移动机械硬盘同机械硬盘TestDisk + PhotoRec
移动固态硬盘同SSD同SSD

核心教训:

  1. 不要信任任何人发来的命令,即使是朋友。先查清楚再执行。
  2. dd 是核武器,操作对象是 /dev/sd* 时,三思而后行。
  3. 备份是唯一的真理,没有备份的数据,等于已经丢失的数据。
  4. 出事后立刻断电,每多一秒写入,恢复成功率就降一分。

最后,我想对那位发命令的”朋友”说:请你吃顿好的赔罪吧,至少两顿。 😂


延伸阅读

免责声明:本文提供的恢复方案基于个人经验和公开资料,不保证100%恢复成功。操作前请确保你有足够的技术能力,或寻求专业数据恢复服务。对于因操作不当导致的进一步数据损失,作者不承担责任。

文章分享

如果这篇文章对你有帮助,欢迎分享给更多人!

朋友被执行dd命令清零硬盘后,数据恢复的血泪实录
https://www.cxl--package.top/posts/2026-08-23-hdd-recovery-after-dd-disaster/
作者
ALM
发布于
2026-08-23
许可协议
CC BY-NC-SA 4.0

评论区

Profile Image of the Author
ALM
Hi~欢迎来到CXL避难所
⚠️ 重要声明
大家好,这里是 CXL 避难所的站长——啊嘞喵。本站为个人非商业性质的学习分享站点,所有内容仅供技术交流与个人记录参考,不构成任何专业建议或商业指导。本站基于 Firefly 主题(MIT 开源协议)构建,与原作者无任何商业关联。引用内容版权归原作者所有,如有侵权请联系删除。
分类
标签
最新动态
站点统计
文章
27
动态
4
分类
8
标签
102
总字数
64,126
运行时长
0 天
最后活动
0 天前
站点信息
构建平台
Cloudflare Workers
博客版本
Firefly v6.14.3
文章许可
CC BY-NC-SA 4.0