昨天突然想用iostat查看一下磁盘的状态,虽然我确信以前我用过,并且会用,但是再拿起来,发现我好像只会敲出命令指令了。
(图源 :pixabay)
iostat工具包含在sysstat包中,如果你的系统没有安装,那么需要先使用如下指令安装(Ubuntu):
sudo apt install sysstat
然后就可以用这个指令查看状态了:
iostat
等等,我有点晕:
不过好在有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,有点夸张):
那这个数据为何差异如此之大呢?想了半天才想明白,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)了。
重启一下机器,再看这些数据,果然差不多都归零了:
如果想看实时的数据,或者说小统计区间的数据,可以用如下指令:
iostat interval [count]
比如说:
iostat 10 4
由于这时候我没开什么应用,所以数据相对较小,还是比较好看的:
好了,现在总算搞明白了,主要区别就是iostat是统计区间的,不能用于查看磁盘设备的TBW,除非你全新磁盘插上后,就从未关机过,哈哈。