Primary tabs

Когда твердотельные накопители не такие твердые

Перевод статьи When Solid State Drives are not that solid, автор - Adam Surak

Это выглядело так же, как другая странице в середине ночи. Один из серверов нашего поискового API остановил обработку заданий индексации по неизвестной причине. С того времени как мы строим системы в Algolia для обеспечения высокой доступности и отказоустойчивости, ничего плохого не происходит. Новые вызовы API были правильно перенаправлены на другие здоровые машины, и единственное воздействие на службе - один разбуженный инженер. Это было время, чтобы выяснить, что происходит.

РЕЗЮМЕ:
1) вопрос, поднятый Algolia - из-за ошибки ядра Linux
2) ошибка ядра Linux может повлиять на любой SSD при тех же условиях эксплуатации
3) Samsung также опубликовал ядра патч Linux, который должен исправить проблему

Изменение 16 июня:
Много дискуссий начала указывая, что проблема связана с вновь введенной очереди TRIM. Это не правильно. TRIM на наших дисках ООН-очередь и вопрос, который мы нашли не связано с последними изменениями в ядре Linux, чтобы отключить эту функцию.

# smartctl -l gplog,0x13 /dev/sda
smartctl 6.2 2013-07-26 r3841 [x86_64-linux-3.16.0-31-generic] (local build)
Copyright (C) 2002-13, Bruce Allen, Christian Franke, www.smartmontools.org

General Purpose Log 0x13 does not exist (override with ‘-T permissive’ option)

Изменение 17 июня:
Мы получили связаться по Samsung и мы предоставили им все технические характеристики системы и всю информацию о проблеме у нас было. Мы будем продолжать оказывать Samsung всю необходимую информацию для того, чтобы решить эту проблему.

Изменение 18 июня:
Мы только что селекторное совещание с европейским отделением и корейской штаб Samsung. Их инженеры собираются посетить один из центров обработки данных мы имеем серверов в России и в сотрудничестве с нашим поставщиком серверного они будут инспектировать указанные твердотельные накопители в нашем SW и HW установки.

Изменение 19 июня:
В понедельник 22 июня, команда инженеров из Samsung собирается проанализировать один из наших серверов в Сингапуре и, если ничего не найдено на месте, сервер поедет в Samsung HQ в Корее для дальнейшего анализа.

Изменение 13 июля:
С момента последнего обновления этой записи блога, мы были в сотрудничестве с Samsung пытается помочь им найти проблему, при этом исследовании мы согласны д с Samsung не общаться, пока их утверждения.

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

Samsung просили нас сообщить вам об этом:

  • Samsung попытались дублировать недостаточности с последней сценария, предоставляемого им, но ни одной ошибки не был воспроизведен до сих пор.
  • Samsung сделает дальнейшие испытания, скорее всего, из недели 29 года, с гораздо более интенсивного сценария предоставленной Algolia.

После безуспешных попыток воспроизвести проблему с помощью скриптов Bash мы решили помочь им КРИТСКОГО ING небольшую программу на C ++, который имитирует стиль письма и характер нашего приложения (не файлы открыты с O_DIRECT). Мы считаем, что если вопрос идет от конкретного пути мы используем стандартные вызовы ядра, это может занять несколько дней и терабайты данных, которые будут записаны на диск. Мы были проинформированы Samsung, что ни один вопрос такого рода не поступало к ним. Наш провайдер сервер изменил свои Ubuntu 14.04 изображения отключить fstrim хрон, чтобы избежать этой проблемы. За последние пару месяцев после не используя обрезки больше мы никогда больше не видел эту проблему.

Изменение 17 июля:
Мы только что завершили конференцию с Samsung рассматривает анализ отказов данного вопроса. Команда инженеров Samsung смогла успешно воспроизвести проблему с нашей последней предоставленной двоичной системе.

Samsung была конкретная вывод, что проблема не связана с Samsung SSD или программного обеспечения Algolia но имеет отношение к ядру Linux.

Samsung разработала ядра патч, чтобы решить эту проблему и официальное заявление с подробностями выйдет завтра, 18 июля на Linux сообщества с руководством патч Linux. Наша тестирование кода доступно на GitHub .

Это был удивительный езды, спасибо всем за участие, мы пришли к месту назначения.

Для всех последователей этой BlogPost и всех новых читателей:

Обнаружили вопрос имеет гораздо большее влияние, чем мы первоначально ожидаемый и не вызванное Samsung SSD, как мы первоначально предполагалось. Мои личные извинения Samsung!

NGINX демон служит все HTTP (S) коммуникацией API и готов служить поисковых запросов, но процесс индексации разбился было. Поскольку процесс индексации охраняется контролировать , врезавшись в цикле было бы понятно, но полный крах не было. Как выяснилось файловая система была в режиме только для чтения. Ладно, предположим, что это был космический луч файловая система была исправлена, файлы были восстановлены из другого здорового сервере и все снова шло хорошо.

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

Исследование & время отладки!

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

  • Файловая система - Есть ли ошибка в ext4 ? Можно ли получить доступ к области памяти таблиц распределения случайно?
  • Mdraid - Есть ли ошибка в mdadm? Возможно мы используем неправильную конфигурацию?
  • Драйвер - Есть ли у водителя ошибку?
  • SSD - это SSD умирает? Или еще хуже, есть проблема с прошивкой привода?

Мы даже начали делать ставки, где эта проблема была и точно предложил в таком порядке, возможные решения происходит от простого к сверхтвердых.

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

