dwipe 是一个用于擦除 Linux 磁盘和分区以帮助保护数据安全的工具。dwipe 旨在通过在设备选择过程中提供充足的信息来减少错误。

| 功能 | dwipe | nwipe | shred | dd |
|---|---|---|---|---|
| 固件擦除(SATA/NVMe 安全擦除) | ✓ | ✗ | ✗ | ✗ |
| 软件擦除(零、伪随机) | ✓ | ✓ | ✓ | ✗ |
| 交互式 TUI | ✓ | ✓ | ✗ | ✗ |
| 同时多设备擦除 | ✓ | ✗ | ✗ | ✗ |
| 持续擦除状态 | ✓ | ✗ | ✗ | ✗ |
| 热插拔检测/释放 | ✓ | ✗ | ✗ | ✗ |
| 设备/分区阻止 | ✓ | ✗ | ✗ | ✗ |
| 恢复中断的软件擦除 | ✓ | ✗ | ✗ | ✗ |
| 擦除操作日志 | ✓ | ✗ | ✗ | ✗ |
| 挂载检测/阻止 | ✓ | ✓ | ✗ | ✗ |
| 快速统计抽样验证 | ✓ | ✗ | ✗ | ✗ |
| 认证销毁(DoD/Gutmann 标准、全面验证、证书) | ✗ | ✓ | ✗ | ✗ |
- 固件擦除(SATA/NVMe)是最完整且最快的:硬件加速擦除在控制器级别运行(数秒至数分钟),清除所有驱动器映射,但需要全设备擦除,没有进度报告或可见验证。
- 软件擦除的单次零填充已足够:现代驱动器(2001年后)通过单次零填充即可可靠擦除(NIST SP 800-88)。多遍模式可用于提高信心,但不提供额外的安全保证。
- 验证采用智能统计抽样:即使 1% 的验证也会通过 100 个分区对整个磁盘进行采样,提供全面覆盖,无需完全顺序读取。
/dev/、/sys/、/proc/ 接口)可选(历史屏幕中用于剪贴板复制):
apt install xclip 或 xsel)apt install wl-clipboard)pipx install dwipedwipe --helppipx uninstall dwipedwipedwipe(会自动请求 sudo)w 擦除驱动器时,必须输入缩写(例如 Rand、Zero、Crypto);擦除方式从最不推荐到最推荐显示,最后一个标记有 *。通常选择最后一个选项,但...Rand 或 Zero(可中断,显示进度)。dwipe 会自动检测恢复并重新扫描。或按 r 手动重新扫描。驱动器应解除冻结。dwipe 锁定的,密码为 ;否则使用锁定时的密码。dwipe 提供全面的磁盘擦写能力及安全特性:
注意:
dwipe会显示文件系统标签,若没有则显示分区标签。最佳实践是给分区和文件系统做好标签,以便于选择。
简单地在命令行运行 dwipe 即可,无需参数:dwipe
注意: 所有偏好选项都使用您上次保存的值作为默认值。这些默认值在 --help 中显示,并可通过键盘快捷键交互更改。命令行参数会覆盖已保存的偏好。
--mode {-V,+V} - 验证模式(默认:您上次的偏好)
-V - 擦除后不自动验证+V - 擦除完成后验证设备--passes {1,2,4} - 软件擦除的遍数(默认:您上次的偏好)
--verify-pct {1,3,10,30,100} - 验证百分比(默认:您上次的偏好)
--dense {True,False} - 紧凑视图模式(默认:您上次的偏好)
True - 紧凑间距(磁盘之间空白行较少)False - 间隔视图(磁盘之间空白行以提高可读性)--port-serial {Auto,On,Off} - 磁盘端口/序列号显示(默认:您上次的偏好)
Auto - 仅对整个磁盘显示端口/序列号(推荐)On - 始终显示端口和序列号Off - 从不显示端口和序列号--slowdown-stop {0,4,16,64,256} - 如果磁盘减速则停止(默认:您上次的偏好,毫秒)
0 = 禁用--stall-timeout {0,60,120,300,600} - 停滞超时秒数(默认:您上次的偏好)
0 = 禁用(永不超时)--firmware-wipes 或 -F - 启用固件擦除
--dump-lsblk - 转储解析的设备信息并退出(用于调试)--help - 显示带所有可用选项的帮助信息dwipe 使用颜色编码提供设备及操作状态的即时视觉反馈:
dwipe 支持多种颜色主题,以提高可视性和美观性。
可用主题:
default - 终端默认(基本 ANSI 颜色)dark-mono - 暗色单色(接近白色在接近黑色上,搭配亮色)light-mono - 亮色单色(接近黑色在接近白色上,搭配亮色)solarized-dark - Solarized 暗色板solarized-light - Solarized 亮色板(适合浅色终端背景)gruvbox - Gruvbox 暗色板nord - Nord 色板更改主题:
主题特性:
STATE 列显示每个设备的当前状态:
顶行显示可用操作。某些操作是上下文相关的(仅对特定设备可用):
按 h 查看擦除历史日志。历史屏幕显示所有擦除和验证操作,包含时间戳、设备信息和结果。
历史屏幕操作:
/ 前缀进行深度 JSON 搜索)剪贴板复制方法(自动检测):
注意: 如果 OSC 52 在您的终端上不起作用,文本仍会显示在屏幕上供手动选择。对于 tmux,在
.tmux.conf中启用set -g set-clipboard on。
dwipe 支持固件擦除(硬件加速)和软件擦除。固件擦除需要 --firmware-wipes 或 -F 标志。下表列出的擦除方法从最推荐(排名 1)到最不推荐。
注意: 机械硬盘没有磨损均衡或隐藏块,因此软件擦除与固件擦除同样彻底,但提供更好的控制(进度、暂停/恢复、可中断性)。
| 排名 | 缩写 | 官方名称 | 备注 |
|---|---|---|---|
| 1 | Rand | Software Random Write | 推荐;不可预测的模式;统计验证 |
| 2 | Zero | Software Zero Write | 更简单;快速验证(在第一个非零字节处失败) |
注意:
- 固件擦除仅显示每个驱动器支持的方法(见 FwCAPS 列)。
- 固件擦除包括自动抽检验证。
+V后缀在软件擦除后启用自动验证。没有+V时,按 v 手动验证。- 多遍软件擦除(2 或 4)交替零/随机模式,以您选择的模式结束。
- USB 驱动器和分区缺乏固件擦除——仅提供软件擦除。
已停止的擦除(状态 s)可通过在设备上按 w 恢复。选择相同类型的擦除,否则将从 0% 开始。
恢复机制:
恢复示例:
好处:
软件擦除使用智能验证,包含统计分析和快速失败优化。验证是可配置且可选的。
智能抽样:
--verify-pct 命令行选项设置验证百分比(保存为偏好)模式检测:
验证模式:
+V 后缀的模式(Rand+V 或 Zero+V)并将验证百分比设置为 > 0为什么统计抽样比顺序验证更好:
固件擦除(SATA/NVMe安全擦除)使用无条件抽点验证,该验证对所有固件擦除自动执行,确保硬件擦除命令真正生效。
抽点验证方法:
为什么抽点验证有效:
重要提示: 固件擦除不像软件擦除那样显示基于百分比的验证。抽点验证作为擦除操作的一部分静默进行,成功/失败记录在持久擦除状态标记中。
当使用软件擦除设备时,dwipe 显示:
W(已擦除)和 s(部分擦除)状态在重启后保持持久。这是通过将元数据写入设备的前16KB实现的:
当显示带有持久状态的设备时,额外信息会展示:
当按下 ? 时,可以看到可用按键和命令行选项及其当前设置。
你可以使用以下方式浏览设备列表:
按下 / 键可激活增量搜索过滤,具有类似vim的行为:
工作原理:
过滤示例:
过滤器支持正则表达式。以下是一些有用的示例:``` /sda # Show only sda and its partitions /sd[ab] # Show sda, sdb and their partitions /nvme # Show all NVMe devices /nvme0n1p[12] # Show only partitions 1 and 2 of nvme0n1 /usb # Show devices with "usb" in their labels
在主界面按 **ESC** 键清除过滤器,返回显示所有设备。
**注意:** 无效的正则表达式模式将被忽略——在您输入时,筛选器将保持在上一个有效模式。
## 安全注意事项
**软件擦除的重要限制:**
- `dwipe` 支持使用交替模式的多遍擦除,但并未实现特定的 DoD 5220.22-M 或 Gutmann 认证模式序列
- 对于不需要(过时的)认证销毁的**个人和企业数据**来说完全足够
- **不适用于**需要经认证的特定模式擦除并附带合规证书的机密、绝密或高度敏感数据
- **SSD 注意事项**:
- 现代 SSD 使用磨损均衡技术,可能会在未映射的块中保留数据
- TRIM/DISCARD 可能会阻止数据完全擦除
- 对于 SSD,请考虑使用制造商的安全擦除工具以获得最大安全性
- 在 SSD 上,随机模式可能不会比全零模式提供额外的安全性
**最佳实践:**
- 擦除前仔细验证设备标签和大小
- 使用**阻塞**功能保护关键磁盘
- 考虑将加密作为敏感数据的主要安全措施
---
---
## 故障排除
### dwipe 无法启动
- **错误:“在 $PATH 中找不到 lsblk”** - 请安装 `util-linux` 包
- **权限拒绝** - `dwipe` 会自动请求 sudo;请确保您可以使用 sudo
### 终端显示问题
- **崩溃后显示混乱** - 运行 `reset` 或 `stty sane` 命令
- **颜色不显示** - 确保您的终端支持颜色(大多数现代终端都支持)
### 擦除问题
- **无法擦除设备** - 检查 STATE 列:
- **Mnt** - 先卸载分区:`sudo umount /dev/sdXN`
- **Blk** - 按 **b** 取消阻塞
- **Busy** - 磁盘上的另一个分区正在被擦除
- **擦除速度非常慢** - 大容量硬盘的正常现象;检查写入速率以确认进度
- **擦除似乎卡住了** - 很可能是由于坏盘;在好盘上,直接 I/O 使进度几乎恒定。
---
### 固件擦除注意事项
固件擦除(SATA/NVMe 安全擦除操作)与软件擦除具有不同的特性:
**冻结的驱动器:**
- SATA 驱动器通常由 BIOS/UEFI 在 POST 期间作为安全措施进行冻结
- 这是驱动器级别的安全功能,不是 `dwipe` 的限制
- **解决方案**:短暂挂起系统然后恢复;`dwipe` 自动检测恢复并重新扫描(或手动按 **r**)。挂起/恢复会循环供电 SATA 链路,从而解除冻结。
- 如果在挂起/恢复后驱动器仍然冻结,请尝试完全断电(10分钟以上以耗尽驱动器电容),然后启动并重新扫描
**设备怪癖和兼容性:**
- 存储设备有各种固件实现和硬件怪癖,可能影响安全擦除操作
- 某些驱动器可能不完全支持某些清理操作,存在时序问题,或表现异常
- `dwipe` 不能保证所有设备都能成功擦除——某些硬件可能根本不配合擦除命令
- 擦除后务必验证驱动器(使用 **v** 键)以确认擦除实际完成
- 对于在怪癖硬件上进行的关键任务数据销毁,请考虑使用制造商特定的安全擦除工具作为备用
---
### 处理坏盘或故障盘
dwipe 包含针对有问题存储设备的内置保护:
**自动错误处理。** 在擦除过程中遇到磁盘错误时:
* 连续写入错误:连续 3 次写入失败后擦除中止
* 总错误阈值:总计 100 次写入错误后擦除中止
* 自动重试:写入失败时,自动关闭并重新打开设备(瞬时错误恢复)
* 文件描述符恢复:检测到错误的 FD 状态并刷新句柄
**卡顿和减速检测。** dwipe 监控写入性能,并可中止有问题的操作:
* 卡住检测:5 分钟无进展时中止(可配置)
* 减速检测:在最初 5 秒内测量基准速度,当速度低于阈值(例如基准的 1/4)时中止
* 进度跟踪:持续监控确保写入确实到达设备
**如果擦除卡住了...** 如果擦除似乎冻结或无响应:
* 首次尝试:按 s 优雅地停止选中的擦除
* 耐心等待:某些磁盘操作可能需要在内核级别等待数分钟才能超时
* 如果仍然卡住:按 S(Shift+s)停止所有擦除
* 最后手段:如果界面完全冻结:
* 按 Ctrl-Z 挂起 `dwipe`
* 在终端中运行:`sudo pkill -f "python.*dwipe"`(仅针对 dwipe 进程)
* 如果显示损坏,运行 reset 恢复终端
**预防有问题的介质。** 对于已知的坏盘或可疑硬件:
* 从验证开始:先按 v 测试可读性
* 使用较低速度:启用脏页面节流(d 键)以减少 I/O 压力
* 监控系统日志:在另一个终端检查 dmesg -w 以查看磁盘错误
* 考虑硬件问题:USB 外置盒、线缆和控制器常常导致问题
**常见磁盘错误模式**
* USB 连接断开:dwipe 会检测并尝试恢复
* 坏扇区:错误会被计数;过多时任务中止
* 控制器超时:内核可能挂起;卡住检测应触发
* 磁盘已满:超出设备末尾的写入错误会被优雅处理
**中止后的恢复。** 如果擦除因磁盘错误而中止:
* 设备状态显示 s(已停止/部分)
* 您可以尝试恢复 (w) - 如果错误是瞬时的,可能会成功
* 或者验证 (v) 以查看实际写入的内容
* 如果错误持续存在,请考虑更换磁盘
注意:某些磁盘本质上是损坏的,无法可靠擦除。dwipe 会保护自身和您的系统,但无法修复硬件故障。
---
#### 通过 USB 擦除 SATA 的建议
* 要求 1:SAT(SCSI-ATA 翻译)支持
* USB 桥接器必须能够“透传”ATA 命令。
* 测试:如果应用程序能在驱动器详细信息中看到“Security”部分,则桥接器支持 SAT。
* 要求 2:稳定电源
* 固件擦除(尤其在 3.5 英寸 HDD 上)会消耗显著峰值功率。
* 风险:如果使用仅靠 USB 供电的“仅总线”线缆,擦除期间电压可能下降,导致桥接器重置并使驱动器陷入锁定状态(变砖)。
* 建议:始终为 3.5 英寸驱动器使用外部供电的 USB 底座。
* 要求 3:命令超时完整性
* 桥接器不得具有激进的“看门狗定时器”。
* 风险:某些桥接器如果在 60 秒内没有看到“数据”就会断开连接。在固件擦除期间,驱动器在内部忙碌,不发送数据。
* 建议:使用高质量芯片组,如 ASMedia (1153E) 或 JMicron (JMS578)。
##### 解锁锁定的设备```
sudo hdparm --user-master u --security-unlock NULL /dev/sdX
sudo hdparm --user-master u --security-disable NULL /dev/sdX
欢迎在 github.com/joedefen/dwipe 提交问题和拉取请求
MIT 许可证 - 详见 LICENSE 文件。
NULLDEL 分离,物理更换驱动器,然后按 r 重新扫描(如果需要)。| 状态 | 含义 |
|---|
| - | 设备已准备就绪可以擦除 |
| ^ | 设备已准备就绪可以擦除且是在 dwipe 启动后添加的(热插拔) |
| Mnt | 分区已挂载或磁盘有已挂载的分区 - 无法擦除 |
| N% | 擦除正在进行中(显示完成百分比,0-100%) |
| vN% | 验证正在进行中(显示完成百分比,v0-v100%) |
| STOP | 擦除或验证正在停止 |
| s | 擦除已停止 - 设备已部分擦除(可重新开始或验证) |
| W | 擦除成功完成(可再次擦除或验证) |
| Blk | 磁盘被手动阻止 - 分区被隐藏且无法擦除 |
| Unbl | 磁盘刚刚被解除阻止(过渡状态) |
| 按键 | 操作 | 描述 |
|---|
| w | wipe | 擦除所选设备(需要确认) |
| v | verify | 验证已擦除设备或检测未标记磁盘上的模式(上下文相关) |
| s | stop | 停止正在进行的所选擦除(上下文相关) |
| S | Stop All | 停止所有正在进行的擦除 |
| DEL | delete | 从系统中移除磁盘(仅限整个磁盘,上下文相关) |
| b | block/unblock | 阻止或解除阻止磁盘以防误擦除 |
| / | filter | 按正则表达式模式过滤设备(显示匹配设备 + 所有活动擦除) |
| r | rescan | 重新扫描所有设备并重置硬件能力检测 |
| h | history | 显示擦除历史日志 |
| t | themes | 打开主题预览屏幕查看和更改颜色主题 |
| q 或 x | quit | 退出应用程序(先停止所有擦除) |
| ? | help | 显示帮助屏幕,包含所有操作和导航键 |
| ESC | clear filter | 清除过滤器并跳转到列表顶部 |
| ESC | back | 如果在嵌套屏幕中,返回上一屏幕 |
| a | time format | 切换擦除历史时间显示格式(ago+time, ago, time) |
| 环境 | 方法 | 备注 |
|---|
| SSH 会话 | OSC 52 | 终端转义序列;需要终端支持(iTerm2, kitty, alacritty, Windows Terminal, tmux 并启用 set-clipboard on) |
| Wayland | wl-copy | 需要 wl-clipboard 软件包 |
| X11 | xclip/xsel | 需要 xclip 或 xsel 软件包 |
| 后备 | 终端 | 退回到 shell,打印条目供手动复制 |
| 排名 | 缩写 | 官方名称 | 备注 |
|---|
| 1 | Crypto | Sanitize Cryptographic Erase | 最快;擦除加密密钥;即时数据失效 |
| 2 | Block | Sanitize Block Erase | 快速;将所有块重置为释放状态 |
| 3 | FCrypto | Format with Crypto Erase | 快速;通过密钥擦除重新格式化命名空间 |
| 4 | FErase | Format with User Data Erase | 快速;通过简单数据擦除重新格式化;不如加密彻底 |
| 5 | Ovwr | Sanitize Overwrite | 数分钟;向所有块写入模式;最彻底但很少需要 |
| 6 | Rand | Software Random Write | 备用;通过软件写入随机数据;大容量驱动器需数小时 |
| 7 | Zero | Software Zero Write | 备用;通过软件写入零;可验证但较慢 |
| 排名 | 缩写 | 官方名称 | 备注 |
|---|
| 1 | SCrypto | Sanitize Cryptographic Erase | 最快;擦除加密密钥;需要 SANITIZE 功能 |
| 2 | Enhanced | ATA Security Erase Enhanced | 快速;供应商特定深度擦除,含加密密钥销毁 |
| 3 | SBlock | Sanitize Block Erase | 快速;将块重置为出厂状态;需要 SANITIZE 功能 |
| 4 | Erase | ATA Security Erase Normal | 数分钟;向所有扇区写入零;广泛支持 |
| 5 | SOverwrite | Sanitize Overwrite | 数分钟;用模式覆盖;需要 SANITIZE 功能 |
| 6 | Rand | Software Random Write | 备用;无法触及磨损均衡或重映射的块 |
| 7 | Zero | Software Zero Write | 备用;无法触及磨损均衡或重映射的块 |
| 排名 | 缩写 | 官方名称 | 备注 |
|---|
| 1 | Rand | Software Random Write | 推荐;可中断,可恢复,显示进度 |
| 2 | Zero | Software Zero Write | 推荐;可中断,可恢复,快速验证 |
| 3 | Enhanced | ATA Security Erase Enhanced | 慢(数小时);不可中断;无进度;结果与软件相同 |
| 4 | Erase | ATA Security Erase Normal | 慢(数小时);不可中断;无进度;结果与软件相同 |
| 停止于 |
|---|
| 当前遍数 |
|---|
| 结果 |
|---|
| 50% | 1 遍 | 恢复:写入剩余 50% |
| 150%(1.5/4 遍) | 1 遍 | 已完成(150% > 100%) |
| 150%(1.5/4 遍) | 4 遍 | 恢复:再写入 2.5 遍(150% → 400%) |
| 100%(1 遍完成) | 2 遍 | 恢复:写入第 2 遍(100% → 200%) |