Mesure du nombre total d'octets écrits sous Linux


36

Nous sommes très intéressés par l'exploration de la possibilité d'utiliser des disques SSD dans un environnement de serveur. Cependant, une chose que nous devons établir est la longévité attendue. Selon cet article, les fabricants signalent leur endurance en termes de «total d'octets écrits» (TBW). Par exemple, dans cet article, un SSD Crucial C400 est évalué à 72 To TBW. Existe-t-il des scripts / outils dans l'écosystème Linux pour nous aider à mesurer TBW? (et prenez ensuite une décision plus éclairée sur la faisabilité de l’utilisation des disques SSD)

Réponses:


28

Une autre possibilité est de regarder / proc / diskstats . Il ne persiste pas lors des redémarrages, mais il contient des données pour chaque périphérique en mode bloc. Le champ 10, qui contient le nombre total de secteurs écrits, est probablement le plus intéressant pour vous. Sur un système avec des disques scsi d’une taille de secteur de 512 octets, vous pouvez exécuter

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

pour voir combien de mégaoctets ont été écrits sur chaque périphérique. La sortie ressemblera à

sda 728.759
sda1 79.0908
sda2 649.668


4
Vous pouvez trouver la taille du secteur en exécutant la commande #cat / sys / block / sda / queue / hw_sector_size
Antonio

@ Antonio merci! Je ne sais pas quand cela a été ajouté. Il semble que ce soit dans 3.2 mais pas 2.6.18.
Sciurus

@sciurus pourriez-vous expliquer le calcul derrière vos calculs s'il vous plaît? Vous parlez de la taille du secteur = 512 mais vos calculs divisent la valeur lue avec 2/1024
gyre

@gyre Le champ 10 contient le nombre de secteurs de 0,5 kilo-octets écrits. Je divise cela par 2 pour obtenir le nombre de kilo-octets écrits. Je divise ensuite cela par 1024 pour convertir en mégaoctets.
Sciurus

@antonio Cela ne fait montrer la taille du secteur utilisé avec le matériel sous - jacent, mais AFAICT de la source du noyau, iostat, et des tests empiriques, les « secteurs » nombre dans / proc / diskstats toujours fait référence à 512 octets, même quand hw_sector_sizeest différent ( au moins depuis la série 2.4). Voir block/cfq-iosched.c, en particulier cfqg_stats_update_dispatch().
Le paul

23

Je me débattais avec le même problème sur mon cahier, mais comme je le redémarre quasiment tous les jours, la réponse acceptée ne m'a pas aidé. J'ai un SSD Samsung mSATA, qui possède l'attribut SMART # 241 Total_LBAs_Written. Selon la documentation officielle ,

Pour calculer la taille totale (en octets), multipliez la valeur brute de cet attribut par 512 Ko.

Donc, la commande suivante me donne le total de To écrit sur mon disque SSD (sdb)

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

Comme cela fonctionne également sur mon disque dur, je suppose que cela devrait fonctionner sur pratiquement tous les disques durs modernes.


3
Non, cela n'existe que sur certains modèles de disques SSD. Ce n'est pas universel.
Michael Hampton

3
Je voulais souligner que votre équation produit en fait un nombre qui est hors il serait plus précis que: sudo smartctl -A /dev/sda1 | awk '/^241/ { print "TBW: "($10 * 512) * 1.0e-12, "TB" }'.
Jordon Bedwell

Mon SSD Intel a le même attribut mais il s'appelle Host_Writes_32MiB. Il y a aussi l'attribut 249 NAND_Writes_1GiB. Sachez donc que sur chaque SSD, cela semble être différent (par exemple, un de mes SSD mSATA Intel n'a pas ces attributs)
reox

Sur mon Intel SSD Pro 5400 (SATA), le Total_LBAs_Writtenest spécifié en Go! Impossible de comprendre le sens de la faible 4714intelligence. Mais en regardant dans la boîte à outils Intel SSD de Windows, on s’aperçut que c’était en Go.
MrCalvin

15

Vous pouvez voir combien de données ont été écrites sur un système de fichiers ext4 en consultant / sys / fs / ext4 / $ DEVICE / lif_write_kbytes.


C'est une fonctionnalité intéressante que je ne connaissais pas! Dommage que la plupart de nos systèmes utilisent ext3 ainsi que des partitions LVM brutes pour les ordinateurs virtuels :)
badnews

ext3 (et dans une moindre mesure) ext4 ne sont pas conçus pour l'écriture au flash. L'échec se produira en fonction du nombre d'écritures d'emplacement. Avec les systèmes de fichiers classiques, les zones sensibles se développent très rapidement. Les chiffres cités par les fabricants sont très trompeurs car ils supposent une répartition uniforme des écritures. Il existe des systèmes de fichiers, tels que JFFS2, spécialement conçus pour prolonger la durée de vie de vos disques SSD.
symcbean

2
@symcbean - avec les périphériques flash actuels, ce n'est en grande partie pas un problème. Ils ont tous des routines de nivellement d'usure intégrées à leurs contrôleurs embarqués.
EEAA

1
@symcbean - Il existe deux types de périphériques flash. Les dispositifs à technologie de mémoire (ou MTD) présentent une interface directe avec la mémoire flash. Celles-ci se trouvent généralement dans les périphériques intégrés et correspondent aux systèmes de fichiers tels que JFFS2. L'autre type de périphérique flash cache la mémoire flash derrière une FTL (Flash Translation Later), de sorte qu'elle ressemble à un périphérique de bloc standard. C’est ainsi que sont mises en œuvre des technologies grand public telles que les disques SSD, les clés USB et les cartes mémoire. Les systèmes de fichiers tels que JFFS2 ne conviennent pas à ceux-ci; au lieu de cela, vous devez utiliser des systèmes de fichiers tels que ext4 conçus pour les périphériques en mode bloc.
Sciurus

1
ATTENTION: les ext4 life_write_kbytes et session_write_kbytes ne sont pas représentatifs des écritures de cellules mémoire SSD. J'ai vu un rapport système 15To pour ext4 life_write_kbytes, alors que le SSD lui-même n'a signalé que 1To via l'attribut SMART 241. J'imagine qu'ext4 pourrait ajouter la taille totale de l'espace libre du système de fichiers à ces statistiques chaque fois que fstrim est exécuté, même si le SSD Le contrôleur n’effacerait évidemment pas à plusieurs reprises tous ces blocs disponibles s’ils n’avaient pas été touchés depuis le dernier effacement. La sortie de tune2fs -l semble être également trompeuse.
jeudi

2

Tu peux essayer iostat. Il vous donne des statistiques relatives à l'utilisation des E / S et de la CPU. Regardez le manuel man iostat.


Je suppose que cela pourrait fonctionner, mais j'espérais qu'il y avait quelque chose de plus haut disponible qui pourrait fournir des totaux cumulés en octets :)
badnews

2

Pour mon KINGSTON SEDC400S37480G, sous Ubuntu Server 14.04, j’utilise le script suivant pour surveiller TBW. Je le lance à partir de Cron une fois par jour. Le script est généré dans un fichier journal.

Vous avez besoin de calc pour que cela fonctionne. Installez calc en utilisant:

apt-get install apcalc

Contenu du script:

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

Est-ce que la sortie:

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

Au lieu de calc, on pourrait utiliser GNU bc
Elton Carvalho
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.