Руководство по администрированию файловых систем ZFS Solaris

Транзакционная семантика

ZFS – это транзакционная файловая система. Это означает, что ее состояние на диске всегда является непротиворечивым. Традиционные файловые системы перезаписывают данные на физическом носителе. Поэтому, например, при снижении производительности между временем выделения блока данных и его присвоением каталогу файловая система остается в противоречивом состоянии. Исторически эта проблема решалась с помощью команды fsck, которая использовалась для просмотра и проверки состояния файловой системы с попыткой устранения всех противоречий. Эта задача была особенно сложной для администраторов и всегда вызывала сопутствующие затруднения. Позже в файловые системы был введен принцип журналирования. В процессе журналирования операции регистрируются в отдельном журнале, который при необходимости может быть безопасно воспроизведен в случае полного отказа системы. Этот процесс влечет за собой дополнительные расходы, поскольку запись данных выполняется дважды и часто ведет к появлению новых проблем, например когда не удается корректно воспроизвести журнал.

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