Jak mogę monitorować TBW na moim dysku Samsung SSD?

13

Jak powszechnie wiadomo, dyski SSD mają ograniczoną liczbę cykli PE (wymazywanie programu) przed śmiercią komórek NAND.

Dlatego bardzo pomocne jest ustalenie, ile danych zostało zapisanych na dysku SSD, aby określić, jak długo potrwa, zanim NAND umrze.

Mam dysk SSD Samsung 850 Pro 512 GB i korzystam z systemu Ubuntu 14.04.

Jak mogę uzyskać TBW (Total-Bytes-Written) dla mojego dysku?

You'reAGitForNotUsingGit
źródło

Odpowiedzi:

16

PEŁNE UJAWNIENIE: Scipt / polecenia obecne w tej odpowiedzi nie są moje, lecz dziełem JDG Leavera. Pozyskano je z postu na blogu na jego stronie internetowej .


NB:

  • Spowoduje to podanie tylko dokładnych liczb dla dysków Samsung SSD
  • Musisz mieć smartctlzainstalowany

Metoda 1:

Oto przydatny mały skrypt, który pozwoli ci monitorować TBW twojego SSD wraz z kilkoma innymi informacjami:

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

Oto próbka danych wyjściowych:

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

Te dane są dokładne, ponieważ właśnie zainstalowałem nowy 850 Pro.


Metoda 2:

Alternatywnie, oto jedna linijka, aby uzyskać tylko TBW:

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
źródło
To nie działa z moim dyskiem SSD SAMSUNG MZ7LN512HMJP-000L7. smartctl Total_LBAs_Writtenma 2268, co daje 1,1 MB zapisanych danych - wyraźnie niepoprawny dla dysku, który ma ponad rok i jest moim głównym dyskiem systemowym :(
Icydog
@Icydog :( jaką wersję Ubuntu używasz?
You'reAGitForNotUsingGit
Mam Fedorę 27. Myślę, że mój dysk SSD prawdopodobnie po prostu nie zgłasza poprawnie liczb.
Icydog
Moje badania pokazują, że każdy dysk SSD wydaje się mieć swój własny mnożnik, co tak naprawdę oznacza każda jednostka „zapisanych LBA”. Nie mam numerów dla Samsunga 850, ale absolutnie NIE jest to tylko sektor ...
ljwobker
3

Pozostały dożywotni dysk SSD

W przypadku Crucial SSD (firmy Micron) kwestia pozostałej żywotności jest nieco łatwiejsza.

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

Ten dokument określa 202 jako procent pozostałego okresu użytkowania. Jako przykład na Ubuntu 16.04 ( sudo smartctl /dev/sda1 -a) zgłasza 202 jako nieznany, ale wartość 90 (w moim przypadku) odpowiada opisowi w pliku pdf i wskazuje 90% pozostałego życia. Może to być odpowiednio skalowane przez TBW, który znajduje się w literaturzerytycznej.com na dysku, który masz. W rzeczywistości pozostały czas życia jest bardziej przydatny.

Steve C.
źródło
1

Przyjęta odpowiedź ma rozdęty wynik, zbyt wiele bezużytecznego czarodzieja skryptów i ukrywa nazwy parametrów początkowych smartctl. Oto lepsza wersja;

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

próbka wyjściowa:

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

i jednowarstwowy

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