gjournal

gjournal - управление журналируемыми устройствами

gjournal label [-cfhv] [-s размер_журнала] поставщик_данных  [ поставщик_журнала ]
gjournal stop [-fv] имя
gjournal sync [-v]
gjournal clear [-v] поставщик
gjournal dump поставщик
gjournal list
gjournal status
gjournal load
gjournal unload

Утилита gjournal используется для конфигурации журнала на заданном поставщике GEOM. GEOM - модульный механизм преобразования запросов дискового ввода-вывода в операционных системах FreeBSD. Журнал и данные могут храниться как на одном поставщике, так и на двух разных. Журналирование осуществляется на уровне блоков, а не файловой системы. Это значит, что протоколируется абсолютно всё, например, для файловых систем, gjournal журналирует данные, и метаданные. GEOM-класс gjournal способен взаимодействовать с файловыми системами, что позволяет использовать gjournal для журналирования файловых систем и поддержания их в целостном состоянии. В настоящий момент поддерживается только файловая система UFS.

Чтобы сконфигурировать журналирование на файловой системе UFS посредством gjournal, необходимо вначале создать GEOM-поставщика gjournal, используя утилиту gjournal, а затем запустить newfs(8) или tunefs(8) с ключом -J, который заставляет UFS взаимодействовать с GEOM-поставщиком gjournal. Существуют важные отличия в работе UFS с журналом и без него. Наиболее существенно то, что системные вызовы sync(2) и fsync(2) работают не так, как ожидается. Чтобы гарантировать, что данные были сохранены на поставщике данных, после системного вызова sync(2) должна быть вызвана команда gjournal sync. Для оптимизации производительности при использовании gjournal следует отключать soft-updates. Также безопасна и рекомендуется к использованию опция async команды mount(8).

Когда gjournal сконфигурирован поверх поставщиков gmirror(8) или graid3(8), они также поддерживаются в целостном состоянии, поэтому автоматическая синхронизация после сбоя питания или отказов системы может быть на этих поставщиках отключена.

Утилита gjournal хранит всю необходимую информацию в метаданных на диске, в последнем секторе поставщика. Это может стать проблемой при преобразовании существующей файловой системы для использования с gjournal.

Первый аргумент gjournal указывает действие, которое будет выполнено:

label Конфигурирует gjournal на указанном поставщике (поставщиках). Если указан только один поставщик, данные будут храниться на одном поставщике вместе с журналом. Если указаны два поставщика, первый будет использован для данных, а второй -- для журнала.

Дополнительные опции:

-c
Защищать записи журнала контрольной суммой.
-f
Может быть использована для преобразования существующей файловой системы для использования с gjournal, но только в том случае, если журнал будет сконфигурирован на отдельном поставщике, и последний сектор поставщика данных не используется файловой системой. Если утилита gjournal обнаружит, что последний сектор занят, она откажется от записи в него данных и вернёт ошибку. Подобное поведение можно обойти, используя флаг -f, который заставит gjournal перезаписать последний сектор.
-h
Зафиксировать имена поставщиков в метаданных.
-s размер_журнала
Задаёт размер журнала в случае, если один и тот же поставщик используется для хранения как данных, так и журнала. По умолчанию один гигабайт. Размер должен выбираться исходя из загруженности поставщика, а не его размера. Не рекомендуется использовать gjournal для небольших файловых систем (например, размером всего в несколько гигабайт).
clear
Очищает метаданные на указанных поставщиках.
stop
Останавливает указанного поставщика.
-f
Останавливает данного поставщика, даже если он открыт.
sync
Вызывает переключение журнала и принудительную отправку данных к поставщику данных.
dump
Выводит метаданные, хранящиеся на указанных поставщиках.
list
Смотрите geom(8).
status
Смотрите geom(8).
load
Смотрите geom(8).
unload
Смотрите geom(8).
-v
Более подробный вывод.

СТАТУС ЗАВЕРШЕНИЯ
Утилита gjournal возвращает 0 в случае успешного завершения и 1 в случае возникновения ошибки.

ПРИМЕРЫ
Создать основанную на gjournal файловую систему UFS и смонтировать её:

gjournal load
gjournal label da0
newfs -J /dev/da0.journal
mount -o async /dev/da0.journal /mnt

Сконфигурировать журналирование на существующей файловой системе, но только если это позволяет gjournal, т.е. если последний сектор ещё не использован файловой системой:

umount /dev/da0s1d
gjournal label da0s1d da0s1e && \
tunefs -J enable -n disable && \
mount -o async /dev/da0s1d.journal /mnt || \
mount /dev/da0s1d /mnt

СМОТРИ ТАКЖЕ
geom(4), geom(8), mount(8), newfs(8), tunefs(8), umount(8)

ИСТОРИЯ
Утилита gjournal появилась во FreeBSD 7.0.

ПРОБЛЕМЫ
Отсутствует документация к sysctl kern.geom.journal.*.