Я пытаюсь проверить некоторые характеристики жесткого диска на компьютере без установленной операционной системы. Я использую загрузочный диск Knoppix (v8.6.1) для запуска скрипта bash со строкой
smartctl -i /dev/nvme0
Однако я продолжаю получать одно и то же сообщение:
Ошибка чтения NVMe Identify Controller: 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
или любая другая команда, которая должна фактически возвращать информацию о жестком диске. Все они выдают одно и то же сообщение "bad address", указанное выше.
решение1
Knoppix исторически поставлял 32-битное пользовательское пространство и опциональное 64-битное ядро. Журнал изменений для Linux Kernel 5.6.8 включает в себя коммит, который специально занимался использованием ioctl NVME_IOCTL_ADMIN_CMD из 32-битного smartctl на 64-битном ядре (ссылка:https://cdn.kernel.org/pub/linux/kernel/v5.x/ChangeLog-5.6.8коммит 51750ad35f266751e14d6c7e8839b85c8069e27f). Более того, Knoppix 8.6.1 поставляется с ядром Linux 5.3.5 (ссылка:https://www.knopper.net/knoppix/knoppix861-en.html. Это произошло задолго до выхода патча, поэтому это могло вызвать такую ошибку.
Итак, у вас есть два решения:
- обновите ядро до версии 5.6.8 или выше, чтобы интерфейс совместимости обнулил старшие биты.
- Пересоберите smartctl и его зависимости для 64-битной версии.