Jump to contentJump to page navigation: previous page [access key p]/next page [access key n]
コンテンツコンテンツ
仮想化ガイド
  1. 前書き
  2. I 概要
    1. 1 仮想化技術
    2. 2 仮想化シナリオ
    3. 3 Xen 仮想化の紹介
    4. 4 KVM 仮想化の紹介
    5. 5 仮想化ツール
    6. 6 仮想化コンポーネントのインストール
  3. II libvirt を利用した仮想マシンの管理
    1. 7 libvirt デーモン
    2. 8 VM ホストサーバ の準備
    3. 9 ゲストのインストール
    4. 10 基本的な VM ゲスト の管理
    5. 11 接続と認可
    6. 12 高度なストレージ設定
    7. 13 仮想マシンマネージャ を利用した仮想マシンの設定
    8. 14 virsh を利用した仮想マシンの設定
    9. 15 AMD SEV-SNP による仮想マシンのセキュリティ強化
    10. 16 VM ゲスト の移行
    11. 17 Xen から KVM への移行ガイド
  4. III 全ハイパーバイザ共通の機能
    1. 18 ディスクのキャッシュモード
    2. 19 VM ゲスト の時刻設定
    3. 20 libguestfs
    4. 21 QEMU ゲストエージェント
    5. 22 ソフトウエア TPM エミュレータ
    6. 23 VM ゲスト に対するクラッシュダンプの作成
  5. IV Xen を利用した仮想マシンの管理
    1. 24 仮想マシンホストの設定
    2. 25 仮想ネットワーク
    3. 26 仮想環境の管理
    4. 27 Xen 内でのブロックデバイス
    5. 28 仮想化: オプション設定
    6. 29 管理作業
    7. 30 XenStore: ドメイン間で共有される設定データベース
    8. 31 Xen の高可用性仮想化ホストとしての使用
    9. 32 Xen: 準仮想化 (PV) ゲストから完全仮想化 (FV/HVM) ゲストへの変換
  6. V QEMU を利用した仮想マシンの管理
    1. 33 QEMU の概要
    2. 34 KVM VM ホストサーバ の構築
    3. 35 ゲストのインストール
    4. 36 qemu-system-ARCH を利用した仮想マシンの実行
    5. 37 QEMU モニタを利用した仮想マシンの管理
  7. VI トラブルシューティング
    1. 38 内蔵ヘルプとパッケージのドキュメンテーション
    2. 39 システム情報とログの収集
  8. 用語集
  9. A NVIDIA カードに対する GPU パススルー の設定
  10. B GNU ライセンス
ナビゲーション
適用先 openSUSE Leap 15.7

20 libguestfs Edit source

概要

仮想マシン にはディスクイメージと対応する定義ファイルが存在しています。通常のハイパーバイザを経由せずにゲスト側のコンポーネントにアクセスしたり、それらを変更したりすることもできますが、このような作業は本質的に危険なものであり、データの一貫性を破壊してしまうリスクをはらんでいます。 libguestfs は C 言語で書かれたライブラリで、 仮想マシン のディスクイメージに対して安全な方法で、アクセスしたり変更したりするための仕組みを提供します。このライブラリを使用することで、ハイパーバイザを使用することなく、かつ手作業による編集のリスクを伴うことなく、作業を行うことができます。

重要
重要

libguestfs の使用は、 AMD64/Intel 64 アーキテクチャのみで完全サポートされています。

20.1 VM ゲスト のディスク編集の概要 Edit source

20.1.1 VM ゲスト のディスク編集によるリスク Edit source

