私のXenホスト(Debian Buster、Xen 4.11でシステム化)では、通常、すべてのゲストVMを自動的に起動します。すべての仮想マシン構成を/etc/xen/auto/
基本構成へのリンクとして追加しました。
/etc/xen/auto/proxy.cfg -> /etc/xen/proxy.cfg
/etc/xen/auto/vm04.matrix.cfg -> /etc/xen/vm04.matrix.cfg
...
場合によっては、DOM0 ホストの再起動時に一部のゲスト VM が自動的に起動し、時には一部の VM が失敗し、システム ログに次のエラーが発生します。
$ grep "Starting Xen domain" /var/log/syslog
May 12 08:38:36 dom0 xendomains[1103]: Starting Xen domain proxy (from /etc/xen/auto/proxy.cfg)...done.
May 12 08:38:36 dom0 xendomains[1103]: Starting Xen domain vm04.matrix.de (from /etc/xen/auto/vm04.matrix.cfg)...failed.
失敗した場合の\var\log\syslog
起動中のエラーは次のとおりです。
Starting Xen domain vm04.matrix (from /etc/xen/auto/vm04.matrix.cfg)...failed.
libxl: error: libxl_device.c:417:libxl__device_disk_set_backend: Disk vdev=xvda2 failed to stat: /dev/vg0/vm04.matrix-disk: No such file or directory
libxl: error: libxl_create.c:983:initiate_domain_create: Domain 4:Unable to set disk defaults for disk 0
libxl: error: libxl_domain.c:1034:libxl__destroy_domid: Domain 4:Non-existant domain
libxl: error: libxl_domain.c:993:domain_destroy_callback: Domain 4:Unable to destroy guest
libxl: error: libxl_domain.c:920:domain_destroy_cb: Domain 4:Destruction of domain failed
---
Starting Xen domain proxy (from /etc/xen/auto/proxy.cfg)...failed.
libxl: error: libxl_device.c:417:libxl__device_disk_set_backend: Disk vdev=xvda2 failed to stat: /dev/vg0/proxy-disk: No such file or directory
libxl: error: libxl_create.c:983:initiate_domain_create: Domain 1:Unable to set disk defaults for disk 0
libxl: error: libxl_domain.c:1034:libxl__destroy_domid: Domain 1:Non-existant domain
libxl: error: libxl_domain.c:993:domain_destroy_callback: Domain 1:Unable to destroy guest
libxl: error: libxl_domain.c:920:domain_destroy_cb: Domain 1:Destruction of domain failed
ファイルとファイルはマウントポイントを除いて/etc/xen/proxy.cfg
同じです。/etc/xen/vm04.matrix.cfg
後で手動で起動するとxen create /etc/xen/vm04.matrix.cfg
正常に起動しますが、ホストの起動中は自動的に起動しません。
デバッグ
問題をデバッグするためにこれを追加しました。/etc/default/grub
GRUB_CMDLINE_XEN_DEFAULT="dom0_mem=4096M,max:4096M loglvl=all guest_loglvl=all"
を呼び出しましたが、update-grub
再起動後もシステムログのエラーメッセージは同じです。どちらでも怪しい点が見つかりませんdmesg
。ゲストホスト名への言及はありません。これがあなたが見ることができるすべてです。問題は次のとおりです。
# dmesg|grep dev|tail
[ 11.348931] xen:xen_evtchn: Event-channel device installed
[ 22.006020] device vif3.0 entered promiscuous mode
[ 25.362878] device vif5.0 entered promiscuous mode
[ 28.636912] device vif6.0 entered promiscuous mode
[ 1004.501654] device vif7.0 entered promiscuous mode
...
この起動中に最初の3つのVMネットワークインターフェイスが表示され、1000秒後にコンソールから次のVMを手動で起動したことがわかります。
Xenは正常にロードされます。
$ systemctl --type=service | grep -i xen
xen.service loaded active running LSB: Xen daemons
xendomains.service loaded active running LSB: Start/stop secondary xen domains
問題の最良のヒントは、起動中にボリュームが存在しないことです。
/dev/vg0/proxy-disk: No such file or directory
たぶんxenが起動プロセスで早すぎるのではないでしょうか?
systemctl cat xen.service|uniq
# /run/systemd/generator.late/xen.service
# Automatically generated by systemd-sysv-generator
[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/init.d/xen
Description=LSB: Xen daemons
Before=multi-user.target
Before=graphical.target
After=remote-fs.target
[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SuccessExitStatus=5 6
ExecStart=/etc/init.d/xen start
ExecStop=/etc/init.d/xen stop
systemctl cat xendomains.service|uniq
# /run/systemd/generator.late/xendomains.service
# Automatically generated by systemd-sysv-generator
[Unit]
Documentation=man:systemd-sysv-generator(8)
SourcePath=/etc/init.d/xendomains
Description=LSB: Start/stop secondary xen domains
Before=multi-user.target
Before=graphical.target
Before=corosync.service
Before=heartbeat.service
Before=libvirtd.service
After=network-online.target
After=remote-fs.target
After=xen.service
After=drbd.service
After=iscsi.service
After=openvswitch-switch.service
After=nfs-kernel-server.service
Wants=network-online.target
[Service]
Type=forking
Restart=no
TimeoutSec=5min
IgnoreSIGPIPE=no
KillMode=process
GuessMainPID=no
RemainAfterExit=yes
SuccessExitStatus=5 6
ExecStart=/etc/init.d/xendomains start
ExecStop=/etc/init.d/xendomains stop
ExecReload=/etc/init.d/xendomains reload
どのようにさらにデバッグできますか?
答え1
xendomains.service
すべての論理ボリュームがアクティブになるvg0
前に早すぎるように見えることがあります。システム構成に合わせていくつかの依存関係を追加/変更する必要があるかもしれません。
現在の構成により、xendomains.service
仮想マシンが起動を試みます。今後corosync.service
VMheartbeat.service
管理サービスなどのクラスタコンポーネントlibvirtd.service
。クラスタボリュームグループでアクティブにするためにこれらのクラスタコンポーネントサービスが必要な場合は、代わりに起動するように変更するvg0
必要があります。xendomains.service
After
Before
libvirtd
サーバーサイドデーモンは実際に他の仮想マシンを起動および停止する役割を担うため、他の仮想マシンを起動しようとする試みは開始後にのみ実行する必要がありますlibvirtd.service
。
systemctl edit xendomains.service
指定したエディタで空の一時ファイルを開く必要があります。これは自動的にそのデバイスのオーバーレイファイルになりますxendomains.service
。/etc/systemd/system/xendomains.service.d/override.conf
ただし、マニュアルページには次のようにsystemd.unit(5)
記載されています。
依存関係(
After=
など)は空のリストにリセットできないため、依存関係はドロップインからのみ追加できます。依存関係を削除するには、ユニット全体を上書きする必要があります。
したがって、オーバーレイファイルの生成はここでは機能しません。代わりに、既存の自動生成された単位ファイルを次の場所にコピーする必要があります/etc/systemd/system/xendomains.service
。
systemctl cat xendomains.service | uniq >/etc/systemd/system/xendomains.service
/etc/systemd/system/xendomains.service
その後、お気に入りのエディタを使用して編集し、最後に実行してsystemctl daemon-reload
変更を適用できます。次のように依存関係リストを編集する必要があります。
[...the lines before this should be left as is...]
Description=LSB: Start/stop secondary xen domains
Before=multi-user.target
Before=graphical.target
After=corosync.service
After=heartbeat.service
After=libvirtd.service
After=network-online.target
After=remote-fs.target
After=xen.service
After=drbd.service
After=iscsi.service
After=openvswitch-switch.service
After=nfs-kernel-server.service
Wants=network-online.target
[...the lines after this should be left as is...]
答え2
これが4.11で利用可能かどうかはわかりませんが、6では次のようになります。
xe pool-param-set uuid=UUID other-config:auto_poweron=true
「xe vm-list」を実行すると、UUIDが提供されます。
答え3
解決策
すべての仮想マシンを起動できるソリューションがない場合は、/etc/xen/autoのすべての設定を確認し、起動していない場合は手動で起動する新しいスクリプトを作成できます。
1.ファイル生成/usr/local/sbin/xen-start-all-auto
#!/bin/bash
cd /etc/xen/auto/
for x in *; do
d=$(echo $x|sed 's/.cfg$//g')
echo check $d ...
lvs|grep $d-disk|grep -v snap|grep -q -- '-ao'
if [ $? == 1 ]; then
xen create $x
else
echo ok
fi
done
実行可能にします。
sudo chmod +x /usr/local/sbin/xen-start-all-auto
2. 一度起動するシステムサービスの作成
ファイルを生成する/etc/systemd/system/xen-autostart.service
[Unit]
Description=starts all XEN vms in /etc/xen/auto if they are not started already 1 minute after system start
[Service]
TimeoutStartSec=infinity
ExecStartPre=/bin/sleep 60
ExecStart=/bin/bash /usr/local/sbin/xen-start-all-auto
[Install]
WantedBy=default.target
システムアップデート:
systemctl daemon-reload
systemctl enable xen-autostart
systemctl start xen-autostart &