Как я могу контролировать TBW на моем Samsung SSD?
Как известно, твердотельные накопители имеют ограниченное количество циклов PE (Program-Erase) до того, как погибнут ячейки NAND.
Поэтому очень полезно знать, сколько данных было записано на ваш SSD, чтобы определить, как долго он продлится до смерти NAND.
У меня Samsung 850 Pro 512GB SSD, и я использую Ubuntu 14.04.
Как я могу получить TBW (Total-Bytes-Written) для моего диска?
3 ответа
ПОЛНОЕ РАСКРЫТИЕ ИНФОРМАЦИИ: Представленные в этом ответе команды scipt/ являются не моими собственными, а скорее работой JDG Leaver. Они были получены из поста в блоге на его сайте.
NB:
- Это будет сообщать только точные цифры для твердотельных накопителей Samsung
- Тебе нужно иметь
smartctl
установлены
Способ 1:
Вот небольшой удобный скрипт, который позволит вам контролировать TBW вашего SSD, а также некоторую другую информацию:
#!/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 "------------------------------"
Вот пример вывода:
------------------------------
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 %
------------------------------
Эти данные точны, так как я только что установил свой новый 850 Pro.
Способ 2:
Кроме того, вот одна строка, чтобы получить только 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')"
Как найти информацию
Мы можем использовать
smartctl
чтобы найти значение TBW.
Установить
smartctl
с участием$ sudo apt install smartmontools
Получить размер сектора и LBA, записанные с помощью
$ sudo smartctl -Ai /dev/sda
в этом случае для устройства/dev/sda
Немного математики:
[sector size] * [LBA written] / 1024^3 = X GiB
написано до сих пор
Пример для устройства /dev/sda
$ 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
В этом случае размер сектора составляет 512 байт, что является обычным явлением, а общее количество записанных LBA составляет 1214641768. Результат - 579 ГиБ, записанных на данный момент. В этом есть смысл, поскольку этот привод относительно новый.
Команда
calc
можно установить с помощью
$ sudo apt install calc
или используйте что-нибудь другое.
Больше информации
Команда
$ sudo smartctl -A /dev/sda
предоставляет информацию об "атрибутах SMART, зависящих от поставщика", что означает, что отображаемые на вашем диске данные могут отличаться от этих. В этом примере я использовал SSD от Samsung, на котором есть вся необходимая информация.
Crucial Оставшийся срок службы SSD
Для Crucial SSD (производства Micron) вопрос оставшегося срока службы упрощен.
Этот документ идентифицирует 202 как процент оставшегося времени жизни. Как пример на Ubuntu 16.04 (sudo smartctl /dev/sda1 -a
) сообщает 202 как неизвестное, но значение 90 (в моем случае) соответствует описанию в pdf и указывает на 90% оставшегося срока службы. Это может быть соответствующим образом масштабировано с помощью TBW, который указан в литературных ресурсах критически важных элементов на вашем диске. На самом деле оставшееся время жизни более полезно.
Принятый ответ имеет раздутый вывод, слишком много бесполезных скриптов-волшебников и скрывает исходные имена параметров от smartctl
, Вот лучшая версия;
#!/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@
образец вывода:
$ 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)
и однострочник
$ sudo /usr/sbin/smartctl -A /dev/sda |
awk '$0~/LBAs/{ printf "TBW %.1f\n", $10 * 512 / 1024^4 }'
TBW 17.1
Вероятно, этой функции не было тогда в gnome-дисках???
мой диск, по-видимому, не сообщает об этом (по крайней мере, не в этом инструменте?)