softupdates 自体は良くできている。次回の起動時に、簡単にバックグラウンドで fsck を走らせられるかを調べ、必要な時のみに動く。しかし、panic の原因を探っているときは、ほぼ毎回 fsck が必要になり、src や obj に ports もあるので、時間が掛かる。全ての fsck が終わるのを待てないのと共に、ディスクの余計な負荷が気に入らない。
FreeBSD 7.0 から入った新しい GEOM の中に、gjournal がある。これを使うと、fsck が必要無くなるようだ。今回は man gjournal
で予習をする。
まずは、gjournal の概要だ。現在のところ、サポートされているのは UFS だけだ。また、mount 時は softupdates を無効にし、async を使うことを推奨している。async でも安全とある。gjornal はブロックレベルでのジャーナリングで、メタデータとユーザデータを記録するとの事だ。gjournal を gmirror や gstripe の上に作成した場合は、gjournal が整合性を保つので、これらの自動同期は無効にしてもよいそうだ。後、気に留めておくのは、sync
の後に、gjournal sync
が必要な事ぐらいか。
次は gjournal デバイスの作り方だ。一つのデバイスにファイルシステムとジャーナルを置く方法がある。そして、二つのデバイスに、別々に置く方法がある。違うデバイスを用意できたら、別にした方が性能的にはもちろんいい。一つのデバイスに両方作る場合には、gjournal label
に -j size
を渡して、ジャーナル用の領域を確保する必要がある。残念ながら、-j
の単位なのかは書いていない。同一デバイス上に二つのパーティションを作って、データとジャーナルを別にするのと、一つのパーティション上にデータとジャーナルを置いた時の性能の差は man からでは定かではない。
そして、デバイスの作り方だ。新規に作る方法と、既存の UFS にジャーナルを追加する方法がある。既存の UFS にジャーナルを追加するには、必ずジャーナルデバイスを加える必要がある。そして、最後のセクタが未使用である事も条件だ。最後のセクタは上書きできるが、止めておいた方が良いだろう。UFS に影響を与えずに連続した領域を確保するのが無理なのと思う。もちろん、新規に作る場合は自由に構成できる。
次回。
セコメントをする