Comment puis-je surveiller le TBW sur mon SSD Samsung?

13

Comme il est de notoriété publique, les disques SSD ont un nombre limité de cycles PE (Program-Erase) avant la mort des cellules NAND.

Par conséquent, il est très utile de savoir combien de données ont été écrites sur votre SSD, afin de déterminer combien de temps cela durera avant la mort de la NAND.

J'ai un SSD Samsung 850 Pro 512 Go et j'utilise Ubuntu 14.04.

Comment puis-je obtenir le TBW (Total-Bytes-Written) pour mon lecteur?

Vous êtes AGitForNotUsingGit
la source

Réponses:

16

DIVULGATION COMPLÈTE: Les commandes / scipt présentes dans cette réponse ne sont pas les miennes, mais plutôt le travail de JDG Leaver. Ils provenaient d' un article de blog sur son site Web .


NB:

  • Cela ne rapportera que des chiffres précis pour les SSD Samsung
  • Vous devez avoir smartctlinstallé

Méthode 1:

Voici un petit script pratique qui vous permettra de surveiller le TBW de votre SSD, ainsi que d'autres informations:

#!/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 "------------------------------"

Voici un échantillon de la sortie:

------------------------------
 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 %
------------------------------

Ces données sont exactes, car je viens d'installer mon nouveau 850 Pro.


Méthode 2:

Alternativement, voici un one-liner pour obtenir le TBW uniquement:

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')"
Vous êtes AGitForNotUsingGit
la source
Cela ne fonctionne pas pour mon SSD SAMSUNG MZ7LN512HMJP-000L7. smartctl rapporte Total_LBAs_Written2268, ce qui produit 1,1 Mo écrit - clairement incorrect pour un lecteur de plus d'un an et mon lecteur système principal :(
Icydog
@Icydog :( quelle version d'Ubuntu utilisez-vous?
You'reAGitForNotUsingGit
Je suis sur Fedora 27. Je pense que mon SSD ne rapporte probablement pas correctement les chiffres.
Icydog
Ma recherche montre que chaque SSD semble avoir son propre multiplicateur pour ce que signifie réellement chaque unité de "LBAs écrite". Je n'ai pas les chiffres pour le Samsung 850, mais ce n'est absolument PAS juste un secteur ...
ljwobker
3

Durée de vie SSD cruciale restante

Pour les SSD Crucial (fabriqués par Micron), la question de la durée de vie restante est un peu plus facile.

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

Ce document identifie 202 comme pourcentage de durée de vie restante. Par exemple, sur Ubuntu 16.04 ( sudo smartctl /dev/sda1 -a), le 202 est inconnu, mais la valeur de 90 (dans mon cas) correspond à la description du pdf et indique 90% de durée de vie restante. Cela peut être mis à l'échelle de manière appropriée par le TBW qui est donné dans la documentation cruciale.com sur le lecteur que vous avez. En fait, la durée de vie restante est plutôt plus utile.

Steve C
la source
1

La réponse acceptée a gonflé la sortie, trop de sorcellerie inutile et cache les noms de paramètres initiaux smartctl. Voici une meilleure 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@

exemple de sortie:

$ 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)

et le one-liner

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