固态硬盘具有读写速度快、零噪音、体积小、低功耗等诸多优点,所以现在新配电脑,固态硬盘是首选。比如说我的NUC7I5主力办公机器以及我的超大台机都是用的固态盘。
(图源 :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
/dev/nvme0n1
/dev/sdc
可见,NVME接口的设备直接给出了我们TBW,而SATA接口的还需要我们换算一下。
换算其实也挺简单的Total_LBAs_Written
,这个LBA指的是逻辑块,在NVME接口设备的SMART信息中,我们可以找到类似如下的信息:
而在SATA接口设备的SMART信息中,我们可以找到类似如下信息:
反正大意就是一个逻辑块512个字节,所以上述Total_LBAs_Written=457893868264
换成成字节数就是512*457893868264
,最终就是:
大致换算一下,就是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.
至此,这个疑问也排除了。
(图源 :pixabay)
所以,我的三个固态盘的TBW,分别是1.10TB
、215TB
以及234TB
,去查了一下它们对应的上限,距离上限尚远,再用它个五七八年肯定是啥问题都没有,这样我就放心啦。