Обновление OpenZFS 2.1.14 и 2.2.2 с устранением ошибки, приводящей к повреждению файлов

Автор Сообщение
news_bot ®

Стаж: 6 лет 3 месяца
Сообщений: 27286

Создавать темы news_bot ® написал(а)
01-Дек-2023 11:54

Сформированы корректирующие выпуски проекта OpenZFS 2.1.14 и 2.2.2, развивающего реализацию файловой системы ZFS для Linux и FreeBSD. В обновлениях устранена проблема в коде проверки согласованности кэша dnode, приводящая к повреждению данных в файлах, содержавших пустые области, при их копировании после внесения изменений.
Изначально проблему попытались устранить в версии 2.2.1, но исправление оказалось неэффективно. Ошибка долгое время оставалась незамеченной и начала проявляться после изменений, внесённых в утилиту "cp" в пакете coreutils 9.x. Предполагается, что в Red Hat Enterprise Linux и дистрибутивах на его основе проблема не проявляется, так как в RHEL 9 используется пакет coreutils 8.x с иной логикой работы утилиты "cp".
Проблема проявляется при использовании утилит копирования файлов, умеющих определять и оптимизировать пустые области в файлах. Повреждение может возникнуть в нагруженных ФС при копировании файла, если операция выполнена почти сразу после изменения и часть данных остаётся только в dirty-кэше и ещё не сброшена на диск.
Для оптимизации работы с пустыми областями в файлах, OpenZFS, начиная с выпуска 0.6.2, поддерживает операции
SEEK_HOLE и SEEK_DATA, позволяющие пропустить пустую область файла при чтении с диска. Распознавание пустых областей и сохранение информации о них производится только после сброса на диск всех остающихся в кэше данных, связанных с файлом. Для инициирования сброса в OpenZFS имеется проверка, которая оценивает присутствие в кэше несохранённых данных и производит принудительный сброс информации на диск, необходимый для использования SEEK_HOLE и SEEK_DATA.
К сожалению проверка оказалась неполной и при некотором стечении обстоятельств данные о состоянии сброса определялось не верно и на диске находилась старая информация о содержимом файла, если запрос попадал в небольшое временное окно между двумя операциями сброса данных из кэша. Операции чтения, оптимизирующие загрузку пустых областей, в этот момент могли пропустить чтение части данных, посчитав их пустыми, в то время как работающая с файлом программа до этого могла внести в пустые области изменения. В результате применение утилиты "cp" могло привести к созданию копии, содержащей пустые области там, где их не было в оригинальном файле.
===========
Источник:
OpenNet.RU
===========

Похожие новости: Теги для поиска: #_openzfs, #_zfs
Профиль  ЛС 
Показать сообщения:     

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете прикреплять файлы к сообщениям
Вы не можете скачивать файлы

Текущее время: 18-Май 19:12
Часовой пояс: UTC + 5