Введение

Подход к поддержанию файловой системы

Мягкое обновление — это подход к обеспечению целостности метаданных файловой системы в случае сбоя или отключения питания. Мягкое обновление работает за счет отслеживания и соблюдения зависимостей между обновлениями метаданных файловой системы. Мягкое обновление является альтернативой более распространенному подходу, основанному на журналировании файловой системы.

Способ работы

Мягкие обновления допускают только асинхронные записи метаданных, которые не приводят к несогласованности файловой системы на диске, или единственной несогласованностью является утечка дискового пространства (пространство, помеченное как выделенное, хотя оно не используется ни одним файлом). Это позволяет избежать необходимости в упорядоченных синхронных записях метаданных, временно "откатывая" любую часть блока метаданных, которая зависит от другого блока, который потенциально не был сброшен на диск или был частично откачен, при его записи. По сути, блоки могут быть сброшены на диск в любой момент времени, и код мягких обновлений всегда будет предоставлять диску согласованную версию метаданных (при условии, что он знает, какие блоки были физически сброшены). Восстановление затем сводится к простому фоновому сканированию файловой системы при следующем монтировании для сборки мусора и освобождения неиспользуемого выделенного пространства. Это также позволяет файловой системе выборочно сбрасывать на диск определенные файлы, не сбрасывая все блоки метаданных или все записи. Данные, которые удалены из графа зависимостей метаданных до начала записи на диск, не требуют записи на диск вообще. Например, создание файла, его кратковременное использование и последующее удаление могут не вызывать никакой активности диска. Мягкие обновления требуют периодического сброса метаданных в энергонезависимую память.

Реализация

FreeBSD поддерживает мягкие обновления для файловой системы UFS, и они включены по умолчанию при установке на протяжении многих лет. Мягкие обновления включаются или отключаются вручную при создании файловой системы с помощью опции команды newfs. Их можно отключить или включить в любое время после этого с помощью опции команды tunefs. В FreeBSD 9.0 к мягким обновлениям было добавлено журналирование для устранения необходимости в фоновой проверке файловой системы (fsck) после сбоя и очистке неиспользуемых блоков. Однако, включение журналирования на файловой системе с включенными мягкими обновлениями отключает возможность создания снимков файловой системы. Это может привести к проблемам при создании дампов файловых систем с опцией L, так как снимки используются для обеспечения целостности файловой системы во время создания дампа. OpenBSD поддерживала мягкие обновления для файловой системы FFS до выпуска 7.4 (2023), после чего эта функция была отключена. NetBSD поддерживала мягкие обновления до выпуска 6.0 (2012), после чего они были признаны устаревшими в пользу журналирования WAPBL.

Сравнение с файловыми системами журналов

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