Journaling UFS with gjournal.

Journaling UFS with gjournal.

7.0 から標準で利用できる gjournal。有効にするには kldload geom_journal と tunefs -J enable [対象デバイス] と思われる。
…と思ったが tunefs -J enable [対象デバイス] しただけだと

WARNING: /var2: GJOURNAL flag on fs but no gjournal provider below

と言われる。

そこで gjournal label [対象デバイス] すると、

gjournal: File system exists on /dev/ad0s1e and this operation would destroy it.
Use -f if you really want to do it.

ということで、soft updates とは異なりファイルシステムの中身を維持したまま有効にすることは出来ない。
gjournal label [対象デバイス] してから newfs で新しくファイルシステムを作るという手順になる。

小さいファイルを並列に扱うのが得意らしい。mail spool や Maildir置き場としてよさそうな感じ。

man gjournal で -s オプションの説明は以下のようになっている。
既定ログ領域は1GBで、数ギガ程度の領域の場合は使うべきでないとのこと。個人的予想では10GB以上が適切と思われる。

-s jsize Specifies size of the journal if only one provider is
used for both data and journal. The default is one
gigabyte. Size should be chosen based on provider’s
load, and not on its size.
It is not recommended to use gjournal for small file systems (e.g.: only few gigabytes big).

さらに man gjournal を見ると、async でマウントするようになっている。
パフォーマンスを出すには非同期オプションをつける必要がある。

(1/24 追記) gjournal を用いて fsck を回避: uyota 匠の一手
に man gjournal のポイントがもう少し説明されている。

  • 上記の通りマウント時 async 有効
  • softupdates を無効
  • sync コマンドは従来の期待した動作をしない。本当に同期したければ gjournal sync も使え
  • gmirror の同期処理もサボれる
  • journal 用デバイスとして別デバイスを指定できる。この場合既存ファイルシステムの移行が可能。とはいえその場合でも最後のセクタを metadata 領域として利用するので、必ずできるというわけではない

既存ファイルシステムの移行についてはサンプルが書いてあった。何でこれ見落としたんだろ。

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

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。