LINUX.ORG.RU

[жж] словил сбойные сектора на nvme ssd

 , , , , ,


5

7

Дорогой Уважаемый ЛОР,

Я словил первое в своей жизни проявление сбойных секторов на SSD. Пациент — Samsung SSD 970 EVO 2TB с прошивкой 2B2QEXE7, в эксплуатации примерно год. Пару-тройку дней назад мне почему-то захотелось сделать копию вообще всех данных из домашней директории, включая файлы, которые легко скачать из сети при надобности. Некоторые из этих файлов лежали там с момента миграции на накопитель, без обращений. И при копировании одного из таких файлов программа сказала: «А я, кажись, чот не могу». После того, как потихоньку пришло осознание произошедшего, я глянул в лог и увидел там:

blk_update_request: critical medium error, dev nvme0n1, sector 313199872 op 0x0:(READ) flags 0x80700 phys_seg 8 prio class 0

Что интересно, во второй раз файл успешно скопировался. Не знаю, прочитались там настоящие данные или мусор. К сожалению, вот этот конкретный файл повторно скачать оказалось неоткуда. Чтение данных с nvme0n1 по тому адресу выдало какие-то данные, не нули. Тут я решил, что SSD умный, что он понял, что страница не читается стабильно, и увёл её в чулан, на её место подставил новую, а данные всё-таки скопировал. Но на всякий случай решил запустить холостое чтение с блочного устройства. Сбойных блоков оказалось больше. Пробовал читать конкретные места. Зачастую чтение было успешным, но через много чтений всё же происходили ошибки. Попробовал перезаписать место с ошибками чтения теми же данными. Ошибки там прекратились.

В итоге сделал дамп через ddrescue, а потом записал этот дамп обратно. Последующие попытки прочитать накопитель целиком уже никаких ошибок не давали. Сижу вот теперь как на пороховой бочке. Пользоваться дальше немного боязно, но и выбрасывать накопитель, который вроде работает, как-то жалко.

За время тестов в логи свалилось 546 строк с «blk_update_request: critical medium error», но ошибки иногда сыпались так часто, что в сумме набралось 888 «callbacks suppressed». В статусе накопителя написано, что ошибок доступа к носителю было 1484. Так как в логи основной системы не попало происходившее на LiveUSB, можно считать, что числа сходятся. К сожалению, не помню, были ли там ошибки до недавних событий. Всего различных сбойных секторов было 167 штук.

В данных из плохих секторов нашлись обрывки Packages из Debian. Судя по версиям пакетов, эти куски из очень старых Packages, возможно ещё из 2016. Если это так, они приехали во время миграции на накопитель, и с тех пор не перезаписывались и не читались. Один кусок оказался очень похож на файл переводов и нашёлся в /usr/share/locale/gl/LC_MESSAGES/coreutils.mo, который конечно же ни разу не читался с момента последней переустановки пакета coreutils в начале августа 2019.

smartctl:

=== START OF SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

SMART/Health Information (NVMe Log 0x02)
Critical Warning:                   0x00
Temperature:                        41 Celsius
Available Spare:                    100%
Available Spare Threshold:          10%
Percentage Used:                    1%
Data Units Read:                    162 937 114 [83,4 TB]
Data Units Written:                 65 584 401 [33,5 TB]
Host Read Commands:                 691 234 670
Host Write Commands:                544 796 594
Controller Busy Time:               3 278
Power Cycles:                       719
Power On Hours:                     2 249
Unsafe Shutdowns:                   82
Media and Data Integrity Errors:    1 484
Error Information Log Entries:      1 783
Warning  Comp. Temperature Time:    0
Critical Comp. Temperature Time:    0
Temperature Sensor 1:               41 Celsius
Temperature Sensor 2:               42 Celsius

Error Information (NVMe Log 0x01, max 64 entries)
No Errors Logged

Терабайт тридцать-сорок я добавил чтением накопителя во время тестов.

Думаю, из произошедшего можно сделать, как минимум, следующие выводы:

  • полгода без чтения страницы на SSD достаточно для последующих ошибок чтения;
  • чтение такой страницы не заставляет SSD подменять страницу на новую, он с радостью выдаёт ошибку чтения на одном и том же месте много раз подряд;
  • trim не означает очистку всех неиспользуемых блоков ФС, они же меньше страницы. Некоторые данные могут жить в закоулках годами;
  • SSD желательно периодически прочёсывать чтением, чтобы словить сюрпризы пораньше;
  • если такое происходит на TLC 3D V-NAND, страшно подумать, что будет на QLC.

