Wie kann ich die TBW auf meiner Samsung SSD überwachen?

13

Wie allgemein bekannt ist, haben SSDs eine begrenzte Anzahl von PE-Zyklen (Program-Erase), bevor die NAND-Zellen sterben.

Daher ist es sehr hilfreich zu wissen, wie viele Daten auf Ihre SSD geschrieben wurden, um zu bestimmen, wie lange diese noch dauert, bevor das NAND stirbt.

Ich habe eine Samsung 850 Pro 512 GB SSD und ich verwende Ubuntu 14.04.

Wie kann ich die TBW (Total-Bytes-Written) für mein Laufwerk erhalten?

You'reAGitForNotUsingGit
quelle

Antworten:

15

VOLLSTÄNDIGE OFFENLEGUNG: Die in dieser Antwort enthaltenen scipt / -Befehle sind nicht meine eigenen, sondern die Arbeit von JDG Leaver. Sie wurden von einem Blog-Post auf seiner Website bezogen .


NB:

  • Dies gibt nur genaue Zahlen für Samsung-SSDs an
  • Sie müssen smartctlinstalliert haben

Methode 1:

Hier ist ein praktisches kleines Skript, mit dem Sie die TBW Ihrer SSD zusammen mit einigen anderen Informationen überwachen können:

#!/bin/bash

#######################################
# Variables                           #
#######################################

SSD_DEVICE="/dev/sda"

ON_TIME_TAG="Power_On_Hours"
WEAR_COUNT_TAG="Wear_Leveling_Count"
LBAS_WRITTEN_TAG="Total_LBAs_Written"
LBA_SIZE=512 # Value in bytes

BYTES_PER_MB=1048576
BYTES_PER_GB=1073741824
BYTES_PER_TB=1099511627776

#######################################
# Get total data written...           #
#######################################

# Get SMART attributes
SMART_INFO=$(sudo /usr/sbin/smartctl -A "$SSD_DEVICE")

# Extract required attributes
ON_TIME=$(echo "$SMART_INFO" | grep "$ON_TIME_TAG" | awk '{print $10}')
WEAR_COUNT=$(echo "$SMART_INFO" | grep "$WEAR_COUNT_TAG" | awk '{print $4}' | sed 's/^0*//')
LBAS_WRITTEN=$(echo "$SMART_INFO" | grep "$LBAS_WRITTEN_TAG" | awk '{print $10}')

# Convert LBAs -> bytes
BYTES_WRITTEN=$(echo "$LBAS_WRITTEN * $LBA_SIZE" | bc)
MB_WRITTEN=$(echo "scale=3; $BYTES_WRITTEN / $BYTES_PER_MB" | bc)
GB_WRITTEN=$(echo "scale=3; $BYTES_WRITTEN / $BYTES_PER_GB" | bc)
TB_WRITTEN=$(echo "scale=3; $BYTES_WRITTEN / $BYTES_PER_TB" | bc)

# Output results...
echo "------------------------------"
echo " SSD Status:   $SSD_DEVICE"
echo "------------------------------"
echo " On time:      $(echo $ON_TIME | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta') hr"
echo "------------------------------"
echo " Data written:"
echo "           MB: $(echo $MB_WRITTEN | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')"
echo "           GB: $(echo $GB_WRITTEN | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')"
echo "           TB: $(echo $TB_WRITTEN | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')"
echo "------------------------------"
echo " Mean write rate:"
echo "        MB/hr: $(echo "scale=3; $MB_WRITTEN / $ON_TIME" | bc | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')"
echo "------------------------------"
echo " Drive health: ${WEAR_COUNT} %"
echo "------------------------------"

Hier ist ein Beispiel der Ausgabe:

------------------------------
 SSD Status:   /dev/sda
------------------------------
 On time:      2 hr
------------------------------
 Data written:
           MB: 25,098.917
           GB: 24.510
           TB: .023
------------------------------
 Mean write rate:
        MB/hr: 12,549.458
------------------------------
 Drive health: 100 %
------------------------------

Diese Daten sind korrekt, da ich gerade erst meinen neuen 850 Pro installiert habe.


Methode 2:

Alternativ ist hier ein Einzeiler, um nur die TBW zu erhalten:

