在Linux下测量“写入的总字节数”


36

我们非常有兴趣探索在服务器环境中使用SSD驱动器的可能性。但是,我们需要确定的一件事是预期使用寿命。根据这篇文章,制造商报告的驱动器耐久性以“写入的总字节数”(TBW)表示。例如,该文章的Crucial C400 SSD额定值为72TB TBW。Linux生态系统中是否存在任何脚本/工具来帮助我们测量TBW?(然后对使用SSD驱动器的可行性做出更有根据的决定)

Answers:


28

另一种可能性是查看/ proc / diskstats。它在重新启动后不是持久的,但是它具有每个块设备的数据。您可能最感兴趣的是字段10,其中包含写入的扇区总数。在具有扇区大小为512字节的scsi磁盘的系统上,可以运行

awk '/sd/ {print $3"\t"$10 / 2 / 1024}' /proc/diskstats

查看每个设备写入了多少兆字节。输出看起来像

sda 728.759
sda1 79.0908
sda2 649.668


4
可以通过运行命令#cat / sys / block / sda / queue / hw_sector_size找到扇区大小
Antonio

@安东尼奥谢谢!我不确定何时添加。它看起来像是在3.2中,但不是在2.6.18中。
sciurus

@sciurus您能解释一下计算背后的数学原理吗?你在谈论的部门= 512的大小,但你的计算除以一千零二十四分之二读值
环流

@gyre字段10包含写入的0.5 KB扇区数。我将其除以2得到的千字节数。然后,我将其除以1024以转换为兆字节。
sciurus

@antonio 确实显示了底层硬件正在使用的扇区大小,但是从内核源代码,iostat源代码和经验测试来看,/ proc / diskstats中的“ sectors”数字始终指的是512字节,即使hw_sector_size不同(至少从2.4系列开始)。block/cfq-iosched.c特别参见cfqg_stats_update_dispatch()
保罗

23

我当时在笔记本电脑上也遇到了同样的问题,但是由于我每天都要重新启动它,因此被接受的答案没有帮助。我有一个三星mSATA SSD,它碰巧具有SMART属性#241 Total_LBAs_Written。根据官方文件

要计算总大小(以字节为单位),请将此属性的原始值乘以512B。

所以下面的命令给了我写入我的SSD磁盘(sdb)的总TB

sudo smartctl -A /dev/sdb | awk '/^241/ { print "TBW: "($10 * 512) * 1.0e-12, "TB" } '

因为它也可以在我的HDD上工作,所以我认为它几乎可以在每个现代硬盘上工作。


3
不,这仅在某些型号的SSD驱动器上存在。它不是通用的。
迈克尔·汉普顿

3
我想指出的是您的方程实际上产生一个数字,关闭它会更准确:sudo smartctl -A /dev/sda1 | awk '/^241/ { print "TBW: "($10 * 512) * 1.0e-12, "TB" }'
乔登·贝德威尔

我的Intel SSD具有相同的属性,但称为Host_Writes_32MiB。还有249属性NAND_Writes_1GiB。因此请注意,每个SSD似乎都不同(例如,我的mSATA Intel SSD没有这些属性)
reox 2016年

在我的Intel SSD Pro 5400s(SATA)上,Total_LBAs_Written以GB为单位指定!毫无道理的低4714智能正在显示。但是在Windows的Intel SSD工具箱中查看时,显示的单位是GB。
MrCalvin

15

通过查看/ sys / fs / ext4 / $ DEVICE / lifetime_write_kbytes,可以查看已将多少数据写入ext4文件系统。


我不知道这是一个很酷的功能!可惜我们的大多数系统都运行ext3,并且还运行了一些VM的原始LVM分区:)
badnews 2011年

ext3(程度稍小)不是为写入闪存而设计的。失败的发生将取决于位置写入的次数-使用传统的文件系统,热点的发展非常迅速。制造商引用的数字极具误导性,因为他们假设写入量平均分布。有些文件系统(例如JFFS2)专门设计用于延长SSD的寿命。
symcbean 2011年

2
@symcbean-对于当今的闪存设备,这在很大程度上不是问题。它们都在其内置控制器中内置了磨损均衡例程。
EEAA 2011年

1
@symcbean-有两种闪存设备。内存技术设备(或MTD)提供了与闪存的直接接口。这些通常在嵌入式设备中找到,并且是为JFFS2这样的文件系统设计的。另一种闪存设备将闪存隐藏在“稍后进行Flash转换”(FTL)之后,使其看起来像是常规块设备。这就是实现消费者技术(如SSD,USB记忆棒和存储卡)的方式。像JFFS2这样的文件系统不适合这些;相反,您必须使用专门为块设备设计的文件系统,例如ext4。
sciurus

1
注意:ext4 lifetime_write_kbytes和session_write_kbytes不代表SSD存储单元写操作。我已经看到一个系统报告ext4 life_write_kbytes为15TB,而SSD本身通过SMART属性241报告的仅为1TB。我怀疑ext4每次运行fstrim时,ext4可能会将文件系统的可用空间的整个大小添加到这些统计信息中,即使SSD如果自上次擦除以来未触及所有这些可用块,则控制器显然不会重复擦除所有这些可用块。tune2fs -l输出似乎同样具有误导性。
ʇsәɹoɈ

2

你可以试试看iostat。它提供有关IO和CPU使用率的统计信息。看一下手册man iostat


我想那可以用,但是我希望有一些更高级别的可以提供累积的字节总数:)
badnews 2011年

2

对于在Ubuntu Server 14.04下的KINGSTON SEDC400S37480G,我使用以下脚本监视TBW。我每天从cron运行一次。脚本输出到日志文件。

您需要计算才能使其正常工作。使用以下方法安装calc:

apt-get install apcalc

脚本内容:

echo "*** $(date -R) ***" >> /scripts/tbw/log.txt
tbw=$(cat /sys/fs/ext4/sda1/lifetime_write_kbytes)
TB=1000000000
echo TB written to sda1: >> /scripts/tbw/log.txt | calc $tbw / $TB >> /scripts/tbw/log.txt

将输出:

*** Thu, 20 Jul 2017 03:02:51 +0300 ***
TB written to sda1:
    3.062138442

可以使用GNU bc
Elton Carvalho
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.