Флэш-память для загрузки FreeNAS и прочих embedded OS
Анализ ошибок и технических сбоев — традиционно наименее раскрытая и наиболее интересная тема, которая как раз и показывает, насколько удачная была инженерная идея. Построив некоторое время назад сервер NAS из старого железа, мы начинаем анализ происходивших с ним отказов. В этой статье речь пойдет об отказах из-за загрузочной флэшки и их вероятных причинах. Даны рекомендации по выбору флэш-памяти. Отчасти применимо и к другим встраиваемым системам, например, бытовым видеорегистраторам.
Еще один NAS своими руками, часть 2: хорошие воспоминания**Рекламный слоган одного известного производителя памяти звучит «Good memories start here».
Практически все специалисты рекомендуют при выборе загрузочной флэшки не экономить и не использовать популярный бренд noname. Несмотря на корневую файловую систему FreeNAS версии 9 в режиме read-only, потребительские USB-флэшки компактного дизайна за полгода отказывали дважды, в обоих случаях примерно спустя пару месяцев эксплуатации. Причем оба использованных бренда, по мнению некоторых опрошенных представителей отрасли, вполне адекватные и уважаемые, в поставке откровенного брака незамеченные.
На фото: два вполне адекватных представителя крохотных флэшек на 8Гб и 16Гб
В чем же дело? Бесконечен ли ресурс чтения флэш-памяти? Попробуем разобраться.
Как это былоСистема на базе FreeNAS работала хорошо в среднем два месяца. Затем переставали приходить ежесуточные отчеты по email, за ними отваливался веб-интерфейс администратора. Но сервер так просто не сдавался: SSH работал, и сервисы сетевых папок для пользователей мужественно держались до последнего, продолжая обслуживать Бизнес. Похвальная устойчивость. Пока не отвалился доступ по SSH, в поисках причин отказа веб-интерфейса я по «ругани» в журналах веб-сервера нашел проблемную страницу (скрипт на языке python), где достаточно разборчиво увидел замены отдельных букв в тексте. Это трудно описать словами, но будто через строго одинаковые интервалы символов палец программиста проваливался между клавиш. Затем программист как будто съезжал с катушек окончательно, или же в панике выдергивал из клавиатуры свой застрявший палец, но осмысленный скрипт обрывался и перерастал в случайный набор байтов. Неужели bit flip? Оказалось, что другие пользователи наблюдали очень похожую картину. Перезаливка флэшки проходила без единой ошибки, скрывала дефект, и многочасовое тестирование утилитой им. Михаила никаких ошибок не выявляло. Ну просто идеальная флэшка. Самое обидное, что образец испорченных данных я таким образом затер, о чем сильно сожалею. Чертовщина какая-то.
Кто виноват? Что такое флэшка Что делает производитель флэшекНа мой взгляд, это очень простой вопрос: производитель собирает описанный выше «компьютер» из комплектующих, готовит софт (прошивку микроконтроллера), ставит на готовое изделие свое клеймо (бренд) и продает на рынке. Надежность флэшки зависит как от качества комплектующих, так и от прошивки. Иногда используются комплектующие собственного производства, иногда — стороннего (есть очень крупные заводы). Фирма веников не вяжет, как говорили когда-то. Но фирма очень дорожит своей репутацией, и потому веники микросхемы все-таки проверяет. Есть расхожая версия, что производители микросхем (комплектующих) делят производимую продукцию одного типа на разные классы качества, именуемые на жаргоне «корзинами». Условно для развитых рынков и условно для всех остальных. Или для бизнеса и для потребительского использования. Или еще как-нибудь, но очень важно для потребителя (как дома, так и бизнеса) то, что изделие одного и того же вендора с одним и тем же кодом не обязательно означает одни и те же «внутренности». Поэтому покупать электровеники на eBay (вслушайтесь) за полцены — это риск получить товар с микросхемами для рынков «третьего мира», несмотря на полное совпадение всех наружных кодов. По крайней мере, такого мнения придерживаются местные продавцы электровеников, вынужденные конкурировать с глобальной Интернет-торговлей.
Какая бывает флэш-памятьДанную тему раскрывал пользователь alexzeynikov в своей статье Краткий экскурс в историю флэш-памяти, также можно посмотреть переводной пост 2007г. RAM, ROM, NAND, NOR — что значат эти заглавные буквы. Бытовые флэшки используют память NAND. Если очень бегло взглянуть на рынок NAND флэш-памяти, то можно выделить следующие основные типы производства микросхем (в хронологическом порядке вывода на рынок): одноуровневые ячейки SLC (хранят в каждой ячейке 1 бит), многоуровневые MLC (наиболее популярные, хранят 2 бита, используя 4 уровня) и набирающие популярность TLC (3 бита, 8 уровней заряда). Это уплотнение информации за счет использования нескольких условных уровней заряда в одном микроэлектронном элементе (ячейке), чтобы втиснуть побольше хранимых битов в тот же физический объем и, главное, с примерно той же себестоимостью изготовления. Чтобы зря не ломать копья на расшифровке MLC и TLC, рекомендую русскоязычную статью Википедии: Флеш-память, SLC- и MLC-приборы (благодарю a5b). На подходе 16-уровневая технология, так что можно пока разминать интерфейсы и кабели. Понятное дело, за плотность приходится платить надежностью хранения, а значит, и более сложными методами работы с ошибками. Что ж, в теории порой проще давить ошибки мощной «математикой», все зависит от параметров системы.
Кусок эволюции бытовой флэш-памяти. Слева направо: 2Гб, 8Гб, 16Гб, 32Гб
По сфере использования можно различить память для промышленных систем (космос, энергетика, высокотехнологичное вооружение и т.п.), для бизнеса (серверы, профессиональное оборудование) и бытовую (игры, музыка и прочие фотки на смартфоне). Кстати, автомобильные видеорегистраторы и профессиональные фото- и видеокамеры — это почти промышленное использование из-за практически непрерывной записи в довольно широких температурных диапазонах (но, к счастью, в основном без радиации). Так что не гонитесь слепо только за объемом флэшки для своего видеорегистратора, это не магнитола, но потенциально аргумент в суде, со всеми вытекающими. Возьмите профессиональное или промышленное изделие.
Какой ресурс перезаписи у флэш-памятиПро флэш-память NAND хорошо известно, что она подвержена электрическому износу и обладает конечным ресурсом по циклам записи. Для качественной памяти SLC адекватным считается ресурс 100 тыс. циклов записи, его мы и видим у промышленных продуктов. Однако за все приходится платить, и объем хранимых данных у SLC невелик по сравнению с MLC и TLC при тех же габаритах и стоимости. Вот тут и начинается самое интересное: производители активно выводят на рынок все более ёмкие продукты, но как-то темнят по поводу их реальной электрической износостойкости, ведь это вредит продажам. При этом никто не отрицает, что ресурс у MLC меньше, чем у SLC, но больше, чем у TLC. Так на сколько же? Кто-то называет следующие цифры.
Оценка ресурса перезаписи у различных типов NAND-памяти Технология Ресурс перезаписи, циклов SLC 34нм 100,000 MLC 34нм 10,000 MLC 24нм IMFT 5,000 MLC 20нм 3,000 TLC 20нм 1,000 Т.е. у суперкомпактной TLC (именно ее я ожидаю в microSD объемом 32Гб, но лучше уточнить у Dr. X-Ray) можно ожидать «всего-навсего» порядка 1000 циклов перезаписи. Однако читателю не стоит сразу паниковать, для хранения музыки и фоток на смартфоне обычно хватает и этого. Микроконтроллер любой современной флэшки должен распределить износ равномерно, так что «запиленных» и «упоротых» блоков не будет не должно быть, независимо от типа файловой системы. В теории, чтобы «сточить в ноль» флэшку 8Гб с ресурсом 1000 циклов, надо записать на нее суммарно порядка 8Тб информации. На практике, конечно, она помрет раньше, но если использовать хорошие бренды с качественными чипами и не заражать смартфон злым вирусом-убийцей флэшек, то все будет хорошо и долго. Вот вам и инженерный парадокс: в теории старая, крупногабаритная флэшка на 2Гб (наверняка SLC) даже остатком(!) своего ресурса по надежности может заткнуть за пояс совершенно новую суперкомпактную «кроху» на 16Гб (наверняка изготовленную по MLC или TLC технологии). Хотя я бы не стал проверять этот довод на «боевом» сервере.
(FreeNAS || NAS4free) && NANDВнимательный читатель, конечно, спросит: а какое это вообще имеет значение для FreeNAS, если его корневая файловая система монтируется read-only? Не в бровь, а в глаз. Загрузчик FreeNAS требует 2Гб, из которых примерно 1Гб занимает корневая система, действительно монтируемая read-only. Кроме нее на той же флэшке создается небольшой (порядка 20Мб) раздел /data (read-write) для хранения настроек и полезной системной статистики, собираемой collectd (чтобы при перезагрузке не «забывать», скажем, историю расхода ОЗУ за месяц). Еще 1Гб не используется. Кстати, родственник FreeNAS NAS4free работает немного по-другому. Он создает единый корневой раздел, где держит и систему, и настройки (предлагая при этом создать на флэшке еще и swap, но ненавязчиво). Системная статистика у NAS4free достаточно рудиментарная и при перезагрузках уже не выживает (да и нечему там особо выживать, но для многих это не критическое условие). Более важно то, что настройки (в виде XML) у NAS4free хранятся на read-only разделе, и при их сохранении требуется перемонтаж всей корневой файловой системы из read-only в read-write и затем обратно в read-only. Довольно неуклюже, но работает.
Промежуточный итог- С учетом конечного ресурса флэш-памяти оба проекта FreeNAS и NAS4free — это хороший выбор, из-за файловой системы в read-only.
- Флэшки 2Гб для FreeNAS точно хватит с запасом, и никаких других разделов на флэшке создавать по дизайну нельзя (у NAS4free можно).
- У FreeNAS из-за сохранения статистики регулярная запись на флэшку все-таки ведется, хотя и малыми порциями (порядка 1Мб каждый час однократно, или около 8Гб в год, но это очень приближенная оценка).
- У NAS4free никакой регулярной записи на флэшку не ведется, но за счет кастрированной системной статистики и совмещения ОС с настройками на одном корневом разделе (со всеми вытекающими: старт в read-only — в read-write — сохранение настроек — и снова в read-only, вплоть до необходимости перезагрузки).
- По внешним признакам непохоже, что наши отказы произошли вследствие износа флэшки записью, хотя это первое, что обычно приходит в голову. Застрявшие пальцы программиста испорченный веб-скрипт, расположенный на read-only разделе, как-то не очень увязывается с «упоротым» результатом записи.
- Одно можно сказать достаточно определенно: при прочих равных, чем мельче габариты флэшки, тем меньше ее ресурс и надежность.
Это означает, что bit flip в NAND является ожидаемым и может исправляться «на лету» корректирующими кодами, но паниковать пока рано, ведь то же самое давно происходит в шпиндельных дисках, устройствах связи и не только. Интересно, что в соответствии с тем же докладом, память NAND SLC имеет порядка 1 млн. циклов чтения, а MLC — 100 тыс. циклов. Микроконтроллер должен это учитывать и заблаговременно копировать рисковый блок на новое место, убирая эффект возмущения и освобождая старый блок. Контроль ошибок при этом должен следить за сохранностью информации, и если порча блока превышает возможности используемой схемы коррекции — флэшка должна выдавать ошибку чтения. По ряду причин в этой статье я намеренно избегаю явного описания «полновесных» дисков SSD, но предполагаю, что в них происходит нечто подобное, на других скоростях, с накрученной логикой и нафаршированной периферией. И, раз уж затронули SSD, напомню про пресловутые 25% свободного места (Вещи, которые не нужно делать с твердотельным накопителем (SSD), или Exploring the Relationship Between Spare Area and Performance Consistency in Modern SSDs). Тем не менее, лично у меня напрашивается только одно объяснение синдрома застрявших пальцев программиста bit flip, описанного выше: а мог ли это быть как раз эффект read disturb, прорвавшийся сквозь контроль четности из-за бага в прошивке микроконтроллера или чрезмерного упрощения логики? Это и есть наиболее провокационный вопрос данной статьи.
Кто и как контролирует ошибкиТам же и ссылки на популярные алгоритмы: однобитные ошибки «лечатся» кодами Хамминга, с мультибитными ошибками принято бороться с помощью кодов Боуза-Чоудхури-Окенгема (БЧХ), а где-то посередине находятся популярные в индустрии хранения данных коды Рида-Соломона (это частный случай БЧХ). Вот еще один найденный наугад документ на эту тему: What Types of ECC Should Be Used on Flash Memory? (ссылка). Но не будем слишком долго витать в облаках абстрактной алгебры, нам пора на твердую землю инженерии. Если в блоке оказалось слишком много «упоротых» битов, если производитель памяти сэкономил и использовал более дешевый микроконтроллер, более простой алгоритм коррекции ошибок или менее квалифицированных разработчиков, то шансы «тихой» порчи данных (т.е. без явных отказов чтения) в теории возрастают. Не забываем, что не Боги горшки обжигают пишут код прошивки. Я использовал бытовую флэшку для размещения системы встраиваемого типа, которая может читать определенные блоки очень интенсивно (особенно при дефиците ОЗУ, как у меня). Однако потеря данных в результате эффекта read disturb — это слишком серьезное обвинение, которое требует более тщательного исследования. А пока я могу вывести еще один критерий оценки надежности флэшки: при прочих равных чем длиннее ECC, тем лучше.
Что делать?Спрашивается, почему произошло два идентичных отказа? После первого отказа возникло сильное желание сразу перейти на промышленную флэш-память (надо-то всего 2Гб, из которых используется половина), но найти ее с привычным разъемом USB оказалось непросто: в продаже оказались либо штырьковые (например, Transcend TS2GUFM-V), либо Compact Flash, либо вообще Disk-on-Module с интерфейсом IDE. И поскольку мой квест на промышленную флэш-память ушел в неверном направлении, я и на третий раз купил потребительскую USB-флэшку, но уже не «кроху», а «стандартного» размера с брендом Kingston. Прикидывая другие варианты, на всякий случай я даже решил подготовиться к переходу на промышленный Compact Flash, по канонам практик Крепсондо загрузив систему в тестовом режиме с кардридера (читатель, будь осторожен, он может глючить сам по себе). И, кстати, если уж говорить про диски SSD, то для простого загрузчика это относительно дорого и тоже, как ни странно, не панацея.
Вверху: кроха на 8Гб; внизу: Kingston на 8Гб
Полноразмерная флэшка Kingston на 8Гб в результате отработала без нареканий месяца три, а один продавец в магазине сказал, что уже, дескать, год бутылки открывает такой же, и ничего. Но для более крепкого сна я все-таки выбрал другой вариант, о котором расскажу прямо сейчас.
Знакомьтесь: промышленная памятьПредставитель промышленной памяти TS2GUFM-V
В итоге оказалось (ссылка), что штырьковый интерфейс «мама» у того самого промышленного изделия TS2GUFM-V является двухрядным 10-контактным разъемом с шагом 2.54мм (1/10"), пригодным в т.ч. для посадки в разъем «фронтальных» USB-портов на вполне бытовой материнской плате (используется 4 из 10 контактов). Ура, мой квест завершился.
Разъемы «фронтального» USB-кабеля и флэшки изображены с позиционным соответствием
Итак, TS2GUFM-V — это модуль 2Гб промышленной флэш-памяти с вертикальным корпусом (буква V), снабженный даже защелками от выпадания из разъема при ударах и вибрациях. Так что если читателю вдруг понадобится встраивать ОС в самонаводящийся молоток с ЧПУ, то это неплохой вариант. Есть, правда, горизонтальное исполнение TS2GUFM-H, но оно еще более брутальное (бескорпусное и крепится уже тремя болтами), в продаже встречается реже, а сажать его на обычную материнскую плату еще сложнее. Конечно, нет ничего невозможного, все зависит от желания, смекалки и конструкции корпуса.
Характеристики изделий TS512M
4GUFM-V Параметр Значение Технология SLC Объем от 512Мб до 4Гб Ресурс записи 100,000 циклов Скорость чтения до 33Мб/с Скорость записи до 20Мб/с Разрядность ECC 8 Год вывода на рынок 2006 Цена около €25 Изделие, как можно увидеть, совсем не новое, но для промышленных вариантов и 10 лет порой не возраст, а цена со временем может упасть с военных до почти бытовых значений (напомню, что за те же деньги я истратил впустую две обычных флэшки, как в известной пословице). Для сравнения: у бюджетных бытовых флэшек скорость записи всего около 5Мб/с, и TS2GUFM со своими 20Мб/с — отличное решение по канонам философии Крепсондо. Круче только Compact Flash для профессиональных фотокамер: когда они «стреляют» очередями RAW-формата, мало точно не покажется. TS2GUFM-V, правда, закрывает сразу два разъема USB, используя при этом один, но это при желании поправимо с помощью переходников. Для получения полетного задания заливки образом загрузчика надо подключить этого жесткого вояку к сисадминскому ноутбуку, разъемы USB которого промышленной суровостью не отличаются. Читатель может использовать любой удобный вариант (попробуйте поискать картинки по строке «переходник USB 10pin», узнаете много нового). Но по странному стечению обстоятельств в моем старом сисадминском сундучке обнаружились клещи-кримпер (видимо, что-то такое ими я уже раньше делал, только не помню, что). Кримпером я и обжал штыревой низковольтный переходник из кабеля-инвалида, пострадавшего от наезда колесного офисного кресла.
Зачистим и обожмем кримпером
Возьмем штыревой разъем 2.54мм (хотя можно и скрепкой)
Проверим, как сидит
Флэшка на кабеле готова к заливке
Залив образ FreeNAS обычным способом, установим нашу промышленную флэшку в разъем для «фронтальных» USB-портов на материнской плате. Не перепутайте контакты, на изделии нет «защиты от дурака». Контакт №9 должен попасть на место «спиленного» штырька.
ВНИМАНИЕ: габариты нашего сурового изделия TS2GUFM-V могут затруднить его посадку в разъем из-за электронных деталей, проводов и других разъемов, торчащих там и сям даже в весьма просторных корпусах «башенного» типа. Например, протиснуть TS2GUFM-V в разъем USB4_5 на материнской плате ASRock P4i65G между бортовыми аудио и LAN без разрушения оных оказалось никак невозможно, поэтому отправляем ее на запасной разъем USB67. Но и там пришлось уворачиваться от банки конденсатора и штекера корпусной пищалки, торчащих почти вплотную к заветным штырькам. Поэтому читателю, особенно при использовании компактных корпусов (например, известной марки Харлампий-Панкрат MicroServer), надлежит внимательно изучить сам факт наличия 10-штырьковых «посадочных» разъемов, а также окружающую их обстановку. В случае чего принять меры в виде переходников (google на картинки «переходник USB 10pin»). Или выбрать другую флэшку.
Флэшка села в разъем и заработала
Выводы- Электрофизические процессы, происходящие внутри твердотельных накопителей, далеко не так однозначны и просты, как кажется снаружи (спасибо, Капитан Очевидность).
- Надежность флэш-памяти зависит как от технологии изготовления памяти NAND (SLC, MLC, TLC и т.д.), так и от сложности микроконтроллера, а при производстве можно экономить как на первом, так и на втором.
- Грубо оценить надежность флэшки можно и по длине контрольной суммы (ECC, если производитель ее публикует): при прочих равных чем она длиннее, тем лучше.
- Для систем, которые ведут интенсивную запись, требуется флэш-память промышленного типа.
- Для серверных задач не следует использовать суперкомпактные флэшки-крохи, изготовленные по технологиям MLC (TLC) с повышенной плотностью.
- Использование дешевых флэшек малоизвестных брендов для загрузки ОС противопоказано в принципе.
- Для FreeNAS подойдут «полноразмерные» флэшки хороших брендов, а еще лучше — промышленные изделия на микросхемах SLC емкостью от 2Гб.
В следующих частях раскроем дальше тему отказов, затронем корпусную инженерию, системный тюнинг, а также покажем некоторые приемчики юниксового кунг-фу для начинающих.
Другие части истории про Ещё один NAS своими руками: часть 1: из того, что было часть 2: хорошие воспоминания (Флэш-память для загрузки FreeNAS и прочих embedded OS) часть 3: приключения в старой башне часть 4: призрак Чернобыля