export LBAsW="Total_LBAs_Written" ; sudo smartctl -a /dev/sda | grep -q "$LBAsW" && echo "$(echo "scale=3; $(($(sudo smartctl -a /dev/sda | grep "$LBAsW" | awk '{ print $10 }') * 512)) / 1024 / 1024 / 1024 / 1024" | bc -l) TiB written in total" || echo "Not supported on your storage drive." ; unset LBAsW
smartctl pre-7.4 (build date Apr 12 2023) [x86_64-linux-5.4.0-146-generic] (local build)
Copyright (C) 2002-23, Bruce Allen, Christian Franke, www.smartmontools.org
=== START OF INFORMATION SECTION ===
Device Model: TOSHIBA-TR200
Serial Number: 97SB703WK46S
LU WWN Device Id: 5 00080d c009575a3
Firmware Version: SBFA12.2
User Capacity: 240 057 409 536 bytes [240 GB]
Sector Size: 512 bytes logical/physical
Rotation Rate: Solid State Device
Form Factor: 2.5 inches
TRIM Command: Available
Device is: Not in smartctl database
ATA Version is: ACS-4 (minor revision not indicated)
SATA Version is: SATA 3.2, 6.0 Gb/s (current: 6.0 Gb/s)
Local Time is: Wed Apr 12 20:55:32 2023 CEST
SMART support is: Available - device has SMART capability.
SMART support is: Enabled
=== START OF READ SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED
General SMART Values:
Offline data collection status: (0x00) Offline data collection activity
was never started.
Auto Offline Data Collection: Disabled.
Total time to complete Offline
data collection: ( 30) seconds.
Offline data collection
capabilities: (0x00) Offline data collection not supported.
SMART capabilities: (0x0003) Saves SMART data before entering
power-saving mode.
Supports SMART auto save timer.
Error logging capability: (0x01) Error logging supported.
General Purpose Logging supported.
SMART Attributes Data Structure revision number: 16
Vendor Specific SMART Attributes with Thresholds:
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
9 Power_On_Hours 0x0012 100 100 000 Old_age Always - 3529
12 Power_Cycle_Count 0x0012 100 100 000 Old_age Always - 1542
167 Unknown_Attribute 0x0022 100 100 000 Old_age Always - 0
168 Unknown_Attribute 0x0012 100 100 000 Old_age Always - 0
169 Unknown_Attribute 0x0003 100 100 010 Pre-fail Always - 0
173 Unknown_Attribute 0x0012 179 179 000 Old_age Always - 0
192 Power-Off_Retract_Count 0x0012 100 100 000 Old_age Always - 111
194 Temperature_Celsius 0x0023 059 049 020 Pre-fail Always - 41 (Min/Max 10/51)
241 Total_LBAs_Written 0x0032 100 100 000 Old_age Always - 132116
SMART Error Log Version: 1
No Errors Logged
SMART Self-test log structure revision number 1
No self-tests have been logged. [To run self-tests, use: smartctl -t]
Selective Self-tests/Logging not supported
chmod +x Total_LBAs_Written
#!/usr/bin/env bash
##############################################################################################################
# Описание
#
# Определение количества записанных данных на диск за всё время его работы исходя из RAW показателей smartctl
# Грубо говоря, это перевод значения показателя Total_LBAs_Written в человеко понятный вид за счет сравнения его
# показателей до и после записи тестового файла на выбранный диск.
#
#
# Условие работы
#
# Для работы программы в системе должны присутствовать следующие утилиты:
# smartctl
# fzf
#
#
# Использование
#
# Примеры запуска программы:
# $ sudo Total_LBAs_Written
# $ sudo Total_LBAs_Written 2G
# $ sudo Total_LBAs_Written 100М
#
# далее в меню выберите нужный диск и нажмите Enter
# по умолчанию тестовый файл берётся в 1 гиг, но можно указать и своё значения передав его программе первым параметром.
# В меню будут отображаться тока те диски которые соответствуют критериям:
# - несъёмный
# - примонтирован в системе
# - не быть в режиме только для чтения (для возможности записи на него временных тестовых данных)
# - иметь достаточно места для записи тестового файла
#
#
# Пример вывода программы
#
# $ sudo Total_LBAs_Written 100M
# Total_LBAs_Written (1) = 5860217375
# Total_LBAs_Written (2) = 5860422239 ~ 2999598811739 bytes = 2,8T
# (2) - (1) = 204864 ~ 104857600 bytes = 100M (test file size)
# ==============================================================================
# Итого на диск /dev/sda было всего записанно порядка 2,8T
#
##############################################################################################################
# set -o xtrace
set -o nounset
set -o errexit
set -o pipefail
TESTFILE_SIZE=${1:-1G}
TESTFILE_SIZE_BYTES=$(numfmt --from=iec $TESTFILE_SIZE)
disk_partitions(){
lsblk -plo PKNAME,NAME,MOUNTPOINT $(lsblk -rbpo "PATH,RM,RO,FSAVAIL" |awk -v size=$TESTFILE_SIZE_BYTES '$2==0&&$3==0&&$4>size{print $1}')
}
export TESTFILE_SIZE_BYTES
export -f disk_partitions
SELECTED_PARTITION=$(disk_partitions \
|fzf --bind 'ctrl-r:reload(bash -c 'disk_partitions')' \
--header $'Ctrl+c\t- выйти\nCtrl+r\t- обновить\nEnter\t- выбрать\n\n' \
--header-lines=1 \
--layout=reverse \
|awk '{print $2}' )
DISK=$(lsblk -npo PKNAME $SELECTED_PARTITION)
TLW1=$(smartctl -a $DISK | awk '/Total_LBAs_Written/{print $NF}')
[[ -z $TLW1 ]] && echo "Параметр Total_LBAs_Written на текущем диске $DISK не найден !!!" && exit 1
TESTFILE_PATH=$(lsblk -no MOUNTPOINTS $SELECTED_PARTITION)/testfile
sync -f $SELECTED_PARTITION
dd if=/dev/zero of=$TESTFILE_PATH bs=$TESTFILE_SIZE_BYTES count=1 status=none
sync -d $TESTFILE_PATH
rm $TESTFILE_PATH
TLW2=$(smartctl -a $DISK | awk '/Total_LBAs_Written/{print $NF}')
echo "Total_LBAs_Written (1) = "$TLW1
TLW2_SIZE=$(echo "$TLW2*$TESTFILE_SIZE_BYTES/($TLW2-$TLW1)"|bc)
echo "Total_LBAs_Written (2) = $TLW2 ~ $TLW2_SIZE bytes = "$(numfmt --to=iec $TLW2_SIZE)
echo " (2) - (1) = $[TLW2-TLW1] ~ $TESTFILE_SIZE_BYTES bytes = "$(numfmt --to=iec $TESTFILE_SIZE_BYTES)" (test file size)"
echo ==============================================================================
echo "Итого на диск $DISK за всё время его работы было записанно порядка $(numfmt --to=iec $TLW2_SIZE)"
exit