GJOURNAL(8) |
FreeBSD System Manager's Manual |
GJOURNAL(8) |
名称
gjournal —
ジャーナルデバイスのためのユーティリティを制御する
書式
gjournal |
label [ -cfhv][ -s jsize] dataprov [ jprov] |
gjournal |
stop [ -fv] name ... |
gjournal |
clear [ -v] prov ... |
解説
gjournal ユーティリティは、与えられた GEOM プロバイダでジャーナル設定のために使用されます。ジャーナルとデータは、同じプロバイダ、または、2 つの別のプロバイダに格納されます。これは、例えば、ファイルシステムのために、データとメタデータの両方をジャーナルする、ログ登録で得られたすべてを意味するファイルシステムレベルのジャーナリングでなく、ブロックレベルのジャーナリングです。
gjournal GEOM クラスは、ファイルシステムのジャーナリングのために
gjournal の使用が、一貫性のある状態でファイルシステムを保持することができる、ファイルシステムと talk する (話す) ことができる現時点で、UFS ファイルシステムだけがサポートされています。
gjournal を使用して UFS ファイルシステムでジャーナリングを設定するためには、最初に、 gjournal ユーティリティを使用して gjournal プロバイダを作成して、次に、下記の gjournal プロバイダと協調するように UFS に指示する -J フラグをつけて、その上で newfs(8) または tunefs(8) を実行するべきです。ジャーナル化された UFS がどのように動作するかに重要な違いがあります。最も重要なことは、 sync(2) と fsync(2) システムコールがもはや予想されるように動作しないということです。データがデータプロバイダで格納されることを保証するためには、 sync(2) 呼び出しの後に gjournal sync コマンドを使用するべきです。考えられる最も良い性能のためには、 gjournal が使用されるとき、ソフトアップデートは、無効にされるべきです。また、 async mount(8) オプションを使用することは、安全でお勧めです。
また、 gjournal が gmirror(8) または graid3(8) プロバイダの先頭で設定されるとき、一貫した状態にそれらを保持します、その結果、停電またはシステムクラッシュで、自動的な同期は、それらのプロバイダで無効にされるかもしれません。
gjournal ユーティリティは、すべての必要な情報を格納するために、プロバイダの最後のセクタに格納されたディスク上のメタデータを使用します。既存のファイルシステムが gjournal を使用するために変換されるとき、これは、問題となるかもしれません。
gjournal への最初の引数は、実行される動作を示します:
-
label
-
与えられた (複数の) プロバイダで
gjournal を設定します。 1 つのプロバイダだけが与えられるなら、データとジャーナルの両方は、同じプロバイダに格納されます。 2 つのプロバイダが与えられるなら、最初のプロバイダは、データプロバイダとして使用され、2 番目のプロバイダは、ジャーナルプロバイダとして使用されます。
追加オプションは、次を含みます:
-
-c
-
チェックサムジャーナルレコード。
-
-f
-
gjournal を使用するために既存のファイルシステムを変換するために使用されますが、ジャーナルが別々のプロバイダで構成される場合だけ、そしてデータプロバイダの最後のセクタが既存のファイルシステムによって使用されない場合だけです。
gjournal が、最後のセクタが使用されていることを検出するなら、それを上書きしてすることを拒絶し、エラーを返します。この振る舞いは、
gjournal が、最後のセクタを強制的に上書きする、
-f フラグを使用することによって、強制されます。
-
-h
-
メタデータの決め打ちされたプロバイダ名。
-
-s
jsize
-
1 つのプロバイダだけがデータとジャーナルの両方に使用されるなら、ジャーナルのサイズを指定します。デフォルトは、1 ギガバイトです。サイズは、そのサイズではなく、プロバイダのロードに基づいて選択されるべきです。推薦されている最小値は、インストールされた物理的なメモリのサイズの 2 倍です。小さいファイルシステムのために
gjournal を使用することは勧められません (例えば、数ギガバイト大)。
-
clear
-
与えられたプロバイダでメタデータをクリアします。
-
stop
-
与えられたプロバイダを停止します。
追加オプションは、次を含みます:
-
-f
-
それがオープンされていても、与えられたプロバイダを停止します。
-
sync
-
ジャーナルスイッチをトリガし、データプロバイダにデータを強制的に送信します。
-
dump
-
与えられたプロバイダに格納されたメタデータをダンプします。
-
list
-
geom(8) を参照してください。
-
status
-
geom(8) を参照してください。
-
load
-
geom(8) を参照してください。
-
unload
-
geom(8) を参照してください。
追加オプションは、次を含みます:
-
-v
-
より冗長にします。
終了ステータス
終了ステータスは、成功すれば、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 da0s1d.journal &&\
mount -o async /dev/da0s1d.journal /mnt || \
mount /dev/da0s1d /mnt
SYSCTL
gjournal は、sysctl レベル kern.geom.journal を追加します。利用可能な文字列と整数の情報は、以下に詳細に記述します。変更可能性のカラムは、適切な特権があるプロセスが値を変更できるかどうかを示しています。
sysctl 名 |
タイプ |
変更可能性 |
debug |
integer |
yes |
switch_time |
integer |
yes |
force_switch |
integer |
yes |
parallel_flushes |
integer |
yes |
accept_immediately |
integer |
yes |
parallel_copies |
integer |
yes |
record_entries |
integer |
yes |
optimize |
integer |
yes |
-
debug
-
0 以外の値を設定すると、デバッグは、様々なレベルで有効にされます。デバッグレベル 1 は、ジャーナルスイッチ、メタデータの更新などに関連する、ジャーナルレベルで動作を記録します。デバッグレベル 2 は、ジャーナルのエントリの数、アクセス要求などに関連する、より高いレベルで動作を記録します。デバッグレベル 3 は、I/O の挿入をジャーナルに含む冗長な詳細を記録します。
-
switch_time
-
新しいジャーナルに切り替わる前に、ジャーナルがオープンしたままにできる、最大の秒数。
-
force_switch
-
ジャーナルが空きジャーナル空間の N% を超えて使用するとき、ジャーナルを強制的に切り替えます。
-
parallel_flushes
-
ジャーナルをデータプロバイダにフラッシュするとき、並列に送られるフラッシュ I/O 要求の数。
-
accept_immediately
-
同時に受け付けられた I/O 要求の最大数。
-
parallel_copies
-
辺列に送られたコピー I/O 要求の数。
-
record_entries
-
単一のジャーナルに許可されたレコードエントリの最大数。
-
optimize
-
オーバラップする I/O を単一の I/O に結合し、ジャーナルのエントリを再順序付けすることによって、ジャーナルのエントリが最適化されるかどうかを制御します。 sysctl を 0 に設定することによって、これを無効にすることができます。
cache
キャッシュレベルのための利用可能な文字列と整数の情報は、以下に詳細に記述します。変更可能性のカラムは、適切な特権があるプロセスが値を変更できるかどうかを示しています。
sysctl 名 |
タイプ |
変更可能性 |
used |
integer |
no |
limit |
integer |
yes |
divisor |
integer |
no |
switch |
integer |
yes |
misses |
integer |
yes |
alloc_failures |
integer |
yes |
-
used
-
現在キャッシュに割り付けられているバイト数。
-
limit
-
キャッシュに割り付けられる最大のバイト数。
-
divisor
-
kmem_size の割合として使用されるキャッシュサイズを設定します。 2 の値 (デフォルト) によって、キャッシュサイズを kmem_size の 1/2 に設定します。
-
switch
-
この割合のキャッシュが使用されたとき、ジャーナルを強制的に切り替えます。
-
misses
-
キャッシュには見つからず、データが読み込まれたときのキャッシュミスの数。
-
alloc_failures
-
キャッシュの制限に達したために、キャッシュの割り付けに失敗したメモリの回数。
stats
統計レベルのための利用可能な文字列と整数の情報は、以下に詳細に記述します。変更可能性のカラムは、適切な特権があるプロセスが値を変更できるかどうかを示しています。
sysctl 名 |
タイプ |
変更可能性 |
skipped_bytes |
integer |
yes |
combined_ios |
integer |
yes |
switches |
integer |
yes |
wait_for_copy |
integer |
yes |
journal_full |
integer |
yes |
low_mem |
integer |
yes |
-
skipped_bytes
-
スキップされたバイト数。
-
combined_ios
-
ジャーナルの最適化によって結合された I/O の数。
-
switches
-
ジャーナルを切り替えた数。
-
wait_for_copy
-
前のジャーナルコピーの完了を待たなければならなかったジャーナル切り替えプロセスの回数。
-
journal_full
-
強制的にジャーナルを切り替えて、ジャーナルがほとんど満杯になった回数。
-
low_mem
-
low_mem フックが呼び出された回数。
歴史
gjournal ユーティリティは、
FreeBSD 7.0 で登場しました。
作者
Pawel Jakub Dawidek <pjd@FreeBSD.org>