Через час, другой сервер был поврежден. На этот раз мы взяли его из кластера и начал осматривать ее по кусочкам. Прежде чем мы зафиксировали файловой системы, мы заметили, что некоторые части наших файлов пропали (обнуляется) - файл дата модификации не изменилась, размер не изменился, просто некоторые части были заполнены нулями. Небольшие файлы были полностью стерты. Это было странно, так как мы начали думать, если это было возможно, что наше приложение может получить доступ определенные части памяти, где OS / файловой системы что-то отображается, так как иначе наше приложение не может изменить файл без файловой замечая. Имея нашу программу, написанную на С ++ принес много сумасшедших идей, что произошло. Это оказалось тупиковым, как все эти блоки памяти были вне нашей досягаемости.

Так есть проблема в ext4? Проходя через ядра список изменений ищет ext4 вопросам был страшный опыт. Почти в каждом варианте мы нашли исправлена ​​ошибка, которые теоретически могут повлиять нас. Я должен признать, что я спал лучше перед чтением изменений.

Мы имели ядра 3.2, 3.10, 3.13 и 3.16 распределенных между наиболее часто поврежденные машины и ждали, чтобы увидеть, какие из шахт взрывается. Все они сделали. Другой тупиковый. Может быть, там была проблема в ext4, что никто не видел раньше? Вероятность того, что мы были в этом "повезло" была довольно низкой, и мы не хотим, чтобы в конечном итоге в такой ситуации. Возможность ошибки в ext4 была еще открыта, но маловероятно.

Что делать, если существует проблема в mdadm? Глядя на список изменений дал нам уверенность, что мы не должны идти по этому пути.

Уровень отчаяния достижении критического уровня, а страницы в середине ночи были остановить. Мы провели большую часть две недели просто изолировать машины как можно быстрее и восстановление их как можно быстрее. Единственное, что мы сделали, чтобы осуществить проверку в нашем программном обеспечении, которые выглядели для пустых блоков в индексных файлов, даже если они не были использованы, и предупредил нас заранее.

Ни одного дня без коррупции

В то время как все больше и больше машин умирали, нам удалось автоматизировать процедуры восстановления до уровня, мы были удобными. На каждом отказа, мы попытались взглянуть на различных форм коррупции в надежде, что мы нашли бы наименьшее общий знаменатель. Все они имели те же характеристики. Но одно начал все больше и больше понятно - мы видели проблему только на части наших серверов. Программный стек был идентичен, но оборудование было немного отличается. В основном SSD, были разные, но все они были от одного производителя. Это был очень тревожный и привели нас к связаться с нашим сервер провайдера, чтобы спросить, если они когда-либо видели нечто подобное и раньше. Трудно убедить человека технической поддержки о проблеме, которую вы видите только один раз в то время, с последней прошивкой и что вы не можете воспроизвести по требованию. Мы не были очень успешными, но по крайней мере у нас была одна маленькая победа на нашей стороне.

Зная, что этот вопрос существовал где-то в комбинации программного обеспечения и самого диска, мы воспроизвели идентичное программный стек с наших серверов с различными приводами. А также? Ничего, коррупция снова появился. Так было с полной уверенностью предположить, что проблема была не в программный стек и был больше драйва связаны между собой. Но что заставляет блок изменять содержание без остальной части системы замечая? Это было бы много гнилых битов в последовательности ...

Дни начали становиться рутинной - долго душ, завтрак, восстанавливая поврежденные серверы, обед, восстанавливая поврежденные серверы, обед, восстанавливая поврежденные серверы. До один длинный утренний душ полна мышления ", насколько велика была последовательность?" Как выяснилось, потерянные данные всегда 512 байт, который является одним блоком на диске. Один шаг вперед, блок заканчивается быть полным нулей. Аппаратный ошибка? Или обнуляется блок? Что может обнулить блок? TRIM ! Обрезка инструктирует привод SSD нулю пустые блоки. Но это блок не были пусты и другие виды накопителей, не были затронуты. Мы дали ему попробовать и отключил TRIM во всех наших серверов. Это могло бы объяснить все!

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

Покопавшись в исходном коде ядра ищет код, связанные отделки, мы пришли к декоративной черный список . Это черный список настраивает определенное поведение для некоторых дисков SSD и идентифицирует диски на основе регулярных выражений в названии модели. Наши рабочие накопителей были явно разрешены полноценное функционирование в TRIM, но некоторые из накопителей нашего пострадавших производителя были ограничены. Наши пострадавших диски не соответствует ни одному шаблону, чтобы они были неявно разрешен на полную мощность.

Полная картина

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

В результате, мы сообщили нашим сервер провайдера о пострадавших накопителей и они сообщили производителю. Наши новые развертывание были переведены на разных дисках SSD, и мы не рекомендуем никому использовать любой SSD, что так или иначе упоминается в плохом состоянии по ядру Linux. Также будьте осторожны, даже когда вы не позволяют TRIM явно, по крайней мере с Ubuntu 14.04 явный FSTRIM работает в хрон раз в неделю во всех разделах - замораживание системы хранения в течение нескольких секунд будет вашим маленькая проблема.

TL; DR

Сломанные накопители: (Диски, на которых мы обнаружили проблему)

  • SAMSUNG MZ7WD480HCGM-00003
  • SAMSUNG MZ7GE480HMHP-00003
  • SAMSUNG MZ7GE240HMGR-00003
  • Samsung SSD 840 серии PRO
    недавно в черный список для 8-й серии черный список
  • Samsung SSD 850 PRO 512GB
    недавно в черный список, как 850 Pro, а затем в 8-й серии черный список

Рабочая накопителей: (Диски, на которых мы не обнаружили проблему)

  • Intel S3500
  • Intel S3700
  • Intel S3710

Не нашли ответ на свой вопрос? Возможно, вы найдете решение проблемы на нашем канале в Youtube! Здесь мы собрали небольшие, но эффективные инструкции. Смотрите и подписывайтесь на наш youtube-канал!

Смотреть на Youtube