Voreinstellungen
Bestätigung eingestellt für:
Es gibt unter Linux mehrere Methoden, um die S.M.A.R.T.-Werte auszulesen. Während es z.B. unter Ubuntu, bei SATA-SSDs, recht einfach über das Laufwerke-Programm oder Terminal via smartctl machbar ist, gestaltet es sich bei NVMe SSDs wieder etwas schwieriger. Leider unterstützt u.a. Ubuntu 22.04 LTS die Möglichkeit zum Auslesen von NVMe SSDs mit Boardmitteln noch nicht - bzw. udisks2 zumindest nicht.
Inhaltsverzeichnis:
- Auslesen mit Boardmitteln
- Auslesen mit smartctl (SATA SSDs)
- Erläuterungen zum »Wear_Leveling_Count«-Wert
- Und jetzt?
- Auslesen von NVMe SSDs
- In regelmäßigen Abständen prüfen lassen
Auslesen mit Boardmitteln
Ubuntu bringt schon ein nettes Laufwerksverwaltungstool mit, das sich »udisks« nennt. Dies lässt sich einfach im Menü unter »Hilfsprogramme« finden und nennt sich dort »Laufwerke«.
Auf der rechten Seite kannst Du die auflistung der Laufwerke sehen. Bei mir wäre die 1TB SSD vom Typ NVMe und die anderen drei SATA. Ich wende mich hier erst mal den SATA-SSDs zu. Wenn Du jetzt Deine SSD anklickst, sieht Du auf der rechten Seite ein paar Daten zu ihr und wie die SSD partitioniert ist.
Ich habe hier u.a. eine SWAP- bzw. Auslagerungspartition angelegt, was bei dekadenten 32GB RAM eigentlich gar nicht mehr nötig ist - zumindest nicht in meinem Fall. Sicher ist jedoch sicher. Die andere Parition ist für Spiele gedacht. Bei »Einschätzung« gibt es schon so eine grobe Einschätzung, wie Deine SSD beschaffen ist. Wenn Du jetzt rechts oben auf »die drei Punkte« und dann »SMART-Werte & Selbsttest« klickst, gelangst Du zu einer detailierteren Ansicht.
Uns interessiert hier besonders das Attribut »wearing-level-count« in der Spalte »Normalisiert«. Eine Erläterung dazu findest Du weiter unten.
Auslesen mit smartctl (SATA SSDs)
Etwas umständlicher und nerdiger geht das auslesen mittels smartctl. Hierfür musst Du ein Terminalfenster öffnen und folgendes eingeben:
Ubuntu/Debian basierte Systeme
sudo apt install smartmontools -y
Arch basierte Systeme
pacman -S smartmontools
Sollten die SMART-Tools installiert sein, kannst Du Dir das Kommando smartctl zunutze machen. Um eine Liste der vorhandenen Geräte zu bekommen, die mit smartctl auszulesen sind, gibst Du einfach mal smartctl --scan ein. Dann solltest Du - je nach Anzahl der Laufwerke - solch eine Auflistung bekommen.
johannes@johannes:~$ smartctl --scan /dev/sda -d scsi # /dev/sda, SCSI device /dev/sdb -d scsi # /dev/sdb, SCSI device /dev/sdc -d scsi # /dev/sdc, SCSI device /dev/nvme0 -d nvme # /dev/nvme0, NVMe device
Nicht verwirren lassen: SCSI ist hier gleichbedeutend mit SATA. Wir nehmen hier als Beispielobjekt /dev/sda, da dies in den meisten Fällen, in denen es keine NVMe SSD als Systemlaufwerk gibt, das Systemlaufwerk ist.
Um hier nun die SMART-Werte auszulesen, gibst Du einfach sudo smartctl -a /dev/sda ein. Nun erhälst Du beispielsweise folgenden Rattenschwanz:
johannes@johannes:~$ sudo smartctl -a /dev/sda [sudo] Passwort für johannes: smartctl 7.2 2020-12-30 r5155 [x86_64-linux-5.15.0-67-generic] (local build) Copyright (C) 2002-20, Bruce Allen, Christian Franke, www.smartmontools.org === START OF INFORMATION SECTION === Model Family: Samsung based SSDs Device Model: Samsung SSD 850 EVO 250GB Serial Number: (ZENSIERT) LU WWN Device Id: (ZENSIERT) Firmware Version: EMT02B6Q User Capacity: 250.059.350.016 bytes [250 GB] Sector Size: 512 bytes logical/physical Rotation Rate: Solid State Device TRIM Command: Available Device is: In smartctl database [for details use: -P show] ATA Version is: ACS-2, ATA8-ACS T13/1699-D revision 4c SATA Version is: SATA 3.1, 6.0 Gb/s (current: 6.0 Gb/s) Local Time is: Fri Mar 10 12:54:34 2023 CET SMART support is: Available - device has SMART capability. SMART support is: Enabled === START OF READ SMART DATA SECTION === SMART overall-health self-assessment test result: PASSED General SMART Values: Offline data collection status: (0x00) Offline data collection activity was never started. Auto Offline Data Collection: Disabled. Self-test execution status: ( 0) The previous self-test routine completed without error or no self-test has ever been run. Total time to complete Offline data collection: ( 0) seconds. Offline data collection capabilities: (0x53) SMART execute Offline immediate. Auto Offline data collection on/off support. Suspend Offline collection upon new command. No Offline surface scan supported. Self-test supported. No Conveyance Self-test supported. Selective Self-test supported. SMART capabilities: (0x0003) Saves SMART data before entering power-saving mode. Supports SMART auto save timer. Error logging capability: (0x01) Error logging supported. General Purpose Logging supported. Short self-test routine recommended polling time: ( 2) minutes. Extended self-test routine recommended polling time: ( 133) minutes. SCT capabilities: (0x003d) SCT Status supported. SCT Error Recovery Control supported. SCT Feature Control supported. SCT Data Table supported. SMART Attributes Data Structure revision number: 1 Vendor Specific SMART Attributes with Thresholds: ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE 5 Reallocated_Sector_Ct 0x0033 100 100 010 Pre-fail Always - 0 9 Power_On_Hours 0x0032 096 096 000 Old_age Always - 18595 12 Power_Cycle_Count 0x0032 096 096 000 Old_age Always - 3613 177 Wear_Leveling_Count 0x0013 096 096 000 Pre-fail Always - 77 179 Used_Rsvd_Blk_Cnt_Tot 0x0013 100 100 010 Pre-fail Always - 0 181 Program_Fail_Cnt_Total 0x0032 100 100 010 Old_age Always - 0 182 Erase_Fail_Count_Total 0x0032 100 100 010 Old_age Always - 0 183 Runtime_Bad_Block 0x0013 100 100 010 Pre-fail Always - 0 187 Uncorrectable_Error_Cnt 0x0032 100 100 000 Old_age Always - 0 190 Airflow_Temperature_Cel 0x0032 079 048 000 Old_age Always - 21 195 ECC_Error_Rate 0x001a 200 200 000 Old_age Always - 0 199 CRC_Error_Count 0x003e 100 100 000 Old_age Always - 0 235 POR_Recovery_Count 0x0012 099 099 000 Old_age Always - 94 241 Total_LBAs_Written 0x0032 099 099 000 Old_age Always - 13712703096 SMART Error Log Version: 1 No Errors Logged SMART Self-test log structure revision number 0 Warning: ATA Specification requires self-test log structure revision number = 1 Warning! SMART Selective Self-Test Log Structure error: invalid SMART checksum. SMART Selective self-test log data structure revision number 0 Note: revision number not 1 implies that no selective self-test has ever been run SPAN MIN_LBA MAX_LBA CURRENT_TEST_STATUS 1 0 0 Not_testing 2 0 0 Not_testing 3 0 0 Not_testing 4 0 0 Not_testing 5 0 0 Not_testing 255 0 65535 Read_scanning was never started Selective self-test flags (0x0): After scanning selected spans, do NOT read-scan remainder of disk. If Selective self-test is pending on power-up, resume after 1 minute delay.
Auf den ersten Blick sieht man jede Menge interessante Daten, die der Laie aber nicht unbedingt alle auf Anhieb versteht. Was uns jedoch in erster Linie interessiert, ist bei der Auflistung der SMART-Werte, die Zeile mit »Wear_Leveling_Count« und die Spalte »Value«.
Erläuterungen zum »Wear_Leveling_Count«-Wert
Dieser legt fest, wie gut die SSD noch konstituiert ist. In meinem Fall ist diese SSD noch zu 96% gut. Je weiter der Wert sinkt, desto mehr sind die maximalen Schreibzyklen der SSD erreicht. Ist die SSD hier bei 0%, schaltet sie in den »Nur-Lesen-Modus«. Daten können weiterhin ausgelesen, jedoch nicht mehr geschrieben werden.
Allerdings brauchst Du Dir hier keine großen Sorgen machen. Bis dieser Wert erreicht ist, kann es durchaus 25 oder noch mehr Jahre dauern (je nach Nutzungsgrad).
Hier ein Auszug aus der Wiki von ubuntuusers.de:
"Ein Nutzer des EEE-User-Forums stellte die Rechnung auf, dass es bei einer realitätsnahen Nutzung der SSD von sechs Stunden täglich und zehn prozentiger Schreibrate (gerundete 36 Minuten reines Schreiben pro Tag) runde 25 Jahre dauert, bis die SSD am Ende wäre.
Ein Nutzer aus dem englischsprachigen Ubuntu-Forums gab an, dass er seit einem Jahr eine Intel SSD nutzt. Währenddessen hat er dutzende Betriebssysteme mit dem Dateisystem ext4 installiert. Er kompilierte Code und betreibt Virtuelle Maschinen. Über "System > Systemverwaltung > Laufwerksverwaltung" konnte er die "Verbleibende Haltbarkeit" auslesen, die angibt, wie nah die SSD an dem "Nicht-mehr-beschreibbar-Punkt" ist. Nach diesem Jahr des exzessiven Gebrauchs sank die angegebene Haltbarkeit um gerade 1% (Quelle: ubuntuforums.org: Ubuntu 10.10 & SSD's).
Dies alles deckt sich mit den Forschungen des Herstellers Intel. Intel selbst gibt für seine SSDs eine "Mindest"haltbarkeit von fünf Jahren an - allerdings ist der eingesetzte Parameter mit 20 Gigabyte an zu schreibenden Daten pro Tag äußerst hoch und wird in der Regel von keinem "normalen" Anwender erreicht (siehe auch Exkurs – Journaling auf SSD)."
Demnach hast Du als Gamer oder Office-Nutzer nichts zu befürchten. Ich habe z.B. eine weitere SSD eingebaut, die bereits ein wearing-level-count von 89% hat. Diese hatte ich 2015 gekauft und wurde als System-SSD für Windoof und Linux sowie Spiele genutzt. Ich habe u.a. auch eine SSD hier im Haushalt, die ich 2011 gekauft habe (eine SAMSUNG SSD 470 128GB), die ein wearing-level-count von 95% aufweist. Die ist auch schon durch mehrere Windoof-Versionen und Computer gegangen. Dennoch sollte man den Wert ab und zu im Auge behalten. Besonders wenn man dauernd Daten hin- und herschaufelt oder Videobearbeitung betreibt.
Aber es gibt auch noch weitere interessante Attribute. Am besten Du schaust Dich ein wenig um. Hier findest Du u.a. eine Liste, wie man die Daten auswertet.
Und jetzt?
Jetzt kannst Du mit dem neu erworbenen Wissen machen was Du willst. :) Du musst jetzt nicht unbedingt regelmäßig Dir die SMART-Werte anschauen. Wenn Du jedoch die Gesundheit Deiner SSD(s) im Auge behalten möchtest, kannst Du das gerne weiterhin tun.
Ein Tool wie z.B. CrystalDiskInfo, dass Dir nun sagt, wenn sich die SSD dem Ende zuneigt. An dieser Stelle muss man sich selber ein Script klöppeln. Auf Server geht das relativ einfach. Hier kann man sich dann mittels smartd eine Mail schicken lassen, doch auf Desktops muss man bissl tricksen.
Ich habe hier mal ein recht laienhaftes Script geklöppelt, das jedoch einwandfrei funktionieren solle. Bitte beachte die Kommentare im Script und passe die entsprechenden Stellen Deinen Bedürfnissen bzw. Gegebenheiten an.
Das war jetzt die Methode, um die S.M.A.R.T.-Werte von SATA SSDs auszulesen. Bei NVMe SSDs gestaltet sich das wieder anders, da nicht jeder Hersteller - oder vielleicht auch keiner - die S.M.A.R.T.-Werte so wie bei SATA SSDs anzeigt. Zwar unterstützt smartmontools auch NVMe, dennoch ist die Ausgabe bzw. das Management nicht so umfangreich. Wie man das Script nun in einen Cronjob packt, werde ich noch zum Schluss erläutern.
Auslesen von NVMe SSDs
Der erste Schritt ist es, mittels sudo apt install nvme-cli -y (Ubuntu/Debian) oder pacman -S nvme-cli (Arch) das entsprechende Tool im Terminal zu installieren. Ist die Installation abgeschlossen, kann man sich anschließend schon mal eine Auflistung seiner NVMe SSDs geben lassen. Dies kann man mit sudo nvme list bewerkstelligen.
johannes@johannes:~$ sudo nvme list Node SN Model Namespace Usage Format FW Rev --------------------- -------------------- ---------------------------------------- --------- -------------------------- ---------------- -------- /dev/nvme0n1 XXXXXXXXXXXXXXX Samsung SSD 980 PRO 1TB 1 251,82 GB / 1,00 TB 512 B + 0 B 5B2QGXA7
So, nun wissen wir, dass /dev/nvme0n1 unsere erste NVMe SSD ist. Nun können wir den S.M.A.R.T.-Log mittels des Kommandos sudo nvme smart-log /dev/nvme0n1 auslesen und erhalten dann folgende Ausgabe:
johannes@johannes:~$ sudo nvme smart-log /dev/nvme0n1 Smart Log for NVME device:nvme0n1 namespace-id:ffffffff critical_warning : 0 temperature : 35 C (308 Kelvin) available_spare : 100% available_spare_threshold : 10% percentage_used : 0% endurance group critical warning summary: 0 data_units_read : 636.190 data_units_written : 1.744.897 host_read_commands : 26.170.931 host_write_commands : 27.597.173 controller_busy_time : 159 power_cycles : 23 power_on_hours : 15 unsafe_shutdowns : 2 media_errors : 0 num_err_log_entries : 0 Warning Temperature Time : 0 Critical Composite Temperature Time : 0 Temperature Sensor 1 : 35 C (308 Kelvin) Temperature Sensor 2 : 35 C (308 Kelvin) Thermal Management T1 Trans Count : 0 Thermal Management T2 Trans Count : 0 Thermal Management T1 Total Time : 0 Thermal Management T2 Total Time : 0
Welche Werte uns hier in erster Linie interessieren, sind »available_spare« und »available_spare_threshold«. Der erste Wert gibt an, in wie weit wir die SSD schon abgenutzt haben. Je weniger der Wert wird, desto mehr ist die SSD abgenutzt. Der zweite Wert gibt den Schwellwert an, bei dem man sich längstens um Ersatz kümmern sollte.
Das »nvme-cli« ist ein mächtiges Werkzeug, mit dem man sich allerhand interessante Sachen anzeigen lassen kann. Wer das Tool etwas studieren will, kann sich gerne auf dieser Englisch sprachigen Homepage umsehen.
Auch hier können wir uns wieder ein kleines Script basteln, das uns ab bestimmten Gesundheitswerten drauf hinweist, dass wir uns eine neue SSD kaufen sollten.
In regelmäßigen Abständen prüfen lassen
Nun haben wir die Möglichkeit, beide oder nur eines der beiden Scripten (falls man nur einen Typus SSD hat), in eine Crontab zu schreiben. Ich persönlich empfehle eine Testperiode von 1 Monat. Die einfachste Variante ist es, die Scripte einfach unter /etc/cron.monthly abzulegen. Somit führt Linux jeden Monat automatisch die Scripte aus.
Hierzu öffnest Du einfach ein Terminal und navigierst mittels cd /etc/cron.monthly in dieses Verzeichnis. Nun erstellst Du mit sudo nano ssd-health-check-(sata/nvme) (wobei Du die Datei auch gerne nennen kannst, wie Du willst) und fügst hier den Scriptcode ein. Beachte, dass das »(sata/nvme)« eine Wahlmöglichkeit ist. Letztendlich schreibst Du dann sata oder nvme nackt ohne Klammern hin. Um das Script zu speichern, drückst Du nun enfach erst STRG + O und dann STRG + X zum Schließen der Datei. Wenn Du nur einen SSD-Typ hast, machst Du nur eine Datei, ansonsten noch eien weitere genauso, für den entsprechenden Typen.
Zum Schluss verpasst Du dem Script noch ein Ausführrecht für den root mittels sudo chmod ugo+x [SCRIPTDATEI] ([SCRIPTDATEI] entsprechend des Dateinamens ersetzen).
Veröffentlicht: 16.03.2023 | Letztes Update: -