hdparm 不读取 SSD?HDIO_DRIVE_CMD(identify) 失败:设备的 ioctl 不合适

Jac*_*ack 12 ssd secure-erase ubuntu hdparm

我正在尝试对hdparm我的 512GB SSD SK Hynix 进行安全擦除。SSD 中安装了 Windows 10。

我从 USB 闪存驱动器启动 Ubuntu。

sudo fdisk -l
Run Code Online (Sandbox Code Playgroud)

我得到了很多不同的磁盘,结果/dev/sda是我的 8GB 闪存驱动器,而不是 SSD。

SSD被列为:

Disk /dev/nvme0n1: 477 GiB, 512110190592 bytes, 1000215216 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Run Code Online (Sandbox Code Playgroud)

现在,当我尝试运行时hdparm -I /dev/nvme0n1,终端给了我错误:

/dev/nvme0n1:
 HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device
Run Code Online (Sandbox Code Playgroud)

如何hdparm在我的 SSD 上使用安全擦除选项?根据互联网上另一个页面的建议建议使用 nvme-cli 包,但我不明白这有什么帮助。

不建议对 SSD 使用 shred 命令,因为 SSD 的读/写周期有限,而且它的工作方式与 HDD 非常不同。

更新:我的 SSD 是 NVMe 设备,而不是 ATA,因此hdparm命令不合适,请nvme -format改用。

use*_*686 10

使用 nvme-cli擦除 NVMe 设备,请运行nvme format -s1 <device>.

建议使用 nvme-cli 包,但我不明白这有什么帮助。

hdparm 仅适用于使用ATA协议的设备,但您的​​ SSD 是为使用NVMe协议而构建的。

这种差异不仅限于物理连接(如 IDE/SATA)——相反,操作系统在与设备通信时必须使用一组完全不同的命令。没有任何 ATA 命令适用于 NVMe(存在“安全擦除”的一般概念,但实现方式不同)。

因此向您推荐了 nvme-cli,因为 hdparm 从一开始就是错误的工作工具。


理论上,操作系统可以在命令集之间进行转换(拦截 ATA 命令并发出等效的 NVMe 命令),实际上 Linux 内核内部在某种程度上为 SCSI 到 ATA 执行了此操作。在某些时候,Linux 甚至曾经支持基本的 SCSI 到 NVMe 转换,但由于系统差异太大,这最终被删除。

但是,它对您没有帮助,因为 Linux 不会反过来做:您已经无法对 SCSI 磁盘使用特定于 ATA 的 hdparm,同样您也无法对 NVMe 使用 hdparm磁盘。