我正在尝试检查未安装操作系统的计算机上硬盘的某些规格。我正在使用 Knoppix 可启动磁盘 (v8.6.1) 来运行包含以下行的 bash 脚本
smartctl -i /dev/nvme0
然而,我不断收到同样的消息:
读取 NVMe 识别控制器失败:NVME_IOCTL_ADMIN_CMD:错误地址
我可以在另一台已安装不同 Linux 发行版的计算机(相同型号)上正常运行此命令,但由于某种原因,该命令在 Knoppix 磁盘上运行时失败。
注意:我可以运行如下命令
smartctl -d nvme --scan
输出
/dev/nvme0 -d nvme # /dev/nvme0,NVMe 设备
但我无法运行 smartctl 命令,例如
smartctl -i /dev/nvme0
smartctl -x /dev/nvme0
smartctl -a /dev/nvme0
smartctl -H /dev/nvme0
或任何其他应该实际返回硬盘信息的命令。它们都产生上述相同的“坏地址”消息。
答案1
Knoppix 过去曾发布过 32 位用户空间和可选的 64 位内核。Linux Kernel 5.6.8 的变更日志包含一个提交,专门解决了 64 位内核上 32 位 smartctl 中 NVME_IOCTL_ADMIN_CMD ioctl 的使用问题(参考:https://cdn.kernel.org/pub/linux/kernel/v5.x/ChangeLog-5.6.8提交 51750ad35f266751e14d6c7e8839b85c8069e27f)。此外,Knoppix 8.6.1 附带了 Linux Kernel 5.3.5(参考:https://www.knopper.net/knoppix/knoppix861-en.html。这显然是在补丁发布之前,因此会导致这种类型的错误。
因此,你有两个解决方案:
- 升级到内核 5.6.8 或更高版本,以便兼容接口将高位清零。
- 为 64 位重建 smartctl 及其依赖项。