Измерение общего количества записанных байт в 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


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.


Это классная особенность, о которой я не знал! Позор, что большинство наших систем работают с 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

Вместо calc можно было использовать GNU bc
Элтон Карвалью
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.