Veritas™ File System プログラマーズリファレンスガイド - Linux
- Veritas File System Software Developer's Kit
- FCL(File Change Log)
- マルチボリュームサポート
- 名前付きデータストリーム
- Veritas File System I/O
- シン再生
凍結と解凍
ファイルシステムをフリーズすると、ファイルシステムへのすべての I/O 処理が一時的にブロックされ、ファイルシステム上で sync が実行されます。現在の操作が完了して、ファイルシステムはディスクに同期されます。ファイルシステムのフリーズ処理は、ファイルシステムの、ボリュームレベルで一貫性のある安定したイメージを取得するために必要な手順です。
ボリュームレベルで一貫性のあるファイルシステムイメージは、ファイルシステムスナップショットツールを使って取得し、使うことができます。フリーズ処理によって、ダーティなメタデータやユーザーデータが格納されたファイルシステムキャッシュ内のすべてのバッファおよびページがフラッシュされます。さらに、この操作によって、ファイルシステムがアンフリーズされるまで、ファイルシステムに対するすべての新しい操作が保留されます。
VxFS には、アプリケーションプログラムから VxFS ファイルシステムをフリーズおよびアンフリーズするための ioctl インターフェースが用意されています。このインターフェースとは、VX_FREEZE、VX_FREEZE_ALL および VX_THAW のことです。
VX_FREEZE ioctl は、単一のファイルシステムに対して機能します。この ioctl を実行しているプログラムは、指定したファイルシステムをフリーズし、ファイルシステムをアンフリーズするまで、ファイルシステムに対するすべてのアクセスをブロックできます。ファイルシステムは、VX_FREEZE ioctl によって指定されたタイムアウト値の期限が切れるか、または VX_THAW ioctl がファイルシステムに対して実行されると、アンフリーズされます。
VX_THAW ioctl はフリーズされたファイルシステムに対して機能します。このインターフェースを使って、タイムアウト値が経過する前に、指定したファイルシステムをアンフリーズできます。
VX_FREEZE_ALL ioctl インターフェースは 1 つまたは複数のファイルシステムをフリーズします。VX_FREEZE_ALL ioctl は、フリーズ処理で複数のファイルシステムが指定された場合、原子的に実行します。VxFS は指定したファイルシステムへの同時アクセスをブロックし、1 回の書き込み処理で、複数のファイルシステムを変更する可能性のあるユーザー起動の書き込み処理を許可しません。VX_FREEZE_ALL は単一のファイルシステムでも使えるため、VX_FREEZE ioctl よりも VX_FREEZE_ALL の方が望ましいインターフェースです。
VX_FREEZE または VX_FREEZE_ALL ioctl を実行すると、クリーンなファイルシステムイメージが生成されます。このイメージは、ファイルシステムデバイスから分離した後でマウント可能になります。フリーズ要求に応じて、変更されたすべてのファイルシステムメタデータがディスクにフラッシュされます。ログ内には、分離したイメージをマウントする前に再生する必要がある保留中のファイルシステムトランザクションはありません。
VX_FREEZE インターフェースおよび VX_FREEZE_ALL インターフェースのどちらを使っても、ローカルにマウントされたファイルシステム、ローカルまたはリモートでマウントされたクラスタファイルシステムをフリーズできます。
次の表に、VxFS リリースとのフリーズ/アンフリーズの互換性を示します。
表: VxFS リリースとのフリーズ/アンフリーズの互換性
VxFS 3.5 |
VxFS 4.0 |
VxFS 4.1 |
VxFS 5.0 以降 | |
---|---|---|---|---|
ローカルファイルシステム |
ローカルファイルシステム Cluster File System |
ローカルファイルシステム Cluster File System |
ローカルファイルシステム Cluster File System | |
ローカルファイルシステム |
ローカルファイルシステム |
ローカルファイルシステム Cluster File System |
ローカルファイルシステム Cluster File System |
ファイルシステムをフリーズする場合は、ファイルシステムをターゲットにしている外部リソースへの影響を軽減するため、フリーズの適切なタイムアウト値を慎重に選択する必要があります。ファイルシステムがフリーズされている間、ユーザーまたはシステムのプロセスおよびリソースはブロックされます。指定したタイムアウト値が大きすぎると、リソースがブロックされる時間が長くなります。
ファイルシステムがフリーズしている間、VX_THAW ioctl に使うために、ファイルシステムのルートディレクトリからファイル記述子を取得しようとすると、ファイルシステムのフリーズ状態の結果として、呼び出し元のプロセスがブロックされます。ファイル記述子は、VX_FREEZE_ALL またはVX_FREEZE ioctl を発行する前に取得しておく必要があります。
タイムアウト期間が期限切れになる前に、VX_THAW ioctl を使い、VX_FREEZE_ALL ioctl によってフリーズされたファイルシステムをアンフリーズします。
プログラミングインターフェースは次のようになります。
include <sys/fs/vx_ioctl.h> int timeout; int vxfs_fd; /* * A common mistake is to pass the address of "timeout". * Do not pass the address of timeout, as that would be * interpreted as a very long timeout period */ if (ioctl(vxfs_fd, VX_FREEZE, timeout)) {perror("ERROR: File system freeze failed"); }
ファイルシステムが複数ある場合:
int vxfs_fd[NUM_FILE_SYSTEMS]; struct vx_freezeall freeze_info; freeze_info.num = NUM_FILE_SYSTEMS freeze_info.timeout = timeout; freeze_info.fds = &vxfs_fd[0]; if (ioctl(vxfs_fd[0], VX_FREEZE_ALL, &freeze_info)) {perror("ERROR: File system freeze failed"); } for (i = 0; i < NUM_FILE_SYSTEMS; i++) if (ioctl(vxfs_fd[i], VX_THAW, NULL)) {perror("ERROR: File system thaw failed"); }