echo "GB Written: $(echo "scale=3; $(sudo /usr/sbin/smartctl -A /dev/sda | grep "Total_LBAs_Written" | awk '{print $10}') * 512 / 1073741824" | bc | sed ':a;s/\B[0-9]\{3\}\>/,&/;ta')"
You'reAGitForNotUsingGit
quelle
Dies funktioniert bei meiner SAMSUNG MZ7LN512HMJP-000L7 SSD nicht. smartctl gibt Total_LBAs_Writtenan, 2268 zu sein, und dies erzeugt 1,1 MB geschrieben - eindeutig falsch für ein Laufwerk, das über ein Jahr alt ist und mein primäres Systemlaufwerk ist :(
Icydog
@ Icydog :( Welche Version von Ubuntu laufen Sie?
You'reAGitForNotUsingGit
Ich bin auf Fedora 27. Ich denke, meine SSD meldet die Zahlen wahrscheinlich nur nicht richtig.
Icydog
Meine Forschung zeigt, dass jede SSD einen eigenen Multiplikator für das zu haben scheint, was jede Einheit der "geschriebenen LBAs" tatsächlich bedeutet. Ich habe nicht die Nummern für das Samsung 850, aber es ist absolut nicht nur ein Sektor ...
ljwobker
3

Entscheidende verbleibende SSD-Lebensdauer

Bei Crucial SSD (hergestellt von Micron) wird die Frage nach der verbleibenden Lebensdauer etwas erleichtert.

https://www.micron.com/~/media/documents/products/technical-note/solid-state-storage/tnfd22_client_ssd_smart_attributes.pdf

In diesem Dokument wird 202 als verbleibende Lebensdauer in Prozent angegeben. Als Beispiel für Ubuntu 16.04 ( sudo smartctl /dev/sda1 -a) wird 202 als unbekannt gemeldet , aber der Wert von 90 (in meinem Fall) stimmt mit der Beschreibung im PDF überein und gibt an, dass 90% der Lebensdauer noch vorhanden ist. Dies kann durch die TBW angemessen skaliert werden, die in der entscheidenden.com-Literatur auf dem Laufwerk angegeben ist, über das Sie verfügen. Tatsächlich ist die verbleibende Lebensdauer nützlicher.

Steve C
quelle
1

Die akzeptierte Antwort hat die Ausgabe aufgebläht, zu viele nutzlose Skript-Assistenten und verbirgt anfängliche Parameternamen smartctl. Hier ist eine bessere Version;

#!/bin/bash

device=${1:-/dev/sda}
sudo smartctl -A $device |awk '
$0 ~ /Power_On_Hours/ { poh=$10; printf "%s / %d hours / %d days / %.2f years\n",  $2, $10, $10 / 24, $10 / 24 / 365.25 }
$0 ~ /Total_LBAs_Written/ {
    lbas=$10;
    bytes=$10 * 512;
    mb= bytes / 1024^2;
    gb= bytes / 1024^3;
    tb= bytes / 1024^4;
    printf "%s / %s  / %d mb / %.1f gb / %.3f tb\n", $2, $10, mb, gb, tb
    printf "mean writes per hour:  / %.2f",  mb/poh
}
$0 ~ /Airflow_Temperature_Cel/ { print $2 " / " $10}
$0 ~ /Wear_Leveling_Count/ { printf "%s / %d (%% health)\n", $2, int($4) }
' |
    sed -e 's:/:@:' |
    sed -e "s\$^\$$device @ \$" |
    column -ts@

Beispielausgabe:

$ for i in /dev/sd{a,b,c,d}; do ssd-tbw $i;done   |sort -k2,2
/dev/sda    Airflow_Temperature_Cel    49
/dev/sdb    Airflow_Temperature_Cel    49
/dev/sdc    Airflow_Temperature_Cel    45
/dev/sdd    Airflow_Temperature_Cel    47
/dev/sda    mean writes per hour:      655.80
/dev/sdb    mean writes per hour:      646.97
/dev/sdc    mean writes per hour:      874.49
/dev/sdd    mean writes per hour:      733.95
/dev/sda    Power_On_Hours             27292 hours / 1137 days / 3.11 years
/dev/sdb    Power_On_Hours             27300 hours / 1137 days / 3.11 years
/dev/sdc    Power_On_Hours             14432 hours / 601 days / 1.65 years
/dev/sdd    Power_On_Hours             23255 hours / 968 days / 2.65 years
/dev/sda    Total_LBAs_Written         36655329806  / 17898110 mb / 17478.6 gb / 17.069 tb
/dev/sdb    Total_LBAs_Written         36172538301  / 17662372 mb / 17248.4 gb / 16.844 tb
/dev/sdc    Total_LBAs_Written         25846999325  / 12620605 mb / 12324.8 gb / 12.036 tb
/dev/sdd    Total_LBAs_Written         34955224738  / 17067980 mb / 16668.0 gb / 16.277 tb
/dev/sda    Wear_Leveling_Count        93 (% health)
/dev/sdb    Wear_Leveling_Count        93 (% health)
/dev/sdc    Wear_Leveling_Count        95 (% health)
/dev/sdd    Wear_Leveling_Count        94 (% health)

und der Einzeiler

$ sudo /usr/sbin/smartctl -A /dev/sda | 
     awk '$0~/LBAs/{ printf "TBW %.1f\n", $10 * 512 / 1024^4 }'
TBW 17.1
Ярослав Рахматуллин
quelle