Измерение общего количества записанных байт в Linux

36

Мы весьма заинтересованы в изучении возможности использования SSD-дисков в серверной среде. Тем не менее, одна вещь, которую мы должны установить, это ожидаемая долговечность. В соответствии с этой статьей производители сообщают о выносливости диска в терминах «общее количество записанных байт» (TBW). Например, из этой статьи твердотельный накопитель Crucial C400 оценивается в 72 ТБ TBW. Существуют ли какие-либо сценарии / инструменты в экосистеме Linux, чтобы помочь нам измерить TBW? (а затем принять более взвешенное решение о целесообразности использования SSD-накопителей)

плохие новости
источник

Ответы:

28

Другая возможность - посмотреть / proc / diskstats . Он не сохраняется при перезагрузках, но содержит данные для каждого блочного устройства. Вероятно, наиболее интересным для вас является поле 10, в котором содержится общее количество записанных секторов. В системе с дисками SCSI с размером сектора 512 байт вы можете запустить

awk '/sd/ {print $3"\t"$10 / 2 / 1024}' /proc/diskstats

чтобы увидеть, сколько мегабайт было записано на каждое устройство. Вывод будет выглядеть как

sda 728.759
sda1 79.0908
sda2 649.668

Sciurus
источник
4
Размер сектора можно узнать, выполнив команду #cat / sys / block / sda / queue / hw_sector_size
Антонио
@ Антонио спасибо! Я не уверен, когда это было добавлено. Похоже, что это в 3.2, но не 2.6.18.
Sciurus
@sciurus не могли бы вы объяснить математику за ваши расчеты, пожалуйста? Вы говорите о размере сектора = 512 , но ваши расчеты разделив считанное значение с 2/1024
круговорота
@gyre Поле 10 содержит количество записанных секторов по 0,5 килобайта. Я делю это на 2, чтобы получить количество записанных килобайт. Затем я делю это на 1024, чтобы преобразовать в мегабайты.
sciurus
@antonio Это делает показывает размер сектора, используемый с базовым аппаратным обеспечением, но AFAICT из исходного кода ядра, IOSTAT источника и эмпирических испытаний, «сектора» число в / Proc / diskstats всегда относится к 512 байтам, даже если hw_sector_sizeотличается ( по крайней мере, начиная с серии 2.4). Смотрите block/cfq-iosched.c, в частности cfqg_stats_update_dispatch().
Павел
23

Я боролся с той же проблемой на своем ноутбуке, но когда я перезагружал его почти каждый день, принятый ответ не помог. У меня есть Samsung mSATA SSD, который имеет атрибут SMART # 241 Total_LBAs_Written. Согласно официальной документации ,

Чтобы рассчитать общий размер (в байтах), умножьте необработанное значение этого атрибута на 512B.

Таким образом, следующая команда дает мне общий ТБ, записанный на моем диске SSD (SDB)

sudo smartctl -A /dev/sdb | awk '/^241/ { print "TBW: "($10 * 512) * 1.0e-12, "TB" } '

Поскольку он также работает на моем жестком диске, я предполагаю, что он должен работать практически на каждом современном жестком диске.

Габриэль Миретти ака Гмиретти
источник
3
Нет, это существует только на некоторых моделях SSD накопителей. Это не универсально.
Майкл Хэмптон
3
Я хотел бы отметить, что ваше уравнение фактически производит число, которое от него было бы более точным , как: sudo smartctl -A /dev/sda1 | awk '/^241/ { print "TBW: "($10 * 512) * 1.0e-12, "TB" }'.
Джордон Бедвелл
Мой Intel SSD имеет тот же атрибут, но он называется Host_Writes_32MiB. Также есть Атрибут 249 NAND_Writes_1GiB. Так что имейте в виду, что на каждом SSD это выглядит по-разному (например, мой SSD с mSATA Intel не имеет этих атрибутов)
reox
На моем Intel SSD Pro 5400s (SATA) Total_LBAs_Writtenуказано в ГБ! Не мог понять, какой низкий 4714ум показывал. Но просмотр Intel SSD Toolbox в Windows показал, что он был в ГБ.
MrCalvin
15

Вы можете увидеть, сколько данных было записано в файловую систему ext4, посмотрев в / sys / fs / ext4 / $ DEVICE / life_write_kbytes.

Sciurus
источник
Это классная особенность, о которой я не знал! Позор, что большинство наших систем работают с ext3, а также с некоторыми необработанными разделами LVM для виртуальных машин :)
badnews
ext3 (и в несколько меньшей степени) ext4 не предназначены для записи на флэш-память. Сбой будет происходить в зависимости от того, сколько раз записывается местоположение - и с обычными файловыми системами горячие точки развиваются очень быстро. Цифры, приводимые производителями, вводят в заблуждение, так как предполагают равномерное распределение записей. Существуют файловые системы, такие как JFFS2, специально разработанные для продления срока службы ваших твердотельных накопителей.
Symcbean
2
@symcbean - с современными флэш-устройствами это в основном не проблема. Все они имеют встроенные в их контроллеры процедуры выравнивания износа.
EEAA
1
@symcbean - есть два типа флэш-устройств. Устройства с технологией памяти (или MTD) предоставляют прямой интерфейс для флэш-памяти. Они обычно находятся во встраиваемых устройствах и предназначены для таких файловых систем, как JFFS2. Флэш-устройство другого типа скрывает флэш-память за Flash Translation Later (FTL), так что оно выглядит как обычное блочное устройство. Именно так реализуются потребительские технологии, такие как твердотельные накопители, USB-накопители и карты памяти. Файловые системы, такие как JFFS2, не подходят для них; вместо этого вы должны использовать файловые системы, такие как ext4, которые предназначены для блочных устройств.
Sciurus
1
ВНИМАНИЕ: ext4 life_write_kbytes и session_write_kbytes не представляют записи в ячейки памяти SSD. Я видел один системный отчет 15 ТБ для ext4 life_write_kbytes, в то время как сам SSD сообщал только 1 ТБ через атрибут SMART 241. Я подозреваю, что ext4 может добавлять полный размер свободного пространства файловой системы к этой статистике каждый раз, когда запускается fstrim, даже если SSD работает Контроллер, очевидно, не будет повторно стирать все эти доступные блоки, если они не были затронуты с момента последнего стирания. Вывод tune2fs -l, похоже, вводит в заблуждение.
ʇsәɹoɈ
2

Вы можете попробовать iostat. Это дает вам статистику, связанную с IO и загрузкой процессора. Посмотрите на руководство man iostat.

Халед
источник
Я полагаю, что это может сработать, но я надеялся, что есть что-то более высокого уровня, которое может обеспечить совокупные байтовые суммы :)
badnews
2

Для моего KINGSTON SEDC400S37480G под Ubuntu Server 14.04 я использую следующий скрипт для мониторинга TBW. Я запускаю его из cron один раз каждый день. Скрипт выводит в файл журнала.

Вам нужно Calc, чтобы он работал. Установите calc с помощью:

apt-get install apcalc

Содержание скрипта:

echo "*** $(date -R) ***" >> /scripts/tbw/log.txt
tbw=$(cat /sys/fs/ext4/sda1/lifetime_write_kbytes)
TB=1000000000
echo TB written to sda1: >> /scripts/tbw/log.txt | calc $tbw / $TB >> /scripts/tbw/log.txt

Будет выводить:

*** Thu, 20 Jul 2017 03:02:51 +0300 ***
TB written to sda1:
    3.062138442
INTEQ
источник
Вместо calc можно было использовать GNU bc
Элтон Карвалью