4.7. QEMU ゲストエージェントの概要
Red Hat Enterprise Linux 6.4 では、QEMU ゲストエージェント(QEMU GA)は、Linux ゲスト仮想マシンの破損に対する保護を提供していました。スナップショット要求を発行したり、ディスクのバックアップコピーを作成する前に、管理スタック(libvirt)は virtio-serial ポートを介して QEMU GA に guest-fsfreeze-freeze QMP コマンドを送信していました。このコマンドにより、ゲストエージェントは、
FIFREEZE ioctl()
カーネル機能を介してゲスト仮想マシンのファイルシステムをすべてフリーズしていました。この ioctl()
機能は、ゲスト仮想マシンの Linux カーネルによって実装されます。この関数は、ゲスト仮想マシンのカーネルのファイルシステムキャッシュをフラッシュし、ファイルシステムを一貫した状態にし、すべてのユーザー空間スレッドがファイルシステムへの書き込みアクセスを拒否します。
QEMU GA が成功を報告した後にのみ、libvirt はスナップショットを続行します。完了すると、libvirt は、virtio-serial ポートを介して QEMU GA に guest-fsfreeze-thaw QMP コマンドを送信します。このコマンドは、QEMU GA に対して FITHAW ioctl () を発行するように指示します。これにより、以前に書き込みアクセスが拒否されていたユーザー空間スレッドがブロックされず、通常の処理を再開します。このプロセスにより、仮想ディスクスナップショットの作成時にアプリケーションレベルのデータが一貫した状態であることを確認しませんでした。これは、fsck ユーティリティーがスナップショットから復元されたファイルシステムで問題を検出できず、アプリケーションがスナップショットが取得された時点から処理を再開できず、ユーザー空間プロセスがディスク上のファイルに内部バッファーを書き込みできなかった場合に明確でした。
Red Hat Enterprise Linux 6.5 では、ファイルレベルとアプリケーションレベルの同期(フラッシュ)の両方が実行されます。ゲストシステム管理者は、アプリケーション固有のフリーズとフックスクリプトを作成およびインストールできます。ファイルシステムをフリーズする前に、QEMU GA はメインのフックスクリプト( QEMU GA パッケージに含まれる)を起動します。次に、メインのフックスクリプトは、ゲストシステム管理者が準備した個々のアプリケーション固有のスクリプトを呼び出し、ゲスト仮想マシンアプリケーションを一時的に非アクティブにします。これらのアクションはすべて、モードがフリーズに変更されると発生します。
ファイルシステムがフリーズする直前に、ゲストシステム管理者のスクリプトにより、データベースおよびその他のファイルシステムアプリケーションが作業バッファーを仮想ディスクにフラッシュし、さらにクライアント接続の受け入れを停止します。その後、アプリケーションは、(バックアップから仮想ディスクを復元した後)アプリケーションの再アクティブ化(または新たに起動した)インスタンスを使用して、処理を再開する一貫した状態にします。すべてのスクリプトがそれぞれのアプリケーションを非アクティブにし、メインフックスクリプトが戻ると、QEMU GA はファイルシステムをフリーズし、管理スタックがスナップショットを取得します。これをすべて完了したら、スナップショットが取得されると、ファイルシステムが再開して書き込み要求を処理します。このプロセスは thawing と呼ばれます。
フリーズは逆順でフリーズしています。libvirt が指示するQEMU GA は、ゲスト仮想マシンのファイルシステムを解凍します。次に、(メインフックスクリプトを介して)個々のフックスクリプトを呼び出し、フリーズプロセス中に非アクティブ化されたアプリケーションを再開または再起動します。