С выходом FreeBSD 7.0 был реализован долгожданный механизм ведения журналов для файловых систем. Сама реализация этого механизма осуществляется средствами системы GEOM, а конфигурирование выполняется утилитой gjournal(8).
Что такое журналирование? Журналирование сохраняет протокол транзакций файловой системы, то есть: изменения, составляющие логически завершенную операцию записи, сперва вносятся в журнал, а модификация метаданных и данных самого файла выполняется позже. В дальнейшем журнал может быть задействован для повторного выполнения транзакций на файловой системе с целью предотвращения нарушения целостности файловой системы.
Журналирование - это еще одним механизм предотвращения утери данных и нарушения целостности файловой системы. В отличие от механизма Soft Updates, который отслеживает и периодически сохраняет обновления метаданных, и механизма снэпшотов, который создает образ файловой системы, сам журнал хранится в специально отведенном для этой задачи пространстве диска, и, в некоторых случаях, может содержаться целиком на отдельном диске.
В отличие от других реализаций журналирования файловых систем, метод gjournal
работает на блочном уровне, он не встроен в файловую систему; это лишь надстройка над системой GEOM.
Чтобы включить поддержку gjournal
, в файле конфигурации ядра FreeBSD должна присутствовать следующая опция (включено по умолчанию для FreeBSD 7.0 и более поздних версий систем):
Журналируемым устройствам, монтируемым во время загрузки системы, также потребуется модуль ядра geom_journal.ko. Внесите следующую запись в файл /boot/loader.conf:
В качестве альтернативы, функции вышеупомянутого модуля можно встроить в специализированное ядро. Для этого добавьте следующую опцию в файл конфигурации ядра:
Для создания журнала на новой файловой системе выполните следующие шаги (здесь и далее подразумевается, что da4 есть новый SCSI диск):
# gjournal load
# gjournal label /dev/da4
На этом этапе в каталоге /dev должны присутствовать файлы устройств /dev/da4 и /dev/da4.journal. Теперь необходимо создать файловую систему:
# newfs -O 2 -J /dev/da4.journal
Предыдущая команда создаст файловую систему UFS2 на журналируемом устройстве.
Смонтируйте устройство в требуемый каталог файловой системы:
# mount /dev/da4.journal /mnt
| В случае наличия нескольких слайсов, журнал создается для каждого из них. Например, если есть два слайса, и они называются ad4s1 и ad4s2, то утилитой gjournal создаются файлы устройств ad4s1.journal и ad4s2.journal. |
Для увеличения производительности может потребоваться хранение журнала на отдельном диске. В таких случаях необходимо указать имя поставщика журнала или устройства хранения после имени устройства, на котором планируется включение журналирования. Журналирование также может быть активировано утилитой tunefs
на действующих файловых системах; однако, всегда создавайте резервную копию перед попытками изменить настройки файловой системы. В большинстве случаев, выполнение команды gjournal
завершится ошибкой, если создание журнала невозможно, в то время как некорректное использование команды tunefs
не защитит против потери данных.