Medición de 'bytes totales escritos' en Linux

36

Estamos bastante interesados ​​en explorar la posibilidad de usar unidades SSD en un entorno de servidor. Sin embargo, una cosa que debemos establecer es la longevidad de la unidad esperada. Según este artículo, los fabricantes informan la resistencia de la unidad en términos de "bytes totales escritos" (TBW). Por ejemplo, a partir de ese artículo, un SSD Crucial C400 tiene una potencia de 72 TB TBW. ¿Existen scripts / herramientas en el ecosistema de Linux para ayudarnos a medir TBW? (y luego tome una decisión más informada sobre la viabilidad del uso de unidades SSD)

malas noticias
fuente

Respuestas:

28

Otra posibilidad es mirar / proc / diskstats . No es persistente en todos los reinicios, pero tiene datos para cada dispositivo de bloque. Probablemente lo más interesante para usted es el campo 10, que contiene el número total de sectores escritos. En un sistema con discos scsi con un tamaño de sector de 512 bytes, puede ejecutar

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

para ver cuántos megabytes se escribieron en cada dispositivo. La salida se verá como

sda 728.759
sda1 79.0908
sda2 649.668

Sciurus
fuente
44
El tamaño del sector se puede encontrar ejecutando el comando #cat / sys / block / sda / queue / hw_sector_size
Antonio
@Antonio gracias! No estoy seguro de cuándo se agregó eso. Parece que está en 3.2 pero no en 2.6.18.
sciurus
@sciurus, ¿podría explicar las matemáticas detrás de sus cálculos, por favor? Estás hablando del tamaño del sector = 512 pero tus cálculos están dividiendo el valor de lectura con 2/1024
giro
@gyre El campo 10 contiene el número de sectores de 0,5 kilobytes escritos. Lo divido por 2 para obtener la cantidad de kilobytes escritos. Luego divido eso por 1024 para convertir a megabytes.
Sciurus
@antonio Eso muestra el tamaño del sector que se usa con el hardware subyacente, pero a pesar de la fuente del núcleo, la fuente del iostato y las pruebas empíricas, el número de "sectores" en / proc / diskstats siempre se refiere a 512 bytes, incluso cuando hw_sector_sizees diferente ( al menos desde la serie 2.4). Ver block/cfq-iosched.c, particularmente cfqg_stats_update_dispatch().
el paul
23

Estaba luchando con el mismo problema en mi computadora portátil, pero como lo reinicio casi a diario, la respuesta aceptada no fue útil. Tengo un SSD Samsung mSATA, que tiene el atributo SMART # 241 Total_LBAs_Written. De acuerdo con la documentación oficial ,

Para calcular el tamaño total (en bytes), multiplique el valor bruto de este atributo por 512B.

Entonces, el siguiente comando me da la TB total escrita en mi disco SSD (sdb)

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

Como también funciona en mi HDD, supongo que debería funcionar en casi todos los discos duros modernos.

Gabriel Miretti alias gmiretti
fuente
3
No, esto solo existe en ciertos modelos de unidades SSD. No es universal
Michael Hampton
3
Quería señalar que la ecuación realmente produce un número que está fuera de él sería más exacto como: sudo smartctl -A /dev/sda1 | awk '/^241/ { print "TBW: "($10 * 512) * 1.0e-12, "TB" }'.
Jordon Bedwell
Mi Intel SSD tiene el mismo atributo pero se llama Host_Writes_32MiB. También hay un atributo 249 NAND_Writes_1GiB. Así que tenga en cuenta que en cada SSD esto parece ser diferente (por ejemplo, un mSATA Intel SSD mío no tiene esos atributos)
reox
¡En mi Intel SSD Pro 5400s (SATA) Total_LBAs_Writtense especifica en GB! No podía tener ningún sentido de lo poco 4714inteligente que se mostraba. Pero mirar en la Caja de herramientas Intel SSD en Windows mostró que estaba en GB.
MrCalvin
15

Puede ver cuántos datos se han escrito en un sistema de archivos ext4 mirando / sys / fs / ext4 / $ DEVICE / lifetime_write_kbytes.

Sciurus
fuente
¡Esa es una característica genial que no conocía! Una pena la mayoría de nuestros sistemas están funcionando ext3 y también algunas particiones LVM primas para máquinas virtuales :)
badnews
ext3 (y en menor medida) ext4 no están diseñados para escribir en flash. La falla ocurrirá dependiendo de la cantidad de veces que se escriba una ubicación, y con los sistemas de archivos convencionales, los puntos calientes se desarrollan muy rápidamente. Las cifras citadas por los fabricantes son muy engañosas, ya que suponen una difusión uniforme de las escrituras. Existen sistemas de archivos, como JFFS2, diseñados específicamente para extender la vida útil de sus SSD.
symcbean
2
@symcbean: con los dispositivos flash actuales, esto no es un gran problema. Todos tienen rutinas de nivelación de desgaste incorporadas en sus controladores a bordo.
EEAA
1
@symcbean: hay dos tipos de dispositivos flash. Los dispositivos de tecnología de memoria (o MTD) presentan una interfaz directa a la memoria flash. Normalmente se encuentran en dispositivos integrados y son para lo que están diseñados los sistemas de archivos como JFFS2. El otro tipo de dispositivo flash oculta la memoria flash detrás de Flash Translation Later (FTL) para que parezca un dispositivo de bloque normal. Así es como se implementa la tecnología de consumo como SSD, memorias USB y tarjetas de memoria. Los sistemas de archivos como JFFS2 no son apropiados para estos; en su lugar, debe usar sistemas de archivos como ext4 diseñados para dispositivos de bloque.
sciurus
1
CUIDADO: Los ext4 lifetime_write_kbytes y session_write_kbytes no son representativos de las escrituras de celda de memoria SSD. He visto un informe del sistema de 15 TB para ext4 lifetime_write_kbytes, mientras que el SSD en sí mismo solo reportó 1 TB a través del atributo SMART 241. Sospecho que ext4 podría estar agregando el tamaño completo del espacio libre del sistema de archivos a esas estadísticas cada vez que fstrim se ejecuta, aunque el SSD obviamente, el controlador no borraría repetidamente todos esos bloques disponibles si no se hubieran tocado desde la última vez que se borró. La salida tune2fs -l parece ser igualmente engañosa.
ɈsәɹoɈ
2

Puedes intentarlo iostat. Le proporciona estadísticas relacionadas con el uso de IO y CPU. Echa un vistazo al manual man iostat.

Khaled
fuente
Supongo que podría funcionar, pero yo estaba esperando que había algo más alto nivel disponibles que podrían ofrecer los totales acumulados de bytes :)
badnews
2

Para mi KINGSTON SEDC400S37480G, en Ubuntu Server 14.04, utilizo el siguiente script para monitorear TBW. Lo ejecuto desde cron una vez al día. El script sale a un archivo de registro.

Necesitas calc para que funcione. Instale calc usando:

apt-get install apcalc

Contenido del guión:

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

Saldrá:

*** Thu, 20 Jul 2017 03:02:51 +0300 ***
TB written to sda1:
    3.062138442
inteq
fuente
En lugar de calc, uno podría usar GNU bc
Elton Carvalho