不懂就学系列:iostat的kB_wrtn与smartctl 的TBW

Words
724
Reading
4 min
Listen
Play
5y

昨天突然想用iostat查看一下磁盘的状态,虽然我确信以前我用过,并且会用,但是再拿起来,发现我好像只会敲出命令指令了。

image.png
(图源 :pixabay)

iostat工具包含在sysstat包中,如果你的系统没有安装,那么需要先使用如下指令安装(Ubuntu):

sudo apt install sysstat

然后就可以用这个指令查看状态了:

iostat

等等,我有点晕:

image.png

不过好在有man手册可查,对照着总算“弄懂”或者说回想起来这些条目的意思了。

然后,看到这条数据,我又有些懵圈了:

Device tps kB_read/s kB_wrtn/s kB_read kB_wrtn
nvme0n1 666.97 181.95 3487.28 709214461 13593186932

这个kB_wrtn是总写入的数据,折算下来大概是12.65T,可是我记得用smartctl查看时,可不止这么多啊。

再用smartctl查看一下:

sudo smartctl --all /dev/nvme0n1

结果显示,写入的数据量为218TB(咦,比7天前我查看时,多了3个T,有点夸张):

image.png

那这个数据为何差异如此之大呢?想了半天才想明白,iostat是统计区间的,如果不加任何参数,那么显示的数据是从开机到当前时间这段区间内的:

查看一下我们开机了多久:

uptime

原来这台机器开机了45天了:

15:19:36 up 45 days, 2:53, 2 users, load average: 0.92, 0.40, 0.34

所以由上边报告计算出来的12.65T写入数据量,是在45天内写入的,平均每天写入0.28T,写入量果然是有些大啊。

查看了一下我这块盘对应的技术参数,其中标注:

耐用等级(终身写入)576 TBW

按0.28T每天计算,那么这块盘的剩余寿命大概是:

(576 - 218)/0.28/365 = 3.5(年)

好吧,省着点用,再战两三年,问题不大。

扯远了,继续回到iostat的数据上来,看手册中关于这两个条目的说明:
Blk_wrtn/s (kB_wrtn/s, MB_wrtn/s)

Indicate the amount of data written to the device expressed in a number of blocks (kilobytes, megabytes) per second.

Blk_wrtn (kB_wrtn, MB_wrtn)

The total number of blocks (kilobytes, megabytes) written.

通过计算我得到的数据,其实Blk_wrtn/s (kB_wrtn/s, MB_wrtn/s)是在统计区间内的平均值而不是实时值,平均值乘以统计周期就是Blk_wrtn (kB_wrtn, MB_wrtn)了。

重启一下机器,再看这些数据,果然差不多都归零了:

image.png

如果想看实时的数据,或者说小统计区间的数据,可以用如下指令:

iostat interval [count]

比如说:

iostat 10 4

由于这时候我没开什么应用,所以数据相对较小,还是比较好看的:

image.png

好了,现在总算搞明白了,主要区别就是iostat是统计区间的,不能用于查看磁盘设备的TBW,除非你全新磁盘插上后,就从未关机过,哈哈。