ディスクイメージファイルと定義ファイルは、いずれも Linux 環境では単純なファイルとして存在しているものです。そのため、さまざまなツールを利用してアクセスしたり、編集や書き込みを行ったりすることができます。正しく使用している限りにおいては、これらのツールを利用することでゲスト側を管理することができるようになります。しかしながら、これらのツールを正しく使用していても、リスク無しにディスクイメージを編集することはできません。ゲスト側のディスクイメージを編集する場合、下記のようなリスクが発生します:

  • データの破壊 : ホストマシンとクラスタ内の別ノードで同時にアクセスしてしまうと、仮想化による保護レイヤを迂回してしまうことになるため、データが失われたり破壊されたりしてしまいます。

  • セキュリティ : ループバックデバイスを利用したディスクイメージのマウントは、 root 権限が必要な作業です。ただし、イメージのマウントが成功してしまうと、他のユーザからディスクの内容にアクセスできてしまう場合があります。

  • 管理上の作業ミス : 仮想化レイヤの迂回には仮想化のコンポーネントやツールに対する高度な理解が必要となります。イメージを仮想化コンポーネントから切り離して編集を行い、編集完了後に仮想化コンポーネントに戻す作業は、時として作業ミスを引き起こしやすくなっています。

20.1.2 libguestfs の設計 Edit source

libguestfs は C 言語で記述されたライブラリで、仮想マシン (VM ゲスト) のディスクイメージを安全に作成したり、アクセスや修正を行ったりする機能を提供するように設計されています。また libguestfs には、 Perl , Python , Ruby の言語バインディングも用意されています。 libguestfs は root 権限を使用せずに VM ゲスト のディスクイメージにアクセスする機能を提供しているほか、不正なディスクイメージへのアクセスを防ぐための多階層の防御を提供しています。

libguestfs は VM ゲスト のディスクイメージとその内容にアクセスしたり、それらを修正したりするための多数のツールを提供しています。これらのツールには、ゲスト内のファイルを表示したり編集したりするツールのほか、スクリプトを利用して VM ゲスト の変更を行ったり、ディスクの使用率に関する統計情報の監視やゲストの作成、 V2V もしくは P2V の移行を行う機能、バックアップの実施や VM ゲスト の複製、ディスクのフォーマットやサイズ変更などの機能が含まれています。

警告
警告: 注意事項について

動作中の仮想マシンが使用しているディスクイメージに対しては、 libguestfs ツールを使用してはなりません。動作中の状態のままディスクイメージにアクセスしてしまうと、 VM ゲスト のディスクを破壊する結果になります。 libguestfs ツールからアクセスしようとすると、対象の仮想マシンが動作中であればエラーを表示しようとしますが、完全な仕組みではないことに注意してください。

なお、ほとんどのコマンドには --ro (読み込み専用) オプションが用意されています。このオプションを指定すると、動作中の仮想マシンのディスクイメージにアクセスすることができます。ただし、仮想マシン側の動作によってファイルが正しく読み込めなくなってしまうことがありますが、ディスクが破壊されてしまうリスクはありません。

20.2 パッケージのインストール Edit source

libguestfs は 4 個のパッケージから構成されています:

  • libguestfs0 : メインの C 言語ライブラリです。

  • guestfs-data : イメージを起動する際に使用するアプライアンスファイルが含まれています (/usr/lib64/guestfs ディレクトリ内に保存されています) 。

  • guestfs-tools : 中枢となる guestfs ツールやマニュアルページ、そして /etc/libguestfs-tools.conf の設定ファイルが含まれています。

  • guestfs-winsupport : guestfs ツールから Windows ゲストのファイルにアクセスするための機能が含まれています。このパッケージは、 Windows ゲストを KVM に移行する場合など、 Windows ゲストにアクセスする場合にのみ必要となります。

guestfs ツールをお使いのシステムにインストールするには、下記を実行します:

> sudo zypper in guestfs-tools

20.3 guestfs ツール Edit source

20.3.1 仮想マシンの修正 Edit source

guestfs-tools パッケージ内にあるツールを使用することで、仮想マシンのディスクイメージにアクセスしたり、ディスクイメージを編集したりすることができます。この機能は、ディスクイメージの一貫性を損なうことがないようにするセーフガード付きのわかりやすいシェルインターフェイスを介して提供されていて、ここから guestfs API の全ての機能を利用することができます。また、マシンにインストールされているファイルと /usr/lib64/guestfs 内のファイルを使用することで、その場でアプライアンスを作成することもできます。

20.3.2 対応するファイルシステムとディスクイメージ Edit source

guestfs ツールは下記のファイルシステムに対応しています:

  • Ext2, Ext3, Ext4

  • Xfs

  • Btrfs