Upd.
Узнал, что в NVMe есть фича 0x10, которая управляет температурами, при которых SSD должен начать тормозить для снижения нагрева. Правда для 970 EVO эти температуры дожны быть в диапазоне 80–82 °C, а попытка установить любые значения кроме 0 для фичи 0x10 завершаются неудачай.


Upd. 11 мая 2021, то есть примерно через год и два месяца после первого раза, появились новые ошибки чтения. При повторном чтении тех же мест ошибки повторялись, но через некоторое время пропали.


Upd. 5 июня 2021. Аккумулятор оказался вздут в той секции, что прилегает к SSD. Видимо, предупреждение о температурном лимите в 65°C на аккумуляторе написано не просто так.


Upd. 20 февраля 2022. Накопитель отправился на пенсию.

★★★★★

Последнее исправление: i-rinat (всего исправлений: 5)

Ответ на: комментарий от aidaho

Если там целый год было 80

Ты вроде адекватный

А вот ты что-то сегодня не очень. Я чётко сказал, что это «критическая» температура, то есть температура, при которой накопитель будет слать предупреждения на хост.

год

Текущее состояние обоих датчиков приведено прямо в заглавном сообщении. Истории температуры за год в выхлопе smartctl нет. Она могла бы быть в секции, которая содержит изменяющиеся данные, но её я привёл полностью. В логах через утилиту nvme более подробных данных я не нашёл, так что привёл вывод smartctl, он лучше оформлен.

Теперь ещё раз тот же вопрос. Зачем тебе данные, которые зашиваются в накопитель на фабрике и с этого момента не меняются вообще ни при каких обстоятельствах? Или ты спутал с ATA-накопителями, где smartctl показывает атрибуты?

i-rinat ★★★★★
() автор топика

так, я не понял, усё пропало, надо переходить на zfs? побежал делать badblocks -v -s -b 4096 /dev/sdb на всех своих ссд…

zendrz ★★
()
Ответ на: комментарий от gag

плюс параметр «дата записи» для каждой блока фс. чот много памяти на енто уйдет - ссд подорожает :)
плюс батарейка для RTC (которую потребуется еще менять) либо команда для записи драйвером текущего времени из операционки.
сложна и дорохо !! классически, производитель на такое пойдет когда яйцами к стенке припрут

pfg ★★★★★
()
Ответ на: комментарий от zendrz

