• 忘掉天地
  • 仿佛也想不起自己
bingliaolongBingliaolong  2025-07-10 17:05 Aet 隐藏边栏 |   抢沙发  6 
文章评分 3 次,平均分 5.0

概述

  1. 磁盘擦除相关

相关概念

  1. ata
    1. 是计算机存储设备(如HDD/SSD)的接口协议标准,定义了设备与主机间的通信方式,包括数据传输、设备控制和安全命令集
  2. Sanitize
    1. ATA规范中专门用于安全擦除数据的一组命令,属于ATA指令集的扩展功能(如 ATA Sanitize Device 命令)
    2. 它通过发送特定指令触发设备内部的物理级擦除操作

擦除方法

  1. 对于SSD
    1. Nvme:可以使用nvme format
    2. Nvme:可以使用Ata sanitize
  2. 对于HDD
    1. 可以使用diskpart系统工具(Windows平台)

diskpart

clean all

  1. 概述
    1. 操作对象是整块物理磁盘(Physical Disk),而非单个分区(Partition
    2. 该命令会删除磁盘上所有分区表信息(包括MBR/GPT结构),并将磁盘恢复为“未初始化”状态
  2. ssd
    1. 会对整个磁盘(不是分区)进行全零覆盖
    2. 虽尝试覆写,但因磨损均衡机制无法覆盖全部物理区块
  3. hdd
    1. 会全盘覆写0值(每个扇区填充0x00

delete partition

  1. 删除当前选中的分区(需先用 select partition 指定焦点)
  2. 操作层级:仅仅删除分区表相关信息,并不会擦除整个分区数据

delete partition override

  1. override 参数
    1. 强制绕过系统保护机制,允许删除受保护分区(如恢复分区、OEM分区、EFI系统分区等)
  2. 操作层级:仅删除分区表信息(MBR/GPT中的条目),不擦除实际数据

format

概述

0后随机

  1. 一次随机覆盖
    1. 覆盖逻辑固定为“先全零,后随机数”

  1. 实践发现
    1. 需要输入卷标
    2. 需要输入Y确认格式化

cipher

概述

  1. Windows 系统内置的命令行工具,主要用于 NTFS 文件系统的加密管理(EFS)和安全擦除操作

加解密文件

  1. 对指定文件或目录启用 EFS(加密文件系统)加密,后续新增文件自动继承加密属性
    1. 加密父目录可避免文件修改时意外解密

  1. 加密后能否访问文件/文件夹?
    1. 当前登录用户可以正常访问,无需额外操作
      EFS 加密是透明的:用户登录后,系统自动用其私钥解密文件,访问过程无感知
    2. 其他用户或未授权账户:无法访问
      尝试打开文件时会提示“拒绝访问”,因为系统无法用其他用户的私钥解密文件
    3. 特殊情况:
      若加密文件被复制到 FAT/FAT32 分区,会自动解密;移动到 NTFS 分区 则保持加密状态
  2. 解密是否需要密码?
    1. 默认情况下无需密码:
      EFS 解密依赖 用户登录凭证(非独立密码)。只要用户登录系统,即可自动解密文件
    2. 需密码的场景:
      密钥恢复:若用户重装系统或账户被删除,需导入备份的密钥文件(.PFX)。导入时需输入 导出时设置的密码(若有)
      多用户共享:通过 cipher /ADDUSER 添加其他用户时,需目标用户的 证书或密钥(非密码),但操作需管理员权限

安全擦除功能

  1. 覆盖未使用磁盘空间,彻底清除已删除文件的残留数据(支持全零覆盖)
  2. 原理
    1. HDD:三次覆写(0x000xFF → 随机值),符合基础安全标准
    2. SSD:通过 TRIM 通知主控标记无效数据,避免物理覆写损耗

  1. 注意
    1. 仅处理未分配空间,不影响现有文件
    2. SSD 推荐优先使用此命令而非物理覆写(如 format /P),减少写入放大

Nvme format

概述

  1. 用于对 NVMe 固态硬盘进行底层格式化的管理命令,涉及逻辑块格式调整、安全擦除和命名空间配置
  2. NVMe Format 命令通常针对整个物理磁盘或命名空间(Namespace),无法仅擦除单个分区(如 E 盘)

Ata sanitize

概述

  1. 是一种针对存储设备(尤其是固态硬盘SSD)的底层数据销毁技术,通过发送特定命令触发控制器对介质的物理级清理,确保数据不可恢复
  2. ATA Sanitize 命令是针对整个物理磁盘的操作,而不是针对单个分区(如 E 盘)

物理级擦除

  1. ATA Sanitize 直接作用于存储介质的物理块(Block),而非仅操作逻辑映射表。它通过以下方式实现数据销毁:
    1. Block Erase:对NAND闪存的每个存储单元施加高电压擦除信号,彻底清除电子记录(恢复至出厂状态)
    2. Crypto Erase:删除加密密钥(如设备支持硬件加密),使加密数据永久失效(无需覆写物理介质)
    3. Overwrite(不推荐):用固定模式(如全零)覆写数据,但因增加SSD写入损耗而少用

协议支持范围

  1. NVMe 固态(SATA/SAS
    1. SATA SSD
      Block Erase:物理擦除 NAND 块(适用于所有 SATA SSD
      Crypto Erase:删除加密密钥(需硬件加密支持)
      Overwrite:覆写数据(不推荐用于 SSD
    2. SAS SSD
      通过 SCSI 命令集实现 Sanitize,功能与 SATA 版本类似
  2. NVMe 固态
    1. NVMe SSD(需协议版本 ≥1.3
      NVMe 1.3 标准新增 Sanitize 命令,功能与 ATA 版本对齐

示例代码

  1. 检查是否支持

  1. 命令

trim

概述

  1. TRIM 本质上是操作系统与 SSD 之间的一种通信机制,用于优化垃圾回收(GC)过程
  2. 它通过特定指令通知 SSD 哪些数据块已被删除,从而避免无效数据的搬运

细节

  1. 操作系统通知 SSD:“某些逻辑块地址(LBA)的数据已无效,无需保留”
  2. SSD 主控据此标记物理块为 Invalid,后续 GC 直接跳过这些块
    1. SSDFTL(闪存转换层)更新 LBA→PBA 映射表,标记对应物理块为可回收状态
  3. TRIM 不立即擦除数据,而是标记无效状态,由 SSD 后台异步执行物理擦除

核心作用

  1. 操作系统与SSD的通信机制
    1. 当用户删除文件时,操作系统通过TRIM命令(ATA接口)或等效命令(SCSIUNMAPNVMeDeallocate)通知SSD哪些逻辑块地址(LBA)的数据已无效
    2. SSD据此标记物理块为“Invalid”,后续GC可直接跳过这些块,避免无效数据搬运
  2. 总结1:
    1. TRIM标记的LBA(逻辑块地址)会被SSD主控标记为“Invalid”,垃圾回收(GC)过程会跳过这些块,不会搬运其中的数据

指令实现(按接口协议分类)

  1. ATA/SATA 接口
    1. 指令名称:TRIM (DataSet Management Command)
    2. 命令码:0x06

  1. NVMe接口
    1. 指令名称:Deallocate (或 Dataset Management)
    2. 命令码:0x09

  1. SCSI/SAS 接口
    1. 指令名称:UNMAP
    2. 命令码:0x42

关于被标记的块

  1. TRIM标记的块是否允许直接写入新数据?
    1. SSD主控需在后台擦除标记为Invalid的物理块(NAND闪存特性要求写入前必须先擦除)
    2. 新数据写入时,SSDFTL(闪存转换层)会建立新的LBA→PBA(物理块地址)映射,覆盖旧映射

分区擦除简述

概述

  1. 分区的擦除,和普通文件的不一样,要对分区盘符进行权限独占

开始时独占权限

结束时恢复

实现

  1. 示例实现,大于50gb开始分线程,最大4

擦除方案

SSD

  1. nvme ssd
    1. diskpart 不行,恢复可能高
    2. nvme format 针对的是整个物理磁盘
    3. Ata sanitize 针对的是整个物理磁盘
  2. 关于分区擦除的其他方式
    1. 多线程写入擦除,详细见分区擦除简述

HDD

  1. format
  2. 其他方式待记

未使用空间

  1. cipher

问题记录

概述

  1. 上述方法,擦除处理普通分区是没问题的
  2. 但是,如果要擦除的分区有进程正在运行,就不行了,直接在最开始锁定卷的时候会失败,报权限问题
  3. 或者,如果要擦除的分区有页面文件卷等受保护内容,也不行,直接在最开始锁定卷的时候会失败,报权限问题

关于有进程运行的情况

  1. 问题描述
    1. 比如E盘里面现在运行了一个进程,这时对E盘进行锁定,会失败,报Access is denied.
  2. 解决方案

关于有受保护内容的情况

  1. 问题描述
    1. 比如有pagefile.sys等内容
  2. 解决方案

其他记录

wstrstr

error_codestr

获取簇或块大小

  1. Windows中,簇与块是等价概念

获取分区的物理磁盘编号

  1. 获取分区的物理磁盘编号,判断下两个分区是否在同一个物理磁盘上

是否固态

是否开启了trim

ata命令

sanitize命令

检查是否支持sanitize

是否系统卷

是否启动卷

简单的线程数量计算

简单的进度条计算

  1. 每次按1%通知,可以控制在99,最后来一个成功的通知

声明:本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

bingliaolong
Bingliaolong 关注:0    粉丝:0 最后编辑于:2025-07-11
Everything will be better.

发表评论

表情 格式 链接 私密 签到
扫一扫二维码分享