Red Hat Training

A Red Hat training course is available for Red Hat Enterprise Linux

第10章 qemu-img および QEMU ゲストエージェント

本章では、ゲスト仮想マシンで qemu-img パッケージを使用するための便利なヒントとヒントを紹介します。QEMU トレースイベントと引数に関する情報を探している場合は、次の場所にある README ファイルを参照してください。/usr/share/doc/qemu-*/README.systemtap

10.1. qemu-img の使用

qemu-img コマンドラインツールは、KVM が使用するさまざまなファイルシステムのフォーマット、修正、および検証に使用されます。qemu-img オプションと使用方法を以下に示します。

チェック

ディスクイメージの filename で整合性チェックを実行します。

#  qemu-img check -f qcow2 --output=qcow2 -r all filename-img.qcow2
注記
qcow2 および vdi 形式のみが整合性チェックに対応します。
-r を使用すると、チェック中に見つかった不整合を修復しようとしますが、-r leaks クラスターのリークで使用されると修復され、-r all ですべての種類のエラーが修正されます。これには、間違った修正を選択したり、すでに発生している可能性のある破損の問題を隠したりするリスクがあることに注意してください。

Commit

指定したイメージファイル (filename) に記録された変更を、qemu-img commit コマンドでファイルのベースイメージにコミットします。オプションで、ファイルのフォーマットタイプ (format) を指定します。

 # qemu-img commit [-f format] [-t cache] filename

convert

convert オプションは、認識されているイメージ形式を別のイメージ形式に変換するために使用されます。

コマンド形式:
# qemu-img convert [-c] [-p] [-f format] [-t cache] [-O output_format] [-o options] [-S sparse_size] filename output_filename
-p パラメーターはコマンドの進捗を示し (すべてのコマンドではなく任意)、-S フラグは、ディスクイメージに含まれる sparse file の作成を許可します。ゼロのみを含む (何も含まない) 物理ブロックを除いて、あらゆる目的のスパースファイルは標準ファイルのように機能します。オペレーティングシステムがこのファイルを認識すると、たとえ実際にはディスクを使用していなくても、存在しているものとして扱われ、実際のディスク領域を消費します。ゲスト仮想マシン用のディスクを作成する場合に特に役立ちます。これにより、ディスクに必要なディスク領域よりもはるかに多くのディスク領域が使用されるようになります。たとえば、10Gb のディスクイメージで -S を 50Gb に設定すると、実際には 10Gb しか使用されていなくても、そのディスク領域の 10Gb は 60Gb に見えます。
filename 形式を使用して、ディスクイメージ output_filename をディスクイメージ output_format に変換します。ディスクイメージは、-c オプションで圧縮するか、-o encryption を設定して -o オプションで暗号化できます。-o パラメーターで使用できるオプションは、選択した形式とは異なることに注意してください。
qcow2 形式のみが暗号化または圧縮をサポートします。qcow2 暗号化は、安全な 128 ビット鍵で AES 形式を使用します。qcow2 圧縮は読み取り専用であるため、圧縮したセクターが qcow2 形式から変換されると、非圧縮データとして新しい形式に書き込まれます。
イメージの変換は、qcow または cow など、サイズを大きくできる形式を使用する場合に、小さなイメージを取得する場合にも役立ちます。空のセクターは、宛先イメージから検出され、抑制されます。

Create

サイズsize、フォーマットformat、新しいディスクイメージの ファイル名を作成します。

# qemu-img create [-f format] [-o options] filename [size][preallocation]
ベースイメージが -o backing_file=filename で指定されている場合は、イメージ自体とベースイメージの違いのみが記録されます。バッキングファイルは、commit コマンドを使用しない限り変更されません。この場合、サイズの指定は必要ありません。
事前割り当ては、qcow2 イメージの作成でのみ使用できるオプションです。許可される値には -o preallocation=off|meta|full|falloc が含まれます。事前に割り当てられたメタデータを持つイメージは、イメージよりも大きくなります。ただし、イメージサイズが大きくなると、イメージのサイズが大きくなるとパフォーマンスが向上します。
full 割り当ての使用には、イメージのサイズが大きい場合に時間がかかる可能性があることに注意してください。完全な割り当てと時間が経つ必要がある場合、フラックを使用 falloc 時間を節約できます。

Info

info パラメーターは、ディスクイメージのfilenameに関する情報を表示します。info オプションの形式は、以下のとおりです。

