![hdparm 无法读取 SSD?HDIO_DRIVE_CMD(identify)失败:设备的 ioctl 不合适](https://linux22.com/image/1584733/hdparm%20%E6%97%A0%E6%B3%95%E8%AF%BB%E5%8F%96%20SSD%EF%BC%9FHDIO_DRIVE_CMD%EF%BC%88identify%EF%BC%89%E5%A4%B1%E8%B4%A5%EF%BC%9A%E8%AE%BE%E5%A4%87%E7%9A%84%20ioctl%20%E4%B8%8D%E5%90%88%E9%80%82.png)
我正在尝试使用它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
如何使用hdparm
SSD 上的安全擦除选项?根据互联网上另一个页面的建议,建议使用 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。