Ask Ubuntu Asked by You'reAGitForNotUsingGit on February 16, 2021
As is common knowledge, SSDs have a limited number of PE (Program-Erase) cycles before the NAND cells die.
Therefore, it is very helpful to know how much data has been written to your SSD, in order to determine how much longer it will last before the NAND dies.
I have a Samsung 850 Pro 512GB SSD, and I am running Ubuntu 14.04.
How can I get the TBW (Total-Bytes-Written) for my drive?
smartctl
installedHere's a handy little script that will allow you to monitor the TBW of your SSD, along with some other information:
#!/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 "------------------------------"
Here's the a sample of the 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 %
------------------------------
This data is accurate, as I only just installed my new 850 Pro.
Alternatively, here's a one-liner to get the TBW only:
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')"
Correct answer by You'reAGitForNotUsingGit on February 16, 2021
This feature probably wasn't around back then in gnome-disks???
my drive doesn't report this, apparently (at least not in this tool?)
Answered by WU-TANG on February 16, 2021
We can use smartctl
to find the value of TBW.
Install smartctl
with $ sudo apt install smartmontools
Get sector size and LBA written with $ sudo smartctl -Ai /dev/sda
in this case for device /dev/sda
Some math: [sector size] * [LBA written] / 1024^3 = X GiB
written so far
$ sudo smartctl -Ai /dev/sda | grep -E 'Sector Size|Total_LBAs_Written'
Sector Size: 512 bytes logical/physical
241 Total_LBAs_Written 0x0032 099 099 000 Old_age Always - 1214641768
$ calc 1214641768*512/1024^3
579.186328887939453125
In this case the sector size is 512 bytes, which is common, and total LBA written is 1214641768. The result is 579 GiB written so far. This makes sense since this drive is relatively new.
Command calc
can be install with $ sudo apt install calc
or use something else.
The command $ sudo smartctl -A /dev/sda
gives information on "vendor specific SMART Attributes" meaning what your drive shows may not be the same as this one. In the example I used a Samsung SSD which has the needed information.
Answered by Daniel on February 16, 2021
The accepted answer has bloated output, too much useless script-wizardry and hides initial parameter names from smartctl
. Here is a better 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 yearsn", $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 tbn", $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@
sample output:
$ 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)
and the one-liner
$ sudo /usr/sbin/smartctl -A /dev/sda |
awk '$0~/LBAs/{ printf "TBW %.1fn", $10 * 512 / 1024^4 }'
TBW 17.1
Answered by Ярослав Рахматуллин on February 16, 2021
Crucial SSD Lifetime remaining
For Crucial SSD (made by Micron) the question of remaining lifetime is made a little easier.
This doc identifies 202 as Percent Lifetime Remaining.
As an example on Ubuntu 16.04 (sudo smartctl /dev/sda1 -a
) reports 202 as unknown, but the value of 90 (in my case) matches the description in the pdf, and indicates 90% life remaining. This can be appropriately scaled by the TBW that is given in the crucial.com literature on the drive that you have. Actually, lifetime remaining is rather more useful.
Answered by Steve C on February 16, 2021
Get help from others!
Recent Questions
Recent Answers
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP