Como muitas vezes acontece, eu pulei na frente para reinventar a roda que já existe em smartmontools
package. Este pacote oferece muitas ferramentas de diagnóstico para discos rígidos e SSDs (ou, em termos mais técnicos, dispositivos SCSI). Em particular, o comando smartctl
é o que procuramos:
$ sudo smartctl -A /dev/sda
[sudo] password for xieerqi:
smartctl 6.5 2016-01-24 r4214 [x86_64-linux-4.4.0-65-generic] (local build)
Copyright (C) 2002-16, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF READ SMART DATA SECTION ===
SMART Attributes Data Structure revision number: 18
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
5 Runtime_Bad_Block 0x0000 000 000 000 Old_age Offline - 0
9 Power_On_Hours 0x0000 100 100 000 Old_age Offline - 8080
12 Power_Cycle_Count 0x0000 100 100 000 Old_age Offline - 1419
171 Avail_OP_Block_Count 0x0000 100 100 000 Old_age Offline - 40907856
174 Pwr_Cycle_Ct_Unplanned 0x0000 100 100 000 Old_age Offline - 78
195 Total_Prog_Failures 0x0000 100 100 000 Old_age Offline - 0
196 Total_Erase_Failures 0x0000 100 100 000 Old_age Offline - 0
197 Total_Unc_Read_Failures 0x0000 100 100 000 Old_age Offline - 0
208 Average_Erase_Count 0x0000 100 100 000 Old_age Offline - 179
210 SATA_CRC_Error_Count 0x0000 100 100 000 Old_age Offline - 0
224 In_Warranty 0x0000 100 100 000 Old_age Offline - 1
233 Remaining_Lifetime_Perc 0x0000 095 095 000 Old_age Offline - 95
241 Host_Writes_GiB 0x0000 100 100 000 Old_age Offline - 3133
242 Host_Reads_GiB 0x0000 100 100 000 Old_age Offline - 2745
249 Total_NAND_Prog_Ct_GiB 0x0000 100 100 000 Old_age Offline - 301548705
O que você vê acima é uma lista de atributos para meu SSD. De particular interesse é o atributo 241 (Host_Writes_GiB) e 242 (Host_Reads_GiB). Estes valores estão em GiB (que é uma unidade de medida clássica em ciência da computação em potências de 1024 bytes, neste caso 1024 ^ 3, em vez de unidades SI de potências de 10).
No nível mais baixo, tanto quanto eu entendo, este utilitário analisa o arquivo lifetime_write_kbytes
real na pasta /sys/fs
. Particularmente, no meu exemplo:
$ cat /sys/fs/ext4/sda1/lifetime_write_kbytes
4793857835
Claro, esse é um utilitário de linha de comando. Se você não tiver instalado (verifique via apt-cache policy smartmontools
), instale-o via sudo apt-get install smartmontools
. Existe o Gnome Disks Utility como alternativa de GUI e vem com o Ubuntu.
No entanto, existem algumas advertências:
- As informações SMART devem ser fornecidas pelo dispositivo. Se o dispositivo for bastante barato e não tiver essas informações, será necessário reinventar a roda como quisesse originalmente por meio do monitoramento do arquivo
/proc/diskstats
. - Os atributos específicos devem ser fornecidos pelo dispositivo. Por exemplo, informações sobre o tnfd22 ssd encontradas no site smartmontools não fornecem essas informações.
Existe também um pequeno problema: as informações resultantes mostradas são o histórico total de leituras / gravações. Portanto, você não pode extrair leituras / gravações no último x número de dias. Pelo menos não é possível com smartctl
ou nenhuma das ferramentas que encontrei até agora. No entanto, o que você pode fazer é agendar uma tarefa diária cron
que lerá /sys/fs/ext4/sda1/lifetime_write_kbytes
e anexará os dados com carimbo de hora a um arquivo. Mais tarde, você pode subtrair diferenças para ver quanto foi escrito em cada dia. Por exemplo, o conteúdo de tal comando seria:
30 08 * * * bash -c '{ date; cat /sys/fs/ext4/sda1/lifetime_write_kbytes; echo ;} >> /home/user/my_disk_log.txt'