複数のディスク形式にも対応しています:

  • raw

  • qcow2

警告
警告: 未対応のファイルシステムについて

guestfs では Windows* のファイルシステム (VFAT, NTFS) のほか、 BSD* や Apple* のファイルシステムにも対応していますし、その他のディスクイメージ形式 (VMDK, VHDX) にも対応しています。ですが、これらのファイルシステムとディスクイメージ形式は、いずれも openSUSE Leap ではサポート対象外となります。

20.3.3 virt-rescue Edit source

virt-rescue はレスキュー CD と同様の機能を提供する仕組みですが、仮想マシン向けに動作し、 CD を使用せずに作業を行うことができます。 virt-rescue はユーザに対してレスキューシェルを提供し、仮想マシンやディスクイメージ内に存在する問題を調査し、修正する機能を提供します。

> virt-rescue -a sles.qcow2
Welcome to virt-rescue, the libguestfs rescue shell.

Note: The contents of / are the rescue appliance.
You need to mount the guest's partitions under /sysroot
before you can examine them. A helper script for that exists:
mount-rootfs-and-do-chroot.sh /dev/sda2

><rescue>
[   67.194384] EXT4-fs (sda1): mounting ext3 file system
using the ext4 subsystem
[   67.199292] EXT4-fs (sda1): mounted filesystem with ordered data
mode. Opts: (null)
mount: /dev/sda1 mounted on /sysroot.
mount: /dev bound on /sysroot/dev.
mount: /dev/pts bound on /sysroot/dev/pts.
mount: /proc bound on /sysroot/proc.
mount: /sys bound on /sysroot/sys.
Directory: /root
Thu Jun  5 13:20:51 UTC 2014
(none):~ #

これで VM ゲスト をレスキューモードでアクセスすることができるようになります:

(none):~ # cat /etc/fstab
devpts  /dev/pts          devpts  mode=0620,gid=5 0 0
proc    /proc             proc    defaults        0 0
sysfs   /sys              sysfs   noauto          0 0
debugfs /sys/kernel/debug debugfs noauto          0 0
usbfs   /proc/bus/usb     usbfs   noauto          0 0
tmpfs   /run              tmpfs   noauto          0 0
/dev/disk/by-id/ata-QEMU_HARDDISK_QM00001-part1 / ext3 defaults 1 1

20.3.4 virt-resize Edit source

virt-resize は仮想マシンのディスクのサイズを変更するためのツールで、サイズの拡張や縮小だけでなく、ディスク内のパーティションのサイズ変更や削除にも対応しています。

手順 20.1: ディスクのサイズ拡張

手順例: 仮想マシンのディスクサイズの拡張

  1. まずは仮想マシンの電源を落としてシャットオフ状態にします。その後、仮想マシンのディスクイメージ内にあるパーティションのサイズを読み取ります:

    > virt-filesystems --long --parts --blkdevs -h -a sles.qcow2
    Name       Type       MBR  Size  Parent
    /dev/sda1  partition  83   16G   /dev/sda
    /dev/sda   device     -    16G   -
  2. virt-resize はディスクイメージを直接書き換えることはできません。その代わり、サイズ変更後のディスクを用意して対応します。たとえば truncate コマンドを利用して、適切なサイズの仮想ディスクを作成します:

    > truncate -s 32G outdisk.img
  3. あとは virt-resize コマンドを利用して、ディスクイメージのサイズを変更します。このとき、入力元と出力先のディスクイメージをそれぞれ指定する必要があることに注意してください:

    > virt-resize --expand /dev/sda1 sles.qcow2 outdisk.img
    Examining sles.qcow2 ...
    **********
    Summary of changes:
    
    /dev/sda1: This partition will be resized from 16,0G to 32,0G.  The
        filesystem ext3 on /dev/sda1 will be expanded using the 'resize2fs'
        method.
    
    **********
    Setting up initial partition table on outdisk.img ...
    Copying /dev/sda1 ...
    ◐ 84%
    ⟦▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒▒════════⟧ 00:03
    Expanding /dev/sda1 using the 'resize2fs' method ...
    
    Resize operation completed with no errors.  Before deleting the old
    disk, carefully check that the resized disk boots and works correctly.
  4. あとはイメージのサイズが想定通りになっていることを確認します:

    > virt-filesystems --long --parts --blkdevs -h -a outdisk.img
    Name       Type       MBR  Size  Parent
    /dev/sda1  partition  83   32G   /dev/sda
    /dev/sda   device     -    32G   -
  5. 新しいディスクイメージを利用して VM ゲスト を起動して、正しく動作することを確認してください。古いイメージの削除は、動作確認が完了してから実施してください。

