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

Обсуждение новостей, соответствующих тематике форума

Модератор: Модераторы разделов

Аватара пользователя
rssbot
Бот
Сообщения: 6002
ОС: gnu/linux

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

Сообщение rssbot »

Сформированы корректирующие выпуски проекта 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" могло привести к созданию копии, содержащей пустые области там, где их не было в оригинальном файле.










Источник: https://www.opennet.ru/opennews/art.shtml?num=60212
(opennet.ru, основная лента)
Последний раз редактировалось rssbot 03.12.2023 15:41, всего редактировалось 3 раза.
Причина: Updated upstream
Спасибо сказали: