Обновить

История поиска бага в ядре Linux длиной в год, или нежданные нули из XFS'а

Уровень сложностиСложный
Время на прочтение11 мин
Охват и читатели18K
Всего голосов 59: ↑59 и ↓0+70
Комментарии22

Комментарии 22

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

Вроде как XFS для СУБД избыточна, Ext3/4 достаточно.

Там чем проще ФС, тем лучше, ну разве что журналирование метаданных полезно.

На больших размерах БД очень даже не избыточна, а весьма полезна. Большие файлы индексов, wal файлы и сами таблицы скажут вам спасибо. Особенно при частых UPDATE/DELETE.

Следом идут блоки до 64 КБ, чтобы удобно работать с восьмикилобайтными страницами постгреса. И не забываем про многопоточку и раздельную работу с журналами метаданных.

Так что XFS это дефолтная опция в энтерпрайзах.

Большие файлы индексов, wal файлы и сами таблицы скажут вам спасибо

большие по размеру или большое число файлов? размер файлов wal - 16Мб, максимум 1Гб. Размер файлов - 1Гб. Да и с большими файлами сложно сделать сотни тысяч секций в таблице, а если секций мало, то не примут в энтерпрайз :)

у ext3/4 то же есть аж пепперы , где не все так радужно было. Наверно можно так же , что то свежие найти

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

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

Если не ошибаюсь, у Oracle Linux применена куча дополнительных патчей на ядро (UEK ядра linux) именно для XFS и даже если там предполагается что ядро с багом, то не факт что он есть на самом деле именно в Oracle Linux. То же касается и RedHat.

Все условия необходимые для воспроизведения бага подробно описаны.

Исходники софта для проверки тоже.

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

Любопытно, что подсистема ядра, в которой описываемый баг был обнаружен, как раз Ораклом разработана.

XFS разработал Silicon Graphics, к Oracle она имеет отношение только как дефолтная ФС используемая в Oracle Linux.

Я думаю, имелось в виду init on free и/или фолианты. Могу ошибаться.

Как минимум, и коммит, породивший проблему, и коммит, починивший проблему, сделаны одним и тем же человеком - разработчиком из Oracle - с разницей в два года.

Конечно, может быть эти его изменения были протолкнуты в основное ядро, и при этом в самом Oracle каким-то образом проблемы не приносили. Но, согласитесь, это будет неожиданно и странно.

А, ниже уже utoplenick сказал, каким образом: они брали версию до и после этой проблемы. Хорошая диверсия, однако.

Смотрим версию ядра красной шапки:

9- 5.14, все что ниже соответственно ниже, 10 - 6.12, соответственно все что на нём основано не подходит под условия, расходимся.

Именно! Этот факт мы тоже заметили и долго улыбались, что красная шапка что-то явно знает что не знаю другие, включая российские компании распространяющие Linux.

RH включает "потенциально баговый" патч в 5.14.0-130.el9, а потенциальный фикс в 5.14.0-611.16.1.el9_7 пока не включила.
С другой стороны, в RH init_on_free по умолчанию выключен - но что-то мне подсказывает, что не XFS единым...

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

Смотрим версию ядра красной шапки:

9- 5.14, все что ниже соответственно ниже, 10 - 6.12

Эти номера версий имеют мало общего с реальным кодом, и "5.14" включает в себя чуть ли не половину "бэкпортированного" 6.12. В этих франкенядрах без исходников делать особенно нечего.

Сейчас безопасники меня съедят, но init_on_free и init_on_alloc - зло!
И перф кушают, и такие приколюхи дают :)

Воистину!

"Приколюхи" вылезают совсем по другой причине.

Будто страшную сказку на ночь прочитал.

Главное не бежать обновлять прод. Деплой в последнюю пятницу года может оказаться роковым :)

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Информация

Сайт
www.postgrespro.ru
Дата регистрации
Дата основания
Численность
501–1 000 человек
Местоположение
Россия
Представитель
Иван Панченко