Frage Unter Linux die Gesamtzahl geschriebener Bytes messen


Wir sind sehr an der Möglichkeit interessiert, SSD-Laufwerke in einer Serverumgebung zu verwenden. Eine Sache, die wir jedoch etablieren müssen, ist die erwartete Langlebigkeit der Laufwerke. Gemäß Dieser Beitrag Hersteller berichten über die Laufwerksausdauer in Form von "Total Bytes Written" (TBW). Z.B. Aus diesem Artikel wird eine Crucial C400 SSD mit 72 TB TBW bewertet. Gibt es unter dem Linux-Ökosystem Skripte / Tools, die uns helfen, TBW zu messen? (und dann eine fundiertere Entscheidung über die Machbarkeit der Verwendung von SSD-Laufwerken treffen)


31
2018-02-21 04:20


Ursprung




Antworten:


Eine andere Möglichkeit ist anzuschauen / proc / diskstats. Es ist nicht über Neustarts hinweg persistent, aber es enthält Daten für jedes Blockgerät. Wahrscheinlich am interessantesten für Sie ist Feld 10, das die Gesamtzahl der geschriebenen Sektoren enthält. Auf einem System mit SCSI-Festplatten mit einer Sektorgröße von 512 Byte könnten Sie ausgeführt werden

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

um zu sehen, wie viele Megabytes auf jedes Gerät geschrieben wurden. Die Ausgabe wird wie folgt aussehen

sda 728.759
  sda1 79.0908
  sda2 649.668


23
2018-02-23 05:07



Die Sektorgröße kann durch Ausführen des Befehls #cat / sys / block / sda / queue / hw_sector_size gefunden werden - Antonio
@Antonio danke! Ich bin mir nicht sicher, wann das hinzugefügt wurde. Es sieht so aus als wäre es in 3.2 aber nicht 2.6.18. - sciurus
@Sciurus könnten Sie bitte die Mathematik hinter Ihren Berechnungen erklären? Sie sprechen über die Größe des Sektors = 512, aber Ihre Berechnungen teilen den gelesenen Wert mit 2/1024 - gyre
@gyre Feld 10 enthält die Anzahl der geschriebenen 0,5 Kilobyte-Sektoren. Ich teile das durch 2, um die Anzahl der geschriebenen Kilobyte zu erhalten. Ich teile das dann durch 1024 in Megabyte umwandeln. - sciurus
@antonio Das tut Zeigen Sie die Sektorgröße an, die mit der zugrunde liegenden Hardware verwendet wird, aber ein Fehler aus der Kernel-Quelle, der iostat-Quelle und empirischen Tests, die "Sektoren" -Nummer in / proc / diskstats immerbezieht sich auf 512 Bytes, auch wenn hw_sector_size ist anders (zumindest seit der 2.4-Serie). Sehen block/cfq-iosched.c, insbesondere cfqg_stats_update_dispatch(). - the paul


Ich hatte mit dem gleichen Problem auf meinem Notebook zu kämpfen, aber als ich es fast täglich neu starte, war die akzeptierte Antwort nicht hilfreich. Ich habe eine Samsung mSATA SSD, die zufällig das SMART-Attribut # 241 Total_LBAs_Written hat. Laut offizielle Dokumentation,

Um die Gesamtgröße (in Byte) zu berechnen, multiplizieren Sie den Rohwert dieses Attributs mit 512B.

Also der folgende Befehl gibt mir den Gesamt-TB geschrieben auf meiner SSD-Festplatte (SDB)

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

Da es auch auf meiner Festplatte funktioniert, gehe ich davon aus, dass es auf fast jeder modernen Festplatte funktionieren sollte.


17
2018-02-03 03:50



