Linux 中如何安全擦除硬盘上的所有敏感数据

作者:袖梨 2026-08-29

必须按硬盘类型选择对应方法:HDD用shred/dd关闭写缓存覆写,SSD/NVMe必须用ATA Secure Erase或nvme sanitize硬件指令,因FTL机制使软件覆盖无效;擦除前需卸载分区、wipefs清除元数据,并用hexdump抽查验证。

直接擦除整块硬盘的敏感数据,不能只靠 rm 或格式化。真正安全的方式取决于硬盘类型(HDD 还是 SSD/NVMe),并需绕过文件系统层、缓存和硬件映射机制。

先确认硬盘类型和状态

执行以下命令快速判断:

  1. lsblk -o NAME,ROTA,MODEL —— 查看 ROTA 值:1 是机械硬盘(HDD),0 是固态盘(SSD/NVMe)
  2. hdparm -I /dev/sdX | grep -i "supported|not.*supported" —— 检查 HDD 是否支持 ATA Secure Erase
  3. sudo nvme listsudo nvme id-ctrl /dev/nvme0n1 —— 确认 NVMe 设备是否支持 sanitizeformat 命令
  4. sudo umount /dev/sdX* —— 必须卸载所有分区,否则写入会被拦截

HDD:用 shred 或 dd 覆盖整盘(需关写缓存)

对传统机械硬盘,覆盖写入有效,但必须关闭磁盘写缓存,并确保无 LVM/RAID/加密层干扰:

  1. 关闭写缓存:sudo hdparm -W0 /dev/sdX
  2. 三次随机覆盖(平衡安全与耗时):sudo shred -v -n 3 /dev/sdX
  3. 或用 dd 加速(适合大容量):sudo dd if=/dev/urandom of=/dev/sdX bs=4M status=progress && sync
  4. 最后补零隐藏操作痕迹(可选):sudo dd if=/dev/zero of=/dev/sdX bs=4M count=100

SSD/NVMe:必须用硬件级指令,shred/dd 无效

SSD 的 FTL(闪存转换层)、磨损均衡和 TRIM 机制会让软件覆盖完全失效——你写的逻辑地址,物理页可能根本没被触达。

  1. ATA SSD 执行安全擦除:

    sudo hdparm --user-master u --security-set-pass Eins /dev/sdX

    sudo hdparm --user-master u --security-erase Eins /dev/sdX

    sudo hdparm --user-master u --security-disable Eins /dev/sdX

  2. NVMe SSD 推荐用 nvme-cli

    sudo nvme format /dev/nvme0n1 --ses=1(全盘安全擦除)

    或更彻底:sudo nvme sanitize start /dev/nvme0n1 --no-deallocate --overwrite

  3. 不支持标准指令?用厂商工具:intelmas(Intel)、wdclear(WD)、seagate-tools

清理元数据残留:wipefs 清签名,防误识别

即使数据已擦,分区表、LVM 标签、RAID 元数据仍可能被系统读取,暴露旧用途。用 wipefs 彻底清空这些“指纹”:

  1. 预览有哪些签名:sudo wipefs -n /dev/sdX
  2. 清除全部签名(谨慎!):sudo wipefs -a /dev/sdX
  3. 只清 ext4 和 LVM 签名:sudo wipefs -t ext4,lvm-pv /dev/sdX

不复杂但容易忽略:HDD 和 SSD 必须走不同路径,混用方法等于白做。擦完建议用 sudo hexdump -C /dev/sdX | head -20 快速抽查开头是否已无可读结构。

相关文章

精彩推荐