Messung der 'Gesamtzahl geschriebener Bytes' unter Linux

36

Wir sind sehr daran interessiert, die Möglichkeit der Verwendung von SSD-Laufwerken in einer Serverumgebung zu untersuchen. Eine Sache, die wir jedoch festlegen müssen, ist die erwartete Lebensdauer des Laufwerks. Laut diesem Artikel geben die Hersteller die Lebensdauer des Laufwerks in "Gesamtanzahl der geschriebenen Bytes" (TBW) an. Aus diesem Artikel geht beispielsweise hervor, dass eine Crucial C400-SSD einen TBW-Wert von 72 TB hat. Gibt es im Linux-Ökosystem Skripte / Tools, mit denen wir den TBW messen können? (und treffen Sie dann eine fundiertere Entscheidung über die Machbarkeit der Verwendung von SSD-Laufwerken.)

schlechte Nachrichten
quelle

Antworten:

28

Eine andere Möglichkeit ist, sich / proc / diskstats anzuschauen . Es ist nicht über Neustarts hinweg persistent, enthält jedoch Daten für jedes Blockgerät. Am interessantesten für Sie ist wahrscheinlich Feld 10, das die Gesamtzahl der geschriebenen Sektoren enthält. Auf einem System mit SCSI-Festplatten mit einer Sektorgröße von 512 Bytes könnten Sie ausführen

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

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

sda 728.759
sda1 79.0908
sda2 649.668

Sciurus
quelle
4
Die Sektorgröße kann durch Ausführen des Befehls #cat / sys / block / sda / queue / hw_sector_size
Antonio,
@ Antonio danke! Ich bin nicht sicher, wann das hinzugefügt wurde. Es sieht aus wie in 3.2, aber nicht 2.6.18.
Sciurus
@sciurus könntest du bitte die Mathematik hinter deinen Berechnungen erklären? Sie reden ü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 dividiere das durch 2, um die Anzahl der geschriebenen Kilobytes zu erhalten. Ich dividiere das dann durch 1024, um es in Megabyte umzuwandeln.
Sciurus
@antonio Das tut zeigt die Sektorgröße mit der zugrunde liegenden Hardware verwendet wird, aber AFAICT vom Kernel - Quelle, iostat Quelle und empirischen Tests, die „Sektoren“ -Nummer in / proc / diskstats immer bezieht sich auf 512 Bytes, auch wenn hw_sector_sizeanders ist ( spätestens seit der 2.4er Reihe). Siehe block/cfq-iosched.cbesonders cfqg_stats_update_dispatch().
der paul
23

Ich hatte mit dem gleichen Problem auf meinem Notebook zu kämpfen, aber da 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. Nach den offiziellen Unterlagen ,

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

Der folgende Befehl gibt mir also die gesamte TB, die auf meiner SSD-Festplatte (sdb) geschrieben ist.

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 so ziemlich jeder modernen Festplatte funktionieren sollte.

Gabriel Miretti aka gmiretti
quelle
3
Nein, das gibt es nur bei bestimmten Modellen von SSD-Laufwerken. Es ist nicht universell.
Michael Hampton
3
Ich wollte darauf hinweisen, dass Ihre Gleichung tatsächlich eine Zahl ergibt, die nicht stimmt sudo smartctl -A /dev/sda1 | awk '/^241/ { print "TBW: "($10 * 512) * 1.0e-12, "TB" }'.
Jordon Bedwell
Meine Intel SSD hat das gleiche Attribut, heißt aber Host_Writes_32MiB. Es gibt auch Attribut 249 NAND_Writes_1GiB. Beachten Sie also, dass dies auf jeder SSD anders zu sein scheint (z. B. eine mSATA-Intel-SSD von mir weist diese Attribute nicht auf)
reox
Auf meiner Intel SSD Pro 5400s (SATA) Total_LBAs_Writtenist das in GB angegeben! Konnte keinen Sinn machen, was der niedrige 4714Smart zeigte. Ein Blick in die Intel SSD Toolbox unter Windows zeigte jedoch, dass es sich um eine GB-Version handelte.
MrCalvin
15

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

Sciurus
quelle
Das ist eine coole Funktion, von der ich nichts wusste! Schade, dass auf den meisten unserer Systeme ext3 und einige
unformatierte
ext3 (und in etwas geringerem Maße) ext4 sind nicht zum Schreiben in Flash geeignet. Der Fehler tritt in Abhängigkeit von der Anzahl der Schreibvorgänge auf. Bei herkömmlichen Dateisystemen entwickeln sich Hotspots sehr schnell. Die von den Herstellern angegebenen Zahlen sind sehr irreführend, da von einer gleichmäßigen Verbreitung der Schriften ausgegangen wird. Es gibt Dateisysteme wie JFFS2, die speziell dafür entwickelt wurden, die Lebensdauer Ihrer SSDs zu verlängern.
Symcbean
2
@symcbean - bei heutigen Flash-Geräten ist dies weitgehend unproblematisch. Sie verfügen alle über integrierte Abnutzungsausgleichsroutinen.
EEAA
1
@symcbean - Es gibt zwei Arten von Flash-Geräten. Memory Technology Devices (oder MTDs) bieten eine direkte Schnittstelle zum Flash-Speicher. Diese befinden sich normalerweise in eingebetteten Geräten und sind für Dateisysteme wie JFFS2 ausgelegt. Die andere Art von Flash-Gerät verbirgt den Flash-Speicher hinter einer Flash Translation Later (FTL), sodass er wie ein reguläres Block-Gerät aussieht. So werden Consumer-Technologien wie SSDs, USB-Sticks und Speicherkarten implementiert. Dateisysteme wie JFFS2 sind dafür nicht geeignet. Stattdessen müssen Sie Dateisysteme wie ext4 verwenden, die für Blockgeräte konzipiert sind.
Sciurus
1
ACHTUNG: Die Werte ext4 lifetime_write_kbytes und session_write_kbytes sind nicht repräsentativ für das Schreiben von SSD-Speicherzellen. Ich habe gesehen, dass ein System 15 TB für ext4 lifetime_write_kbytes meldet, während die SSD selbst nur 1 TB über das SMART-Attribut 241 meldet. Ich vermute, dass ext4 diesen Statistiken jedes Mal, wenn fstrim ausgeführt wird, die gesamte Größe des freien Speicherplatzes des Dateisystems hinzufügt Der Controller würde offensichtlich nicht alle verfügbaren Blöcke wiederholt löschen, wenn sie seit dem letzten Löschen nicht berührt worden wären. Die Ausgabe von tune2fs -l scheint ähnlich irreführend zu sein.
Sonntag,
2

Sie können es versuchen iostat. Sie erhalten Statistiken zur E / A- und CPU-Auslastung. Schauen Sie sich das Handbuch an man iostat.

Khaled
quelle
Ich nehme an, das könnte funktionieren, aber ich hatte gehofft, dass etwas Höheres verfügbar ist, das kumulative
Bytesummen
2

Für meinen KINGSTON SEDC400S37480G verwende ich unter Ubuntu Server 14.04 das folgende Skript, um TBW zu überwachen. Ich führe es jeden Tag einmal von Cron aus. Das Skript gibt eine Protokolldatei aus.

Sie brauchen calc, damit es funktioniert. Installieren Sie calc mit:

apt-get install apcalc

Skriptinhalt:

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 ausgeben:

*** Thu, 20 Jul 2017 03:02:51 +0300 ***
TB written to sda1:
    3.062138442
inteq
quelle
Anstelle von calc könnte man GNU bc verwenden
Elton Carvalho