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

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

我正在尝试使用它hdparm来安全擦除我的 512GB SSD SK Hynix。SSD 中安装了 Windows 10。

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

sudo fdisk -l

我得到了很多不同的磁盘,结果/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

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

/dev/nvme0n1:
 HDIO_DRIVE_CMD(identify) failed: Inappropriate ioctl for device

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

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

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

答案1

擦除 NVMe 设备使用 nvme-cli,运行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。

相关内容