每天进步一点点:Linux系统下使用smartctl 检测固态硬盘TBW信息

固态硬盘具有读写速度快、零噪音、体积小、低功耗等诸多优点,所以现在新配电脑,固态硬盘是首选。比如说我的NUC7I5主力办公机器以及我的超大台机都是用的固态盘。

image.png
(图源 :pixabay)

NUC7I5用的三星970 PRO(NVME接口)加一块西数的垃圾SSD(SATA3.0),而大台机里有两个INTEL 760P(NVME接口)加一块三星的883DCT(还有俩个希捷的银河16T企业盘/HDD)。

对于高IOPS的需求,也只有固态盘才能胜任,所以无论是在NUC上开N多网页窗口,或者是在大台机上Replay HIVED啥的,都表现的非常完美。

不过固态盘有一个问题,就是写入寿命,又叫做TBW(Terabytes written),用于度量固态硬盘写入操作耐力。简单来讲,一块固态盘,一旦写入的数据量达到了TBW的上限,那么估计就快要废掉了。

所以其实我很关心我的几块固态盘的TBW,怕它突然就达到上限而我却并不知道,然后突然就挂掉了。尽管固态盘都挺贵的,不过想必之下,我的数据更是无价啊。

在Windows下,这些固态盘产商都会提供一些磁盘健康的监控软件,只要运行一下软件,固态盘的TBW以及TBW上限都会以柱状图的形式表现出来,一目了然。

我运行过几次这类软件后,发现尽管的NUC属于重度使用,但是距离TBW超限还远着呢,大概要十几年后,那时候估计我早就换设备了,所以大可不必担心。于是乎,我把那些检测软件都卸载了。

然而在Linux下,我却不知道该如何着手,另外因为Linux持续地跑着一些程序,所以我认为可能TBW会更高一些,这让我愈加担心它们突然挂掉,所以我下决心,一定要搞明白,Linux下怎么查看固态盘的TBW。

咋说来着,世上无难事,经过一番调查,其实用smartctl这个工具就可以搞定了。其实我早该想到,并且也接触过这个工具,不用就是用它来看一下硬盘的序列号,通电时间之类的。

好,言归正传,我们来看一下Linux系统下怎么用smartctl查看固态盘的TBW。

首先,如果你的Linux系统下不存在smartctl这个工具,那么你需要手动安装一下,我用的是Ubuntu,安装指令如下:

sudo apt install smartmontools

然后可以用以下指令来测试指定的磁盘设备了:

sudo smartctl --all device

在这之前,我们需要先找出机器上对应的磁盘设备都有哪些,可以使用如下指令:

sudo fdisk -l

比如我这里可以看到如下设备:

Disk /dev/nvme1n1: 477 GiB, 512110190592 bytes, 1000215216 sectors
Disk /dev/nvme0n1: 1.9 TiB, 2048408248320 bytes, 4000797360 sectors
Disk /dev/sdc: 3.5 TiB, 3840755982336 bytes, 7501476528 sectors
Disk /dev/sda: 14.6 TiB, 16000900661248 bytes, 31251759104 sectors
Disk /dev/sdb: 14.6 TiB, 16000900661248 bytes, 31251759104 sectors

分别对应我的两块NVME固态盘(INTEL 760P)以及一块SATA 3.0接口的SSD(三星的883DCT),以及两块希捷银河16T的HDD。

从上边结果中我们可以看到,设备名和设备的接口相对应,SATA接口的设备名是/dev/sdx,而NVME接口的设备名则是dev/nvmexxx

使用sudo smartctl --all device分别对上述设备(固态盘)进行测试,发现对于NVME接口以及SATA接口的固态盘,返回结果有所差异。我贴出其中涉及写入字节的部分。

/dev/nvme1n1

Reveal spoiler

image.png

/dev/nvme0n1

Reveal spoiler

image.png

/dev/sdc

Reveal spoiler

image.png

可见,NVME接口的设备直接给出了我们TBW,而SATA接口的还需要我们换算一下。

换算其实也挺简单的Total_LBAs_Written,这个LBA指的是逻辑块,在NVME接口设备的SMART信息中,我们可以找到类似如下的信息:

Reveal spoiler

image.png

而在SATA接口设备的SMART信息中,我们可以找到类似如下信息:

Reveal spoiler

image.png

反正大意就是一个逻辑块512个字节,所以上述Total_LBAs_Written=457893868264换成成字节数就是512*457893868264,最终就是:

Reveal spoiler

image.png

大致换算一下,就是234T的样子。算到这我发现NVME给出的数据差了1000倍,比如:

Data Units Written: 420,943,868 [215 TB]

Google了一下,发现SMART Attribute Details这篇文档中有如下描述:

Data Units Written: Contains the number of 512 byte data units the host has written to the controller;this value does not include metadata. This value is reported in thousands(i.e., a value of 1 corresponds to 1000 units of 512 bytes written) and is rounded up. When the LBA size is a value other than 512 bytes, the controller shall convert the amount of data written to 512 byte units.

至此,这个疑问也排除了。

image.png
(图源 :pixabay)

所以,我的三个固态盘的TBW,分别是1.10TB215TB以及234TB,去查了一下它们对应的上限,距离上限尚远,再用它个五七八年肯定是啥问题都没有,这样我就放心啦。

相关链接

Sort:  

Your content has been voted as a part of Encouragement program. Keep up the good work!

Use Ecency daily to boost your growth on platform!

Support Ecency
Vote for new Proposal
Delegate HP and earn more

我竟然一字不漏滴看完了,哈哈,太佩服我自己了,当然也必须佩服佩服O哥的学识。

看了O哥的博客,真的是O神👍。我是学金融的,想学会这些好难呀。但是我会每天看O哥的博客,希望每天进步一点点,感谢O哥的分享。

在Windows下,这些固态盘产商都会提供一些磁盘健康的监控软件,只要运行一下软件,固态盘的TBW以及TBW上限都会以柱状图的形式表现出来,一目了然。

o哥,这项能不能写个教材。
受益的人会更多。