並非所有 XEN VM 在重新啟動 DOM 0 後都會自動啟動
在我的 Xen 主機(Debian Buster 中的 systemd,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 主機重新啟動時自動啟動,有時有些會失敗並在 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
,但重新啟動後,系統日誌中的錯誤消息是相同的。我也找不到任何可疑的東西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 ...
您只會看到,前三個虛擬機網路介面在這次啟動期間確實啟動了,1000 秒後,我在控制台上手動啟動了下一個虛擬機。
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
我該如何進一步調試呢?
在啟動
xendomains.service
所有邏輯卷之前,它看起來可能開始得太早了。vg0
您可能必鬚根據系統配置添加/更改一些依賴項。目前配置導致
xendomains.service
虛擬機嘗試在集群組件(如和虛擬機管理服務)之前啟動。如果您是一個需要這些集群組件服務才能啟動的集群卷組,您應該更改為啟動它們,而不是.corosync.service``heartbeat.service``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...]
我不確定這在 4.11 中是否可用我知道在 6 中它是:
xe pool-param-set uuid=UUID other-config:auto_poweron=true
當您執行“xe vm-list”時,它將為您提供 UUID。