Вимірювання "загальних байтів, записаних" під Linux


36

Нам дуже цікаво вивчити можливість використання SSD-накопичувачів у серверному середовищі. Однак одне, що нам потрібно встановити, - це очікуване довголіття. Згідно з цією статтею, виробники повідомляють про витривалість накопичувача у вигляді "загальної кількості записаних байтів" (TBW). Наприклад, з цієї статті вирішальний SSD для C400 оцінюється в 72 ТБ ТБВ. Чи існують якісь сценарії / інструменти в екосистемі Linux, щоб допомогти нам виміряти рівень TBW? (а потім прийміть більш освічене рішення щодо можливості використання SSD-накопичувачів)

Відповіді:


28

Ще одна можливість - подивитися на / proc / дискстати . Він не є стійким для перезавантаження, але він має дані для кожного блокового пристрою. Напевно, найцікавішим для вас є поле 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
Antonio

@Antonio дякую! Я не впевнений, коли це було додано. Схоже, це в 3.2, але не 2.6.18.
sciurus

@sciurus, чи не могли б ви пояснити математику за своїми розрахунками? Ви говорите про розмір сектора = 512 , але ваші розрахунки розділивши лічений значення з 2/1024
кругообігу

Поле @gyre містить кількість записаних секторів 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

Я боровся з тією ж проблемою у своєму ноутбуці, але, оскільки я перезавантажую її майже щодня, прийнята відповідь не була корисною. У мене є SSD-накопичувач Samsung mSATA, який має атрибут SMART №241 Total_LBAs_Written. Згідно з офіційною документацією ,

Щоб обчислити загальний розмір (у байтах), помножте необроблене значення цього атрибута на 512В.

Отже наступна команда дає мені загальну кількість ТБ, записану на моєму 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" }'.
Джордон Бедвелл

Мій SSD Intel має той самий атрибут, але він називається Host_Writes_32MiB. Також є атрибут 249 NAND_Writes_1GiB. Тож майте на увазі, що на кожному SSD це здається різним (наприклад, у mSATA Intel SSD у мене немає цих атрибутів)
reox

На моєму Intel SSD Pro 5400s (SATA) Total_LBAs_Writtenвказаний в ГБ! Не могло зрозуміти, що низький 4714розумний демонстрував. Але дивлячись на панель інструментів Intel SSD у Windows, він показав, що він знаходиться в ГБ.
MrCalvin

15

Ви можете побачити, скільки даних було записано у файлову систему ext4, заглянувши в / sys / fs / ext4 / $ DEVICE / lifetime_write_kbytes.


Це класна особливість, про яку я не знав! Прикро, що більшість наших систем працює під управлінням ext3, а також деякі сирі розділи LVM для VM :)
badnews

ext3 (і дещо меншою мірою) ext4 не призначені для запису на флеш. Збій відбудеться залежно від кількості записів про місцезнаходження - і при звичайних файлових системах гарячі точки розвиваються дуже швидко. Цитовані виробниками цифри дуже вводять в оману, оскільки вони передбачають рівномірне поширення кількості записів. Існують файлові системи - наприклад, JFFS2 - спеціально розроблені для продовження терміну служби ваших SSD.
symcbean

2
@symcbean - з сучасними флеш-пристроями це багато в чому не проблема. Усі вони мають вбудовані підпрограми, що вбудовуються в їх бортові контролери.
ЄЕАА

1
@symcbean - Існує два види флеш-пристроїв. Пристрої технології пам'яті (або MTD) представляють прямий інтерфейс до флеш-пам'яті. Вони, як правило, знаходяться на вбудованих пристроях і є те, для чого призначена файлова система типу JFFS2 Інший тип флеш-пристроїв приховує флеш-пам’ять за Flash Translate later (FTL), щоб він виглядав як звичайний блок-пристрій. Так реалізуються споживчі технології, такі як SSD, USB-накопичувачі та карти пам'яті. Такі файлові системи, як JFFS2, для них не підходять; натомість ви повинні використовувати файлові системи типу ext4, призначені для блокових пристроїв.
sciurus

1
ПОПЕРЕДЖЕНО: ext4 lifetime_write_kbytes і session_write_kbytes не є репрезентативними для запису комірки пам'яті SSD. Я бачив один системний звіт 15TB для ext4 lifetime_write_kbytes, тоді як сам SSD повідомляв лише про 1TB за допомогою атрибута 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

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