Рекомендация использовать ECC память в корпоративных системах известна. Дома почти все обходятся памятью без контроля чётности. А что всё же происходит с zfs пулом, расположенным на системе с дефектной памятью без контроля чётности? Будут лезть ошибки, проблемы будут молча накапливаться, всё встанет колом? Тем более, что есть известная работа DRAM Errors in the Wild: A Large-Scale Field Study. В которой авторы пишут "Примерно на трети машин или примерно на 8% DIMM планок в нашем исследовании была зафиксирована как минимум одна поддающаяся коррекции ошибка за год" Цифры пугающие. И вот в нашей конфе подкинули ссылочку как раз на практический случай.
Как часто бывает, флуда больше, чем сути, поэтому краткое изложение. Человек собрал некую (недо) пре-продакшен тестовую систему с использованием ZFS on Linux и не-ECC памяти, частично битой. По его словам, это же железо ранее работало без видимых проблем, но после резкого увеличения загрузки на ввод-вывод полезли странные проблемы.
Результат после scrub проблемного пула
root@kvm2:~# zpool status pool: zroot state: ONLINE status: One or more devices has experienced an error resulting in data corruption. Applications may be affected. action: Restore the file in question if possible. Otherwise restore the entire pool from backup. see: http://zfsonlinux.org/msg/ZFS-8000-8A scan: scrub repaired 0 in 5h25m with 0 errors on Tue Mar 10 04:05:24 2015 config:
То, что проблема в памяти он установил пост-фактум, а нам можно полюбопытствовать что собственно произошло.
Видно, что на одном из дисков зеркала вылезло 20 ошибок контрольных сумм, а на другом - 19. При этом на пуле осталось не исправлено 9. Могу объяснить уменьшение тем, что половина ошибок была скорректирована. Далее, на данные пришлось только 3 неисправимых ошибки. Не могу утверждать, но возможно часть ошибок была скорректирована за счёт хранения боле одной копии метаданных.
Отчёт о том, какие файлы повреждены.
root@kvm2:~# zpool status -v ... errors: Permanent errors have been detected in the following files:
В любом случае картинка довольно оптимистичная - из 39 ошибок до данных доехали только три, что привело к повреждению двух файлов.
После публикации этой ссылки в нашей конфе несколько камрадов поделились (отсюда несколько постов и далее) личным опытом по теме битой памяти на zfs системе. Цитирую камрадов с сокращениями. [Подробнее] Power User: "у меня как то плашка памяти сдохла, тысячи (если не десятки тысяч) ошибок - я уж и не помню - то ли READ то ли CKSUM. Но быстро заметил, ни одного файла не потерял...
а как заметил? Есть у меня еще с до-зед-эф-эсных времен привычка, скачал что то полезное, сделал контрольную сумму всех файлов в папке, потом уже кладу на НАС. Тут что-то надо было установить, делаю установку оно вываливается, проверил контрольную сумму - битая, другой архив проверил (который писал хороших пару лет назад) - он тоже битый - ну у меня паника... После пары экспериментов - выяснилось что убитые файлы каждый раз разные (мелкие)... Потом уже zpool status - новая паника - ошибки по всем дискам - я его прямо на горячую и дернул из UPS... Ну и только потом дошло память почекать..."
jenci: "у меня была проблема с памятью. всего 1 бит побился (время отвремени)... были периодически исправлены по scrub-у пару блоков на zfs. я подумал что это мой диск один проблемный подыхает в raidz2. выяснилось все "проще" планка одна битая."
OverLocker: "У меня тоже была трабла когда иногда появлялись несколько байт ошибок. Скраб их правил. Причиной являлась тоже битая память."
Итого, можно видеть, что zfs - не панацея от битой памяти, и появление ошибок из-за неё реально. Но значительная доля ошибок (порядка 90% в примере выше) всё же устраняется zfs. В условиях характерной для дома низкой нагрузки ввода-вывода (записал - и хранишь, изредка читаешь) проводя регулярный скраб и наблюдая возникающие ошибки вполне реально отловить сбойную память до того, как данные серьёзно пострадают. А единичные спорадические сбои, подобные возникающим из-за космических лучей и естественного радиационного фона, zfs со значительной вероятностью корректирует.
Так что я лично, пожалуй, окончательно успокоюсь насчёт ECC памяти. Она точно нужна в production, под значительной нагрузкой. Дома - обойдёмся обычной.