20.3.5 その他の virt-* ツール Edit source

さまざまな管理作業を単純化するための guestfs ツールも用意されています。これにはたとえばファイルの閲覧や編集、仮想マシン内の情報採取などが含まれています。

20.3.5.1 virt-filesystems Edit source

このツールは、ディスクイメージや仮想マシン内にある、ファイルシステムやパーティション、論理ボリュームなどの情報を表示することができます。

> virt-filesystems -l -a sles.qcow2
Name       Type        VFS   Label  Size         Parent
/dev/sda1  filesystem  ext3  -      17178820608  -

20.3.5.2 virt-ls Edit source

virt-ls コマンドは、仮想マシンやディスクイメージ内にあるファイルの名前やサイズ、チェックサムや拡張属性などを出力します。複数のディレクトリを指定することもでき、この場合はそれぞれの出力が繋げられて出力されます。 libvirt のゲスト側からディレクトリの一覧を表示したい場合は、 -d オプションを指定してゲストの名前を入力してください。ディスクイメージから表示したい場合は、 -a オプションをお使いください。

> virt-ls -h -lR -a sles.qcow2 /var/log/
d 0755        776 /var/log
- 0640          0 /var/log/NetworkManager
- 0644        23K /var/log/Xorg.0.log
- 0644        23K /var/log/Xorg.0.log.old
d 0700        482 /var/log/YaST2
- 0644        512 /var/log/YaST2/_dev_vda
- 0644         59 /var/log/YaST2/arch.info
- 0644        473 /var/log/YaST2/config_diff_2017_05_03.log
- 0644       5.1K /var/log/YaST2/curl_log
- 0644       1.5K /var/log/YaST2/disk_vda.info
- 0644       1.4K /var/log/YaST2/disk_vda.info-1
[...]

20.3.5.3 virt-cat Edit source

virt-cat はファイルの内容を出力するためのコマンドラインツールで、仮想マシンの名前やディスクイメージを指定して処理を行います。複数のファイル名を指定した場合は、それぞれが繋げられた状態で出力されます。また、ファイル名はフルパスでなければなりません (つまり、 '/' で始まるルートディレクトリからのパスを指定する必要があります) 。

> virt-cat -a sles.qcow2 /etc/fstab
devpts /dev/pts devpts mode=0620,gid=5 0 0
proc   /proc    proc   defaults        0 0

20.3.5.4 virt-df Edit source

virt-df は仮想マシンのファイルシステム内での空き容量を表示するためのコマンドラインツールです。その他のツールとは異なり、仮想マシンに割り当てられたサイズを表示するだけでなく、ディスクイメージ内でどれだけの領域を使用しているのかを表示することができます。

> virt-df -a sles.qcow2
ファイルシステム                       1K-ブロック  使用      使用可能  使用%
sles.qcow2:/dev/sda1                  16381864     520564   15022492  4%

20.3.5.5 virt-edit Edit source

virt-edit は仮想マシン (またはディスクイメージ) 内に存在するファイルを編集するためのコマンドラインツールです。

20.3.5.6 virt-tar-in/out Edit source

virt-tar-in は非圧縮の TAR 書庫を仮想マシンのディスクイメージもしくは指定した名前の仮想マシンに展開します。 virt-tar-out はその逆で、仮想マシンのディスクイメージや仮想マシンのディレクトリを TAR 書庫にまとめます。

> virt-tar-out -a sles.qcow2 /home homes.tar

20.3.5.7 virt-copy-in/out Edit source

virt-copy-in はローカルのディスク内にあるファイルやディレクトリを仮想マシンのディスクイメージもしくは指定した名前の仮想マシンにコピーします。 virt-copy-out はその逆で、仮想マシンのディスクイメージもしくは指定した名前の仮想マシンから、ファイルやディレクトリをローカルのディスクにコピーします。

