Dormestmass: Админ — это состояние души

FreeBSD: Журналирование UFS в 7-ке

В FreeBSD 7.0 появилась штатная возможность создания журналируемых файловых систем. Поскольку у меня живет тестовая машинка с данной ОС, то ради интереса решил попробовать включить журналирование, ну и замерять каким-нить бенчмарком производительность ФС до и после.

Вернее сказать как, это были начальные намеряния. До бенчмарка у меня в этот раз руки не дошли.

Дело было так :)

Для начала включил загрузку модуля geom_journal.ko через /boot/loader.conf.

Дальше, загрузившись в single mode, сконфигурировал журналирование для своих ФС.

Для управления журналированием предназначена утилита gjournal. Рекомендуеться создавать журналы для новых ФС, но согласно руководства (man 8 gjournal) можно сделать журналируемыми и существующие файловые системы. Только вот при создании журнала следует учесть один момент, о котором явно не сказано в мане.

Для существующих ФС написано, что сделать журнал не всегда получиться —gjournal создаст журнал только если последний сектор файловой системы не используется. Да и при попытке создать label для существующей ФС gjournal ругаеться, требуя использовать ключ -f на свой страх и риск.

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

     Configure journaling on an existing file system, but only if gjournal
     allows this (i.e., if the last sector is not already used by the file
     system):
           umount /dev/da0s1d
           gjournal label da0s1d da0s1e && \
               tunefs -J enable -n disable && \
               mount -o async /dev/da0s1d.journal /mnt || \
               mount /dev/da0s1d /mnt
Обратите внимание на выделенную команду, она с ошибкой!

Предупреждают нас только о том, что нужен последний сектор. А зря. Дело в том, что если не указать раздел для журнала (а помниться мне, при конвертировании ext2 в ext3 такой херни не надо было делать), то gjournal просто тупо убъет последний гигабайт раздела (размер журнала по умолчанию 1Gb). Более того, системе не будет известно, что раздел ФС уменьшился на 1Гиг + последний сектор… И при попытке обращения к этой части ФС будет вылазить ошибка:

g_vfs_done():ad0s1d.journal[READ(offset=578174976, length=16384)]error = 5

На которую я очень успешно напоролся :( . Думаю, что и при использовании отдельного раздела под журнал, остаеться задействованным последний сектор раздела данных, о котором файловой системе не известно, что он используется. При попытке записи в этот сектор у нас опять вылезет ошибка. Так что, ситуацию с созданием журналами для существующих фС очень точно характеризует встреченная мною на одном из форумов фраза: «SO, there is no proper way to made existing fs journaled.»

Вообщем, пока восстановил систему из бекапа. К сожалению, нету больше времени ковыряться дальше, хотя делов там немного —переразбить с нуля диск да восстановить на него всё из бекапа.

И сделал для себя два вывода.

Во-первых, для разделов в несколько гиг создание журнала не имеет абсолютно никакого смысла, учитывая его размер.

Во-вторых, прирост производительности таки должен быть, хотя бы только из-за того, что ФС будет монтироваться в асинхронном режиме.

Популярность: 4%

P.S.

Портал История любви предлагает свадебный тамада: лидирующее проведенее
"Склад Сервис" - ворота скоростные
  • Зачет

Вы можете следить за обсуждением с помощью RSS 2.0 ленты.