Nein, das gibt es nur bei bestimmten Modellen von SSD-Laufwerken. Es ist nicht universal. - Michael Hampton♦
Ich möchte darauf hinweisen, dass Ihre Gleichung tatsächlich eine Zahl erzeugt, die nicht korrekt ist. sudo smartctl -A /dev/sda1 | awk '/^241/ { print "TBW: "($10 * 512) * 1.0e-12, "TB" }'. - Jordon Bedwell
Meine Intel SSD hat das gleiche Attribut, aber es heißt Host_Writes_32MiB. Außerdem gibt es Attribut 249 NAND_Writes_1GiB. Seien Sie sich bewusst, dass dies auf jeder SSD anders aussieht (z. B. eine mSATA Intel SSD von mir hat diese Attribute nicht) - reox


Sie können sehen, wie viele Daten in ein ext4-Dateisystem geschrieben wurden, indem Sie in / sys / fs / ext4 / $ DEVICE / lifetime_write_kbytes nachsehen.


10
2018-02-21 05:35



Das ist ein cooles Feature, von dem ich nichts wusste! Schade, dass die meisten unserer Systeme ext3 und auch einige rohe LVM-Partitionen für VMs laufen :) - badnews
ext3 (und in etwas geringerem Maße) ext4 sind nicht zum Schreiben in Flash gedacht. Der Fehler tritt auf, abhängig davon, wie oft ein Standort geschrieben wurde - und bei herkömmlichen Dateisystemen entwickeln sich Hotspots sehr schnell. Die von den Herstellern angeführten Zahlen sind sehr irreführend, da sie eine gleichmäßige Verteilung der Schreibvorgänge voraussetzen. Es gibt Dateisysteme wie JFFS2, die speziell dafür entwickelt wurden, die Lebensdauer Ihrer SSDs zu verlängern. - symcbean
@symcbean - mit heutigen Flash-Geräten ist dies weitgehend kein Thema. Sie alle haben Wear-Leveling-Routinen in ihren On-Board-Controllern eingebaut. - EEAA
@symcbean - Es gibt zwei Arten von Flash-Geräten. Memory Technology Devices (oder MTDs) bieten eine direkte Schnittstelle zum Flash-Speicher. Diese sind typischerweise in eingebetteten Geräten zu finden und für welche Dateisysteme wie JFFS2 entwickelt wurde. Die andere Art von Flash-Gerät verbirgt den Flash-Speicher hinter einem Flash Translation Later (FTL), so dass es wie ein normales Block-Gerät aussieht. So werden Consumer-Technologien wie SSDs, USB-Sticks und Speicherkarten implementiert. Dateisysteme wie JFFS2 sind für diese nicht geeignet; Stattdessen müssen Sie Dateisysteme wie ext4 verwenden, die für Block-Geräte entwickelt wurden. - sciurus
ACHTUNG: Die ext4 lifetime_write_kbytes und session_write_kbytes sind nicht repräsentativ für SSD-Speicherzellenschreibvorgänge. Ich habe gesehen, dass ein System 15 TB für ext4 life_write_kbytes meldet, während die SSD selbst nur 1 TB über SMART-Attribut 241 berichtet. Ich vermute, dass ext4 die gesamte Größe des freien Speicherplatzes des Dateisystems zu diesen Statistiken jedes Mal hinzufügt, wenn fstrim läuft, obwohl die SSD Der Controller löschte offensichtlich nicht alle verfügbaren Blöcke, wenn sie seit dem letzten Löschen nicht berührt worden waren. Die Ausgabe von tune2fs -l scheint ähnlich irreführend zu sein. - ʇsәɹoɈ


Du kannst es versuchen iostat. Sie erhalten Statistiken zur IO- und CPU-Nutzung. Schauen Sie sich das Handbuch an man iostat.


1
2018-02-21 05:18



Ich nehme an, dass das funktionieren könnte, aber ich hatte gehofft, dass es etwas höheres Level gibt, das kumulative Byte-Summen bereitstellen könnte :) - badnews


Für mein KINGSTON SEDC400S37480G benutze ich unter Ubuntu Server 14.04 das folgende Skript um TBW zu überwachen. Ich betreibe es einmal täglich von Cron. Das Skript gibt eine Protokolldatei aus.

Sie müssen kalkulieren, damit es funktioniert. Installieren Sie calc mit:

apt-get install apcalc

Skript-Inhalt:

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

Wird ausgegeben:

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

1
2017-07-20 00:14