A.2. ダンプファイルの作成
ゲスト仮想マシンのコアのダンプをファイルに要求できるため、crashユーティリティー などにより仮想マシンのエラーを診断できます。
警告
Red Hat Enterprise Linux 7.5 以降では、Kernel Address Space Randomization (KASLR) 機能により、ゲストダンプファイルが crash で読み込みできなくなります。これを修正するには、ゲストの XML 設定ファイルの
<features>
セクションに <vmcoreinfo/>
要素を追加します。
宛先のホストが
<vmcoreinfo/>
をサポートしない OS を使用している場合は、<vmcoreinfo/>
を使用したゲストの 移行 に失敗する点に留意してください。これには、Red Hat Enterprise Linux 7.4 以前のバージョンと、Red Hat Enterprise Linux 6.9 以前のバージョンが該当します。
A.2.1. virsh ダンプファイルの作成
virsh dump コマンドを実行すると、ゲスト仮想マシンのコアをファイルにダンプする要求が送信され、仮想マシンのエラーを診断できます。このコマンドを実行すると、引数 corefilepath で指定したファイルおよびパスに対する適切なパーミッションを手動で確認する必要があります。virsh dump コマンドは、コアダンプ (または crash ユーティリティー) と似ています。
詳細は、Creating a Dump File of a Guest Virtual Machine's Core を参照してください。
A.2.2. Python スクリプトを使用したコアダンプの保存
dump-guest-memory.py
python スクリプトは、GNU デバッガー (GDB) 拡張機能を実装します。この拡張機能は、qemu-kvm プロセスがホストでクラッシュした後、コアダンプからゲスト仮想マシンのメモリーを抽出して保存します。ホスト側の QEMU プロセスがクラッシュすることがゲストのアクションに関連している場合は、QEMU プロセスがクラッシュしたときのゲストの状態を調べると役に立つ場合があります。
python スクリプトは、GDB 拡張機能を実装します。これは、GDB の新しいコマンドです。GDB で、元の (クラッシュした) QEMU プロセスのコアダンプファイルを開いた後、python スクリプトを GDB に読み込むことができます。その後、GDB プロンプトから新しいコマンドを実行できます。これにより、QEMU コアダンプトからゲストメモリーダンプを抽出し、新しいローカルファイルを作成します。
dump-guest-memory.py
python スクリプトを使用するには、以下を実行します。
- qemu-kvm-debuginfo パッケージをインストールします。
- GDB を起動し、クラッシュした
/usr/libexec/qemu-kvm
バイナリー用に保存されているコアダンプファイルを開きます。デバッグシンボルは自動的に読み込まれます。 - GDB で新しいコマンドを読み込みます。
# source /usr/share/qemu-kvm/dump-guest-memory.py
注記python スクリプトを読み込んだ後、組み込みの GDB help コマンドを使用すると、dump-guest-memory
拡張機能の詳細を確認できます。 - GDB でコマンドを実行します。以下に例を示します。
# dump-guest-memory /home/user/extracted-vmcore X86_64
- ゲストカーネル解析用に crash ユーティリティーで
/home/user/extracted-vmcore
を開きます。
crash ユーティリティーで使用する QEMU コアファイルからゲスト仮想マシンコアを抽出する方法は、『How to extract ELF cores from 'gcore' generated qemu core files for use with the 'crash' utility』 を参照してください。