> virt-copy-in -a sles.qcow2 data.tar /tmp/
> virt-ls -a sles.qcow2 /tmp/
.ICE-unix
.X11-unix
data.tar

20.3.5.8 virt-log Edit source

virt-log は指定した名前の libvirt 仮想マシンもしくはディスクイメージ内にあるログファイルを表示します。 guestfs-winsupport パッケージがインストールされていれば、 Windows の仮想マシンディスクイメージから、イベントログの内容を表示することもできます。

> virt-log -a windows8.qcow2
<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<Events>
<Event xmlns="http://schemas.microsoft.com/win/2004/08/events/event"><System><Provider Name="EventLog"></Provider>
<EventID Qualifiers="32768">6011</EventID>
<Level>4</Level>
<Task>0</Task>
<Keywords>0x0080000000000000</Keywords>
<TimeCreated SystemTime="2014-09-12 05:47:21"></TimeCreated>
<EventRecordID>1</EventRecordID>
<Channel>System</Channel>
<Computer>windows-uj49s6b</Computer>
<Security UserID=""></Security>
</System>
<EventData><Data><string>WINDOWS-UJ49S6B</string>
<string>WIN-KG190623QG4</string>
</Data>
<Binary></Binary>
</EventData>
</Event>

...

20.3.6 guestfish Edit source

guestfish は仮想マシンのファイルシステムを調査したり修正したりするためのシェルおよびコマンドラインツールです。 libguestfs を使用し、 guestfs API の全ての機能を提供します。

使用例:

> guestfish -a disk.img <<EOF
run
list-filesystems
EOF
guestfish

Welcome to guestfish, the guest filesystem shell for
editing virtual machine filesystems and disk images.

Type: 'help' for help on commands
      'man' to read the manual
      'quit' to quit the shell

><fs> add sles.qcow2
><fs> run
><fs> list-filesystems
/dev/sda1: ext3
><fs> mount /dev/sda1 /
 cat /etc/fstab
devpts  /dev/pts          devpts  mode=0620,gid=5 0 0
proc    /proc             proc    defaults        0 0
sysfs   /sys              sysfs   noauto          0 0
debugfs /sys/kernel/debug debugfs noauto          0 0
usbfs   /proc/bus/usb     usbfs   noauto          0 0
tmpfs   /run              tmpfs   noauto          0 0
/dev/disk/by-id/ata-QEMU_HARDDISK_QM00001-part1 / ext3 defaults 1 1

20.3.7 物理イメージから KVM ゲストへの変換 Edit source

libguestfs には、 Xen の仮想マシンや物理マシンを KVM のゲストに変換する機能が用意されています。 下記の章では、物理マシン (ベアメタルマシン) を KVM の仮想マシンに変換する特殊な使用例を説明しています。

ただし、物理マシンから KVM 仮想マシンへの変換は、 openSUSE Leap ではサポート対象外となっており、技術プレビューとしての提供にとどまっています。

物理マシンの変換に際しては、まず物理マシンに関する情報収集を行い、それを変換サーバに送信する必要があります。この作業は、対象のマシン内で virt-p2v と KIWI NG を実行することで行うことができます。

