在我的Xen主机( Debian中的systemd,Xen 4.11)上,我通常会自动启动所有的来宾VM。我在/etc/xen/auto/中将所有VM信任作为链接添加到底层配置中,如
/etc/xen/auto/proxy.cfg -> /etc/xen/proxy.cfg
/etc/xen/auto/vm04.matrix.cfg -> /etc/xen/vm04.matrix.cfg
...有时,一些来宾VM在重新启动DOM0主机时会自动启动,有时会失败,并在syslog中抛出这些错误:
$ 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,但是在重新启动之后,syslog中的错误消息是相同的。我在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
...您只看到,前三个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 stopsystemctl 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如何进一步调试?
发布于 2020-06-01 10:02:08
如果没有任何解决方案来启动所有VM,则可以创建一个新脚本,该脚本检查/etc/xen/auto中的所有信任项,并在未启动时手动启动它们。
/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启动的systemd服务
创建一个文件/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 &发布于 2020-05-26 07:01:22
看起来,在激活xendomains.service中的所有逻辑卷之前,vg0可能启动得太早了。您可能必须添加/更改一些依赖项,以适合您的系统配置。
当前的配置导致xendomains.service,因此VM尝试在集群组件(如corosync.service和heartbeat.service以及VM管理服务libvirtd.service )之前启动。如果您的vg0是一个群集卷组,它需要这些集群组件服务才能激活,则应该更改xendomains.service以启动After,而不是Before。
而且,由于libvirtd是一个服务器端守护进程,它实际上处理其他VM的启动和停止,所以启动其他VM的尝试很可能只在启动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...]发布于 2020-05-29 14:36:20
我不确定这是否在4.11,我知道在6,它是:
xe pool-param-set uuid=UUID other-config:auto_poweron=true当您执行"xe vm-list“时,将给出UUID。
https://unix.stackexchange.com/questions/586150
复制相似问题