Недавно о них объявили выпуск корректирующих версий OpenZFS 2.1.14 и 2.2.2, в котором команда разработчиков OpenZFS решить задачу в коде проверки целостности кэша что приводит к повреждению данных в файлах которые содержат пустые области при копировании после внесения изменений.
И одного запуска было мало, но Пришлось провести два новых запуска, которые как таковые решали ту же проблему.. Со своей стороны, OpenZFS 2.2.2 предназначалась как для FreeBSD 14, так и для нескольких дистрибутивов Linux, включая Ubuntu 23.10, тогда как версия OpenZFS применяется к FreeBSD начиная с версии 12.
Стоит отметить, что В выпуске OpenZFS 2.2.0 выявлена проблема с коррупцией с новой функцией клонирования блоков, которая заменяет данные нулями без предупреждения, без обнаружения и без каких-либо указаний на что-то неправильное, пока вы не попытаетесь прочитать данные.
Сначала он думал, что проблема была в OpenZFS 2.2.0, но это не так., поскольку, как уже упоминалось, этот выпуск выявили основную ошибку, которая существовала в течение многих лет и просто сделало существующую проблему гораздо более вероятной.
Изначально проблему пытались исправить в версии 2.2.1, но исправление оказалось неэффективным.. Ошибка долгое время оставалась незамеченной и начала проявляться после внесения изменений в утилиту cp в пакете coreutils 9.x. Проблема не должна возникать в Red Hat Enterprise Linux и дистрибутивах на его основе, поскольку RHEL 9 использует пакет coreutils 8.x с другой логикой для утилиты «cp».
Проблема возникает при использовании утилит копирования файлов. который может идентифицировать и оптимизировать пустые области в файлах. При копировании файла может произойти повреждение загруженных файловых систем. если операция выполняется практически сразу после изменения и часть данных остается только в грязном кеше и еще не сброшена на диск.
Для оптимизации обработки пустых областей в файлах OpenZFS, начиная с версии 0.6.2, поддерживает операции SEEK_HOLE и SEEK_DATA, которые позволяют пропускать пустую область файла при его чтении с диска. Пустые области распознаются и информация о них сохраняется только после того, как все оставшиеся данные, связанные с файлом в кеше, будут сброшены на диск. Чтобы инициировать сброс, OpenZFS имеет проверку, которая оценивает наличие некэшированных данных и принудительно выполняет сброс на диск, необходимый для использования SEEK_HOLE и SEEK_DATA.
к сожалению, проверка была неполной и, В некоторых случаях данные о состоянии перезагрузки определялись неправильно и старая информация о содержимом файла находилась на диске, если запрос происходил в небольшой промежуток времени между операциями очистки кэша.
Операции чтения, оптимизирующие загрузку пустых областей, могли в этот момент пропустить чтение части данных, считая ее пустой, в то время как программа, работающая с файлом, могла предварительно внести изменения в пустые области. В результате использование утилиты «cp» может создать копию, содержащую пустые области там, где их не было в исходном файле.
В ходе проведенного расследования выяснилось, что ошибка также была подтверждена в Illumos, ответвлении OpenSolaris с открытым исходным кодом, которое продолжало развиваться с тех пор, как Oracle закрыла проект с открытым исходным кодом в 2010 году.
В дополнение к исправлению Повреждение данных, выпуск версии Также включает в себя другие исправления ошибок и улучшения., среди которых решение ZFS выделяется тем, что снимки (zfs/snapshot) видны в NFS во FreeBSD, решены проблемы совместимости с Linux 6.6, а также исправлены ошибки компиляции оболочки и запуска во FreeBSD.
В конце концов если вам интересно узнать об этом больше, вы можете проверить подробности в по следующей ссылке.