Bagaimana saya bisa memonitor TBW pada Samsung SSD saya?

13

Seperti pengetahuan umum, SSD memiliki jumlah terbatas siklus PE (Program-Erase) sebelum sel NAND mati.

Oleh karena itu, sangat membantu untuk mengetahui berapa banyak data yang telah ditulis ke SSD Anda, untuk menentukan berapa lama data akan bertahan sebelum NAND mati.

Saya memiliki Samsung 850 Pro 512GB SSD, dan saya menjalankan Ubuntu 14.04.

Bagaimana saya bisa mendapatkan TBW (Total-Bytes-Written) untuk drive saya?

You'reAGitForNotUsingGit
sumber

Jawaban:

16

PENGUNGKAPAN LENGKAP: Skipt / perintah yang ada dalam jawaban ini bukan milik saya, melainkan karya JDG Leaver. Mereka bersumber dari posting blog di situs webnya .


NB:

  • Ini hanya akan melaporkan angka akurat untuk SSD Samsung
  • Anda perlu telah smartctldiinstal

Metode 1:

Berikut ini adalah skrip kecil praktis yang akan memungkinkan Anda untuk memonitor TBW SSD Anda, bersama dengan beberapa informasi lain:

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

Berikut adalah contoh dari output:

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

Data ini akurat, karena saya baru saja menginstal 850 Pro baru saya.


Metode 2:

Atau, berikut adalah satu-liner untuk mendapatkan TBW saja:

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
sumber
Ini tidak berfungsi untuk SSD SAMSUNG MZ7LN512HMJP-000L7 saya. smartctl melaporkan Total_LBAs_Writtenmenjadi 2.268 dan ini menghasilkan 1,1 MB tertulis - jelas salah untuk drive yang berusia lebih dari satu tahun dan merupakan drive sistem utama saya :(
Icydog
@Icydog :( versi Ubuntu apa yang Anda jalankan?
You'reAGitForNotUsingGit
Saya menggunakan Fedora 27. Saya pikir SSD saya mungkin tidak melaporkan angka-angka dengan benar.
Icydog
Penelitian saya menunjukkan bahwa masing-masing SSD tampaknya memiliki pengganda sendiri untuk arti dari setiap unit "LBA ditulis" sebenarnya. Saya tidak memiliki angka untuk Samsung 850, tapi ini benar-benar BUKAN hanya sektor ...
ljwobker
3

Sisa seumur hidup SSD krusial

Untuk SSD Penting (dibuat oleh Micron) pertanyaan tentang sisa masa pakai menjadi sedikit lebih mudah.

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

Dokumen ini mengidentifikasi 202 sebagai Persen Seumur Hidup yang Tersisa. Sebagai contoh di Ubuntu 16.04 ( sudo smartctl /dev/sda1 -a) melaporkan 202 sebagai tidak diketahui, tetapi nilai 90 (dalam kasus saya) cocok dengan deskripsi di pdf, dan menunjukkan 90% sisa hidup. Ini dapat diskalakan dengan tepat oleh TBW yang diberikan dalam literatur penting.com pada drive yang Anda miliki. Sebenarnya, sisa seumur hidup lebih berguna.

Steve C
sumber
1

Jawaban yang diterima memiliki output yang membengkak, terlalu banyak skrip-sihir yang tidak berguna dan menyembunyikan nama parameter awal smartctl. Ini adalah versi yang lebih baik;

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

output sampel:

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

dan satu-liner

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