手順 20.2: virt-p2v の使用
  1. まずは必要なパッケージをインストールします:

    > sudo zypper in virt-p2v kiwi-desc-isoboot
    注記
    注記

    ここで説明している手順は、起動可能な DVD を作成するための ISO イメージの作成手順となります。この方法以外にも、 PXE 起動イメージを作成する方法もあります。 KIWI NG での PXE 起動イメージの構築方法について、詳しくは man virt-p2v-make-kiwi をお読みください。

  2. KIWI NG の設定を作成します:

    > virt-p2v-make-kiwi -o /tmp/p2v.kiwi

    -o オプションを指定することで、 KIWI NG の設定ファイルの出力先を指定しています。

  3. 生成された設定内にある config.xml ファイルを必要に応じて修正します。たとえば config.xml ファイルを編集して、システムのキーボードレイアウトを調整するなどの処理があります。

  4. kiwi を利用して ISO イメージを構築します:

    > kiwi --build /tmp/p2v.kiwi1 \
         -d /tmp/build2 \
         --ignore-repos \
         --add-repo http://(リポジトリのパス)3 \
         --type iso

    1

    以前の手順で生成した KIWI NG 設定ディレクトリの場所を指定します。

    2

    KIWI NG が ISO イメージを生成したり、途中のイメージを書き込んだりする際の出力先ディレクトリを指定します。

    3

    zypper lr -d コマンドで出力することのできる、パッケージリポジトリの URL を指定します。

    なお、リポジトリごとに --add-repo オプションを指定してください。

  5. ISO イメージを DVD もしくは USB メモリに書き込みます。このメディアから起動を行うことで、変換対象のマシンを起動することができます。

  6. システムを起動すると、 変換サーバ の接続詳細を尋ねられます。このサーバは、 virt-v2v パッケージがインストールされたマシンを意味します。

    DHCP クライアントよりも複雑なネットワーク設定を行っている場合は、 ネットワークの設定 ボタンを押して、 YaST のネットワーク設定ダイアログを開いてください。

    接続のテスト ボタンを押して、ウイザードの次の手順に進みます。

  7. 変換対象のディスクとネットワークインターフェイスを選択したあと、 CPU の割当数やメモリ、仮想マシン名などの仮想マシン向けのデータを設定します。

    注記
    注記

    何も指定しない場合、作成されたディスクイメージ形式は既定で raw になります。これは 出力形式 の項目内で形式を指定することで、変更を行うことができます。

    仮想マシンの生成方法には 2 種類の仕組みがあります。それぞれ ローカル および libvirt 出力と呼ばれます。前者の場合、仮想マシンのディスクイメージと設定の出力先を 出力ストレージ の項目に指定します。これらは virsh を利用することで、 libvirt の管理する仮想マシンにすることができます。後者の場合は 出力ストレージ 内に定義されたプール内にディスクイメージを配置して、新しく libvirt の管理する仮想マシンを作成します。

    変換開始 を押して開始してください。

20.4 トラブルシューティング Edit source

20.4.1 btrfs 関連の問題 Edit source

btrfs をルートパーティションとしているイメージ (openSUSE Leap の既定値です) に対して guestfs ツールを使用すると、下記のようなエラーメッセージが表示されることがあります:

> virt-ls -a /path/to/sles12sp2.qcow2 /
virt-ls: multi-boot operating systems are not supported

If using guestfish '-i' option, remove this option and instead
use the commands 'run' followed by 'list-filesystems'.
You can then mount file systems you want by hand using the
'mount' or 'mount-ro' command.

If using guestmount '-i', remove this option and choose the
filesystem(s) you want to see by manually adding '-m' option(s).
Use 'virt-filesystems' to see what file systems are available.

If using other virt tools, multi-boot operating systems won't work
with these tools.  Use the guestfish equivalent commands
(see the virt tool manual page).

これは一般に、ゲスト内にスナップショットが存在することによって発生します。この場合、どのスナップショットから起動すべきなのかが判断できないことを表しています。特定のスナップショットを指定して起動する場合は、 -m オプションを指定してください:

> virt-ls -m /dev/sda2:/:subvol=@/.snapshots/2/snapshot -a /path/to/sles12sp2.qcow2 /

20.4.2 環境 Edit source

libguestfs アプライアンス内で問題を分析する場合、環境変数 LIBGUESTFS_DEBUG=1 を指定すると、デバッグメッセージを出力することができます。出力されるコマンドや API コールを guestfish でのコマンドに似た形式で出力したい場合は、環境変数 LIBGUESTFS_TRACE=1 を指定してください。

20.4.3 libguestfs-test-tool Edit source

libguestfs-test-tool ツールは、 libguestfs の基本的な機能が動作しているかどうかを確認するためのテストプログラムです。大量の分析用メッセージと guestfs 環境詳細が出力され、テストイメージを作成して開始しようとします。テストが問題なく完了すると、下記のようなメッセージが末尾付近に現れるはずです:

===== TEST FINISHED OK =====
このページを印刷