我遇到一个问题,虚拟机在启动时需要一些时间才能连接到本地网络。
我使用以下命令创建虚拟机:
virt-install \
--connect qemu:///system \
--name demo \
--noautoconsole \
--disk path=/demo.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback \
--disk path=/base.qcow2,device=disk,format=qcow2,bus=virtio,cache=writeback \
--import \
--vcpus 1 \
--virt-type kvm \
--ram 256 \
--hvm \
--os-type linux
systemd
当我在运行 Ubuntu 14.04.4 LTS 的主机上创建计算机时,一切正常:虚拟机启动并在运行脚本之前连接到 LAN 。然而,当主机运行 Debian 8.5 时,虚拟机需要一段时间才能连接,并且systemd
脚本开始运行,然后才能真正使用网络资源。
在调试过程中,我创建了以下脚本:
#!/bin/bash
date >> /ping.log
ping -c 3 -W 3 "192.168.1.7" >> /ping.log
date >> /ping.log
curl google.com >> ping.log
date >> /ping.log
下面是相应的systemd
配置:
[Unit]
Description=Demo
Wants=network-online.target
After=network-online.target
[Service]
Type=oneshot
ExecStart=/demo-init
[Install]
WantedBy=multi-user.target
机器启动后,ping.log
包含以下内容:
Tue Jul 19 12:57:56 UTC 2016
PING 192.168.1.7 (192.168.1.7) 56(84) bytes of data.
From 192.168.1.35 icmp_seq=1 Destination Host Unreachable
From 192.168.1.35 icmp_seq=2 Destination Host Unreachable
From 192.168.1.35 icmp_seq=3 Destination Host Unreachable
--- 192.168.1.7 ping statistics ---
3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2001ms
pipe 3
Tue Jul 19 12:57:59 UTC 2016
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
[...]
</BODY></HTML>^M
Tue Jul 19 12:58:16 UTC 2016
代表着:
ping
失败,- 连接需要20秒。
相比之下,当在 Ubuntu 主机上运行同一台机器时,以下内容存储在ping.log
:
Tue Jul 19 13:18:12 UTC 2016
PING 192.168.1.7 (192.168.1.7) 56(84) bytes of data.
64 bytes from 192.168.1.7: icmp_seq=1 ttl=64 time=2.27 ms
64 bytes from 192.168.1.7: icmp_seq=2 ttl=64 time=0.711 ms
64 bytes from 192.168.1.7: icmp_seq=3 ttl=64 time=5.47 ms
--- 192.168.1.7 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.711/2.819/5.472/1.981 ms
Tue Jul 19 13:18:14 UTC 2016
<HTML><HEAD><meta http-equiv="content-type" content="text/html;charset=utf-8">
[...]
</BODY></HTML>^M
Tue Jul 19 13:18:14 UTC 2016
这里:
ping
成功了,- 需要 2 秒,这是实际执行操作的时间
ping
。
实际主机(Debian 和 Ubuntu)具有不同的硬件(包括不同数量的 NIC),因此很难比较配置。然而,虚拟机的部署方式完全相同,基于预装 Debian 的相同基础磁盘,并且具有完全相同的/etc/network/interfaces
:
# The loopback network interface
auto lo
iface lo inet loopback
# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.35
netmask 255.255.240.0
network 192.168.0.0
broadcast 192.168.3.255
gateway 192.168.1.1
dns-nameservers 192.168.1.3 192.168.1.4 8.8.8.8 8.8.4.4
我有两个问题:
造成如此巨大延误的可能原因是什么?
我是不是误会了的目的
network-online.target
?我认为它可以保证运行脚本时的基本连接。既然事实并非如此,那么这样做的目的是什么?