如何在 Ubuntu 上使用 smartctl 检查 NVMe ssd 的健康状况?
我的笔记本电脑配有 NVMe 固态硬盘,最近经常崩溃,并出现奇怪的磁盘读取错误。幸运的是,重新启动暂时解决了这个问题,但我试图确认问题是固态硬盘性能下降,而不是其他问题,例如主板故障。
smartctl 的一般用法是运行如下命令:
sudo smartctl -i /dev/sdX
但是,NVMe 不会这样挂载。它们使用 nvm* 前缀挂载,并带有一层额外的挂载点,如下所示:
ls -lah /dev/nv*
crw------- 1 root root 238, 0 Oct 31 10:11 /dev/nvme0
brw-rw---- 1 root disk 259, 0 Oct 31 10:11 /dev/nvme0n1
brw-rw---- 1 root disk 259, 1 Oct 31 10:11 /dev/nvme0n1p1
brw-rw---- 1 root disk 259, 2 Oct 31 10:11 /dev/nvme0n1p2
brw-rw---- 1 root disk 259, 3 Oct 31 10:11 /dev/nvme0n1p3
crw------- 1 root root 10, 144 Oct 31 10:11 /dev/nvram
我应该检查其中哪一个?这/dev/nvme0n1p2
是我的主要数据分区,但我还想确保其他分区未损坏,因此我可能需要检查其中一个“父”分区。
我是否应该检查/dev/nvme0
或/dev/nvme0n1
?
答案1
/dev/nvme0
表示原始设备,是您用来配置硬件的“控制”设备节点,而/dev/nvme0n1
表示块存储(或其中的一部分)。(具体来说,nvme0n1 是命名空间– 类似于分区但在“硬件”级别的逻辑划分,略微类似于 SCSI LUN。理论上,单个 NVMe 设备可以有多个命名空间,例如具有不同的加密设置。)
一般来说,SMART 信息(以及任何其他类型的硬件状态)对于设备来说是全局的,因此使用节点nvme0
会更合适,但在当前的 Linux 版本中两个都控制设备和块存储设备将同样接受 SMART ioctl。(特别是在只有一个命名空间的消费级 SSD 上。)
(另外:这些不是挂载点——它们是设备节点。挂载某些东西的目录在将成为挂载点,例如 /home。
答案2
您似乎对 SMART 的功能存在误解。
SMART 不是用于检查分区,而是用于检查硬件驱动器的物理状态/错误。在smartctl
或 上/dev/sda
运行都没有区别/dev/sda1
,输出将始终引用物理驱动器/dev/sda
。