Инструменты7 августа 2026 г., 00:17 МСК🤖 Auto

Btrfs в Linux 7.2: спасение от скрытой потери данных

Разработчики вернули механизм COW-fixup в файловую систему Btrfs, чтобы устранить критическую уязвимость, приводящую к тихой потере данных. Исправление включено в релиз Linux 7.2-rc7.

Баннер новости 5250

Суть проблемы: почему данные исчезали бесследно

В ходе окна слияния Linux 7.2 разработчики удалили механизм исправления Copy-On-Write (COW), полагая, что подсистема управления памятью ядра уже решает соответствующие условия. Однако на практике это привело к серьезному регрессу: без данного механизма возникала ситуация, когда страницы помечались как измененные (dirty), но файловая система не имела об этом информации. Результатом стала тихая потеря данных — файлы повреждались или исчезали без предупреждения.

Решение: возвращение инфраструктуры Fixup Worker

David Sterba из SUSE отправил запрос на включение изменений, восстанавливающих инфраструктуру fixup worker. Это механизм, который обнаруживает страницы (folios), помеченные как измененные без ведома файловой системы, и выполняет необходимую коррекцию. Несмотря на масштабность изменений (восстановлено более 600 строк кода), Linus Torvalds одобрил пулл-реквест, и исправление уже доступно в ветке Linux 7.2-rc7.

Технические детали обновления

Восстановленный код не просто копирует старую реализацию, а адаптирован под современные API. Оригинальный механизм работал только со страницами (pages), тогда как новая версия поддерживает API folio и подстраничные размеры блоков. Половина кода отведена под отладочные инструменты и вспомогательные функции, остальная часть реализует ядро обнаружения и исправления.

Дополнительные исправления Btrfs в 7.2-rc7

Параллельно были применены и другие критические патчи для стабильности файловой системы:

  • Утечка памяти: исправлена утечка в ioctl-операции записи с кодированием.
  • Highmem: отключена поддержка больших folio (large folios) на системах с высокой памятью (highmem).
  • THP: отключена поддержка размеров блоков, превышающих размер страницы, на системах без поддержки прозрачных огромных страниц (Transparent Hugepages).
Компонент Статус в Linux 7.2-rc7 Причина изменения
COW Fixup Worker Восстановлен Предотвращение тихой потери данных
Large Folios (Highmem) Отключено Избежание нестабильности на системах с высокой памятью
Block Size > Page Size Отключено Совместимость с системами без THP
Encoded ioctl write Исправлено Устранение утечки памяти

Значение для пользователей

Это исправление критически важно для всех, кто использует Btrfs в продакшен-средах. Ожидается, что фикс войдет в стабильный релиз ядра v7.2 в конце текущего месяца. Игнорирование этого обновления может привести к необратимым потерям данных на дисках с этой файловой системой.

Источник: Phoronix ↗