а чем тебе зфс поможет ?? проблема аппаратная. даже всеми своими 128битами оне ничего кроме громкого имени… :(

pfg ★★★★★
()
Ответ на: комментарий от pfg

как чем, штатный скремблинг (я правильно называю?) и чексуммы данных. Хотя, нужна избыточность, что бы это все должным образом работало

zendrz ★★
()
Ответ на: комментарий от pfg

проблема аппаратная

можно это как-то перевести в гарантийный случай, например, есть идеи?

zendrz ★★
()
Ответ на: комментарий от pfg

плюс параметр «дата записи» для каждой блока фс

Флэш не оперирует такими единицами. Отдельные ячейки объединены в страницы (4 КБ, 16 КБ), которые группируются в блоки (несколько МБ). Считать нам нужно с точностью всего лишь до дня. Если взять 8 бит, это чуть более 8-ми месяцев. Читать мы можем минимум постранично. Для 4 КБ понадобится 1 байт служебной информации. Для 1 ТБ SSD - всего лишь 250 МБ. Совсем немного.

Да и счётчик сам по себе это не что-то новое: во флэш-контроллерах уже должны быть поблочные счётчики read/write disturbance.

gag ★★★★★
()
Ответ на: комментарий от zendrz

Лучше пишите программу, которая будет измерять время чтения файла. У файла есть время создания (в ext4 и zfs, вроде), можно будет как-то оценивать, есть ли проблема чтения старых данных у конкретного экземпляра ssd или нет.

mky ★★★★★
()

Вот поэтому я использую Btrfs. Хотя бы будет понятно, испорчены данные или нет. А дальше уже бэкап, если испорчены.

anonymous
()

Кстати, хороший вопрос. Вот у контроллера PERC H730P я вижу Patrol Read Mode, которое, возможно (я не знаю достоверно), как раз этим занимается - фоновым перепрочтением диска на предмет его жизнеспособности. А что насчет linux raid? Оно так умеет?

targitaj ★★★★★
()
Ответ на: комментарий от anonymous

Чем больше объём - тем медленнее износятся ячейки, просто потому что их тупо больше и работает wear leveling.

anonymous
()
Ответ на: комментарий от anonymous

Ноутбук с пластиковым корпусом. Там некуда ставить охлаждение, не предусмотрено.

А так чисто софтварно колхозил. При раскатке образа пропускал через dd с гигабайтным буфером, чтобы запись была быстрыми заходами, и накопитель успевал уйти в сон охладиться. Помогло, кстати. Если напрямую с жёсткого диска записывать, температура быстро взбирается до 80-100 и там держится, а если через буфер, то гуляет около 60. Эффективная скорость записи та же.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

У меня ритуал введения в эксплуатацию включает в себя тесты SMART’а, если они есть, и деструктивный прогон badblock’ом

А омовение в крови девственниц случайно там между этапами не происходит?

intelfx ★★★★★
()

Пробовал читать конкретные места. Зачастую чтение было успешным, но через много чтений всё же происходили ошибки. Попробовал перезаписать место с ошибками чтения теми же данными. Ошибки там прекратились.

В итоге сделал дамп через ddrescue, а потом записал этот дамп обратно. Последующие попытки прочитать накопитель целиком уже никаких ошибок не давали.

Ну и самого главного не написал — данные-то в итоге потерял или нет?

P. S.: и это я ещё думал, что я слишком активно использую SSD…

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

данные-то в итоге потерял или нет?

Насколько мне известно, нет. Копирование через ddrescue запнулось один раз, но вторая попытка данные отдала.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от intelfx

Чем может btrfs помочь? Я же правильно понимаю проблему, что страницы >1.5 года без чтения перестали читаться?

anonymous
()
Ответ на: комментарий от anonymous

Чем может btrfs помочь?

Сам по себе — ничем, он просто мог бы гарантировать, что ничего не потерялось (или наоборот).

А вообще — говорим btrfs, подразумеваем регулярный scrub.

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

он просто мог бы гарантировать, что ничего не потерялось (или наоборот).

Потому что btrfs проверит чексуммы при чтении? Я до этого момента даже не знал, что не все файловые системы в это умеют.

Иначе получается, что нельзя быть уверенным, что вместо файла не был прочитан мусор. Что и произошло (близко) с ТСом.

anonymous
()
Ответ на: комментарий от anonymous

не все файловые системы в это умеют.

Проще перечислить те, что умеют. Из более или менее доступных только btrfs и ZFS.

Но можно накатить файловые системы поверх dm-integrity.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Я до этого момента даже не знал, что не все файловые системы в это умеют.

Вообще-то это делает сам девайс.

legolegs ★★★★★
()
Ответ на: комментарий от anonymous

Вижу “crc32 hdd” и “crc32 ssd” в гугле. Значит HDD и SSD тоже считают чексуммы. А в чём отличие железячной проверки от софтверной? Если диск обнаружит страницу/ячейку (или с чем он там работает) с отличной чексуммой, то он отправит ошибку. Если это сделает файловая система, она тоже отправит ошибку.

anonymous
()
Ответ на: комментарий от anonymous

А в чём отличие железячной проверки от софтверной?

Когда SATA набирало обороты, были некоторые контроллеры, которые иногда возвращали повреждённые данные, но ошибок при этом не возникало. У каких-то там жёстких дисков бывали странные глюки, когда они писали не туда, куда просили. В обоих случаях железо при последующем чтении сообщит, что всё в порядке. А софтовые реализации всё-таки обнаружат нестыковку контрольных сумм.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Гм, получается софт предохраняет от ошибок в фирмвари и неисправности самого железа.

anonymous
()
Ответ на: комментарий от EvilFox

В таблице по третьей ссылке IOPSы, надеюсь, а не байты?

legolegs ★★★★★
()
Ответ на: комментарий от EvilFox

Ага-ага.

Ara-ara.

Зависимость от нагрузки сильная. У меня ощущение, что я на ext4 сгенерировал больше записей, чем @intelfx на btrfs.

i-rinat ★★★★★
() автор топика
16 мая 2020 г.

Только ржавые вращающиеся блины, только олдскул, только хардкор!

Harald ★★★★★
()

Прошло почти три месяца, и раз уж вспомнил про накопитель, прогнал чтение ещё раз. Ошибок не было.

SMART/Health Information (NVMe Log 0x02)
Critical Warning:                   0x00
Temperature:                        44 Celsius
Available Spare:                    100%
Available Spare Threshold:          10%
Percentage Used:                    1%
Data Units Read:                    196 035 944 [100 TB]
Data Units Written:                 79 546 159 [40,7 TB]
Host Read Commands:                 840 599 602
Host Write Commands:                691 669 490
Controller Busy Time:               3 862
Power Cycles:                       830
Power On Hours:                     2 935
Unsafe Shutdowns:                   83
Media and Data Integrity Errors:    1 484
Error Information Log Entries:      1 850
Warning  Comp. Temperature Time:    0
Critical Comp. Temperature Time:    0
Temperature Sensor 1:               44 Celsius
Temperature Sensor 2:               48 Celsius

Семь терабайт записи за три месяца. Два это перезапись содержимого, когда я накопитель «чинил». Порядка одного, может двух — от перебрасывания данных, когда кроме накопителя ноуте подходящего носителя не было. Три-четыре оставшихся, получается, просто от эксплуатации. Как интересно-то. Терабайт в месяц.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Три-четыре оставшихся, получается, просто от эксплуатации. Как интересно-то. Терабайт в месяц.

Чего ты там делаешь с этим диском-то?

intelfx ★★★★★
()
Ответ на: комментарий от intelfx

Компилирую, тесты запускаю.

i-rinat ★★★★★
() автор топика

Я словил первое в своей жизни проявление сбойных секторов на SSD. Пациент — Samsung SSD 970 EVO

Далее ещё многл букв. Проявление сбойных секторов на SSD вы ещё не словили, по очевидной причине, что на SSD нет секторов.

Partisan ★★★★
()
11 мая 2021 г.

Сегодня снова словил несколько сбойных секторов. Ошибки чтения так же пропадали и появлялись. В этот раз так же пробовал перезаписать только один сектор, но потом заметил, что если подождать, то сбойные сектора пропадают сами. То есть просто прочитать, подождать. Сейчас прогнал чтение всего накопителя полностью пару раз с перерывом — все сбойные блоки пропали.

Три дня назад у накопителя «Available Spare» сменилось с 100% до 99%. Кажется, он там что-то начал замечать.

Текущий смарт:

=== START OF SMART DATA SECTION ===
SMART overall-health self-assessment test result: PASSED

SMART/Health Information (NVMe Log 0x02)
Critical Warning:                   0x00
Temperature:                        62 Celsius
Available Spare:                    99%
Available Spare Threshold:          10%
Percentage Used:                    2%
Data Units Read:                    323 456 846 [165 TB]
Data Units Written:                 141 533 824 [72,4 TB]
Host Read Commands:                 1 337 621 408
Host Write Commands:                1 350 829 965
Controller Busy Time:               6 236
Power Cycles:                       1 571
Power On Hours:                     5 784
Unsafe Shutdowns:                   265
Media and Data Integrity Errors:    1 856
Error Information Log Entries:      541 676
Warning  Comp. Temperature Time:    0
Critical Comp. Temperature Time:    0
Temperature Sensor 1:               62 Celsius
Temperature Sensor 2:               65 Celsius
i-rinat ★★★★★
() автор топика
Ответ на: комментарий от Partisan

на SSD нет секторов.

Спецификация NVMe вовсю использует термин sector как аналог logical block. Ядро Linux тоже использует термин sector.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Спецификации не составляю, так что не знаю.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от anonymous

И fwupd, и Samsung Magician пишут, что версия прошивки самая свежая.

i-rinat ★★★★★
() автор топика
Ответ на: комментарий от i-rinat

Да, надо вернутся всему IT обществу к памяти на ферритовых сердечниках. Провод горизонтально, провод вертикально и на них кольца висят. Шутка конечно, ибо плотность крайне низкая.

XoFfiCEr ★★☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.