Причиной потери данных в накопителях Samsung оказалась ошибка в Linux

Техника
мобильная версия
, Текст: Сергей Попсулин
SSD-накопители Samsung оказались не виноваты в потере данных на серверах с операционной системой Linux. Ошибка, как выяснил корейский вендор, на самом деле находится в открытом ядре.

Реабилитация Samsung

Причиной потери данных на машинах с Linux оказалась ошибка в ядре операционной системы — а именно, в неправильном взаимодействии между драйвером RAID и драйвером SCSI/ATA, объяснили в компании Samsung Electronics, которую изначально посчитали виновной в возникновении проблемы.

В июне 2015 г. калифорнийская Algoli сообщила, что обнаружила проблему в SSD-накопителях Samsung SM843TN и PM853T, моделях серии Samsung SSD 840 Pro и модели серии Samsung SSD 850 Pro емкостью 512 ГБ.

Обнаружение проблемы

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

В конечном счете специалисты Algoli выяснили, что сбои происходят на серверах с определенной конфигурацией аппаратного обеспечения — в частности, оснащенных SSD-накопителями одного и того же производителя — Samsung. Виновной в замещении актуальных данных на нули была признана команда TRIM, которая позволяет операционной системе уведомить SSD-накопитель о том, какие блоки уже не содержат информации и их можно считать пустыми.


SSD-накопители Samsung оказались ни при чем

Отрицание вины

В июле 2015 г. инженеры компании Samsung сообщили, что в этой ситуации нет вины компании, и что проблема находится в ядре Linux. Тогда же вендор пообещал выпустить патч для ядра, устраняющий проблему.

Суть проблемы

В компании пояснили суть проблемы. Дело в том, что когда драйвер RAID в ядре Linux получает задачу выполнить последовательность операций чтения или записи, он создает отдельные буферы в памяти для каждой из операций. При выполнении же команды TRIM драйвером SCSI/ATA используется только один буфер.

В теории это не должно вызывать проблем, но на практике при некотором стечении обстоятельств возникает ошибка «race condition» («состояние гонки») — когда конечное значение начинает зависеть от последовательности неконтролируемых событий. При появлении очереди команд TRIM, первая команда выполняется правильно, но одна из последующих может случайно очистить буфер до того, как будет завершена предыдущая операция. Именно это и привело к появлению нулей вместо данных на SSD-накопителях в дата-центре компании Algoli.

Патч

Samsung передала патч сообществу Linux и, пока он не будет включен в очередную сборку, рекомендовала пользователям с линейной, RAID 0 или RAID 10 конфигурациями, использующими SSD-накопители с интерфейсом SATA, полностью отключить работу TRIM. Конфигурации с RAID 1 проблема не затрагивает.

Совместное расследование

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