# qemu-img info [-f format] filename
このコマンドは、多くの場合、表示されているサイズとは異なるディスクに予約されているサイズを検出するために使用されます。スナップショットがディスクイメージに保存されている場合は、そのスナップショットも表示されます。このコマンドは、たとえば、ブロックデバイスの qcow2 イメージが使用している領域を表示します。これは、qemu-img を実行して行います。使用中のイメージが、qemu-img check コマンドで qemu-img info コマンドの出力と一致するイメージであることを確認できます。「qemu-img の使用」 を参照してください。
# qemu-img info /dev/vg-90.100-sluo/lv-90-100-sluo
image: /dev/vg-90.100-sluo/lv-90-100-sluo
file format: qcow2
virtual size: 20G (21474836480 bytes)
disk size: 0
cluster_size: 65536

マップ

# qemu-img map [-f format] [--output=output_format] filename コマンドは、イメージファイル名のメタデータとそのバッキングファイルチェーンをダンプします。具体的には、このコマンドは、指定されたファイルのすべてのセクターの割り当て状態を、それをバッキングファイルチェーンに割り当てる最上位のファイルとともにダンプします。たとえば、c.qcow2 → b.qcow2 → a.qcow2 などのチェーンがある場合、a.qcow2 が元のファイルである場合、b.qcow2 は a.qcow2 に加えられた変更で、c.qcow2 は b.qcow2 のデルタファイルになります。このチェーンが作成されると、イメージファイルは通常のイメージデータを保存し、どのファイルの場所とそれがファイルに保存されるかに関する情報も保存されます。この情報は、イメージのメタデータと呼ばれます。-f フォーマットオプションは、指定されたイメージファイルのフォーマットです。raw、qcow2、vhdx、vmdk などの形式を使用できます。可能な出力オプションには、humanjson の 2 つがあります。

  • human がデフォルト設定です。人間の目に読みやすくなるように設計されているため、この形式は解析しないでください。明確さと単純さのために、デフォルトの human フォーマットは、ファイルの既知のゼロ以外の領域のみをダンプします。ファイルの既知のゼロの部分は完全に省略され、同様にチェーン全体に割り当てられていない部分も省略されます。コマンドが実行されると、qemu-img 出力は、データを読み取ることができるファイルと、ファイル内のオフセットを識別します。出力は、4 列のテーブルとして表示されます。最初の 3 つは 16 進数です。
    # qemu-img map -f qcow2 --output=human /tmp/test.qcow2
    Offset          Length          Mapped to       File
    0               0x20000         0x50000         /tmp/test.qcow2
    0x100000        0x80000         0x70000         /tmp/test.qcow2
    0x200000        0x1f0000        0xf0000         /tmp/test.qcow2
    0x3c00000       0x20000         0x2e0000        /tmp/test.qcow2
    0x3fd0000       0x10000         0x300000        /tmp/test.qcow2
    
  • json、つまり JSON (JavaScript Object Notation) は、人間が読むこともできますが、プログラミング言語であるため、解析することも前提に設計されています。たとえば、パーサーで qemu-img map の出力を解析する場合は、オプション --output=json を使用する必要があります。
    # qemu-img map -f qcow2 --output=json /tmp/test.qcow2
    [{ "start": 0, "length": 131072, "depth": 0, "zero": false, "data": true, "offset": 327680},
    { "start": 131072, "length": 917504, "depth": 0, "zero": true, "data": false},
    
    JSON 形式の詳細については、qemu-img (1) の man ページを参照してください。

リベース

イメージのバッキングファイルを変更します。

# qemu-img rebase [-f format] [-t cache] [-p] [-u] -b backing_file [-F backing_format] filename
バッキングファイルの形式が backing_file に変更され (filename の形式がこの機能に対応している場合)、バッキングファイルの形式が backing_format に変更されます。
注記
バッキングファイル (リベース) の変更に対応するのは、qcow2 形式のみです。
rebase が動作できるモードには、SafeUnsafe の 2 つがあります。
Safe モードは、デフォルトで使用され、実際のリベース操作を実行します。新しいバッキングファイルは古いファイルとは異なる場合があり、qemu-img rebase は、ゲストの仮想マシンで認識される filename の内容を変更せずに保持します。これを実現するため、filenamebacking_file と古いバッキングファイルとで異なるクラスターは、すべて filename にマージされてから、バッキングファイルを変更します。
safe モードはイメージの変換に相当する費用のかかる動作であることに注意してください。古いバッキングファイルは、正常に完了するために必要です。
Unsafe モードは、-u オプションが qemu-img rebase に渡される場合に使用されます。このモードでは、ファイルの内容を確認せずに、バッキングファイルの名前と filename の形式のみが変更されます。新しいバッキングファイルが正しく指定されていることを確認してください。指定されていない場合、イメージのゲストに表示されるコンテンツが破損します。
このモードは、バッキングファイルの名前変更や移動に役立ちます。アクセス可能な古いバッキングファイルがなくても使用できます。たとえば、バッキングファイルがすでに移動または名前変更されているイメージを修正するために使用できます。

サイズの変更

サイズ sizeで作成されたかのように、ディスクイメージのfilenameを変更します。バージョンに関係なく、サイズ変更できるのは raw 形式のイメージのみです。Red Hat Enterprise Linux 6.1 以降では、qcow2 フォーマットでイメージを拡大 (縮小はしない) する機能が追加されています。

次のコマンドを使用して、ディスクイメージのfilenameのサイズを size バイトに設定します。
# qemu-img resize filename size
また、ディスクイメージの現在のサイズを基準にしてサイズを変更することもできます。現在のサイズに相対的なサイズを指定するには、バイト数の前に + を付けて拡大するか、- を付けてディスクイメージのサイズをそのバイト数だけ縮小します。ユニットの接尾辞を追加すると、イメージのサイズをキロバイト (K)、メガバイト (M)、ギガバイト (G)、またはテラバイト (T) で設定できます。
# qemu-img resize filename [+|-]size[K|M|G|T]
警告
このコマンドを使用してディスクイメージを縮小する前に、仮想マシン自体の内部でファイルシステムとパーティションツールを使用して、割り当てられたファイルシステムとパーティションサイズを適宜減らす必要があります。そうしないと、データが失われることになります。
このコマンドを使用してディスクイメージを拡張したら、ファイルシステムと仮想マシン内のパーティションツールを使用して、デバイス上の新しい領域の使用を実際に開始する必要があります。

スナップショット

イメージ (ファイル名) の既存のスナップショット (スナップショット) を一覧表示、適用、作成、または削除します。

# qemu-img snapshot [ -l | -a snapshot | -c snapshot | -d snapshot ] filename
-l は、指定したディスクイメージに関連付けられているすべてのスナップショットを一覧表示します。apply オプション -a は、ディスクイメージ (filename) を、以前保存したスナップショットの状態に戻します。-c は、イメージ (filename) のスナップショット (snapshot) を作成します。-d は、指定したスナップショットを削除します。

サポート対象の形式

qemu-img は、ファイルを次のいずれかのフォーマットに変換するように設計されています。

raw
Raw ディスクイメージ形式 (デフォルト)これは、ファイルベースで最も高速な形式になります。ファイルシステムがホールをサポートしている場合 (たとえば、Linux の ext2 または ext3、Windows の NTFS)、書き込まれたセクターのみがスペースを予約します。qemu-img info を使用して、イメージが使用する実際のサイズを取得するか、Unix/Linux の ls -ls を取得します。Raw イメージは最適なパフォーマンスを提供しますが、Raw イメージで使用できるのは非常に基本的な機能のみです (たとえば、スナップショットは使用できません)。
qcow2
QEMU イメージ形式。最も汎用性が高く、機能セットが最適な形式です。これを使用して、オプションの AES 暗号化、zlib ベースの圧縮、複数の VM スナップショットのサポート、およびホールをサポートしないファイルシステム (Windows 上の非 NTFS ファイルシステム) で役立つ小さなイメージを使用します。この拡張機能セットはパフォーマンスに影響を与えることに注意してください。
ゲスト仮想マシンまたはホスト物理マシンでの実行には上記の形式のみを使用できますが、qemu-img は、raw、または qcow2 形式に変換するために、以下の形式も認識してサポートします。イメージの形式は、通常、自動的に検出されます。この形式を raw または qcow2 に変換することに加えて、raw または qcow2 から元の形式に戻すことができます。
bochs
Bochs ディスクイメージ形式。
cloop
Linux Compressed Loop イメージ。Knoppix CD-ROM などにある直接圧縮 CD-ROM イメージを再利用する場合にのみ役立ちます。
cow
User Mode Linux Copy On Write イメージ形式。cow 形式は、以前のバージョンとの互換性のためにのみ同梱されています。Windows では動作しません。
dmg
Mac ディスクイメージフォーマット。
nbd
ネットワークブロックデバイス。
parallels
Parallels 仮想化ディスクイメージフォーマット。
qcow
古い QEMU イメージフォーマット。古いバージョンとの互換性にのみ含まれます。
vdi
Oracle VM VirtualBox ハードディスクイメージ形式。
vmdk
VMware 互換のイメージフォーマット (バージョン 1 および 2 の読み取り/書き込みサポート、およびバージョン 3 の読み取り専用サポート)。
vpc
WindowsVirtualPC のディスクイメージフォーマット。vhd、または Microsoft 仮想ハードディスクイメージフォーマットとも呼ばれます。
vvfat
仮想 VFAT ディスクイメージフォーマット。