У меня проблема с виртуальной машиной, которой требуется время для подключения к локальной сети при загрузке.
Я создаю виртуальную машину с помощью следующей команды:
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
Когда я создаю машину на хосте под управлением Ubuntu 14.04.4 LTS, все работает нормально: виртуальная машина загружается и подключается к локальной сети прямо перед запуском скрипты systemd
. Однако, когда на хосте запущен 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
[...]
^M
Tue Jul 19 12:58:16 UTC 2016
Это означает, что:
ping
не работает, Для сравнения, при запуске той же машины на хосте 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
[...]
^M
Tue Jul 19 13:18:14 UTC 2016
Здесь:
ping
успешно, пинг
. Фактические хосты (Debian и Ubuntu) имеют разное оборудование (включая разное количество сетевых карт), что затрудняет сравнение конфигурации. Однако виртуальная машина развертывается точно так же, основана на том же базовом диске с предустановленным 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
? Я думал, что это гарантирует базовое соединение при запуске скрипта. Поскольку на самом деле это не так, для чего это нужно?
Нашел. В аналогичном случае автор жаловался, что:
Мне нужно ждать около 20 секунд, пока моя сеть не подключится.
Эта задержка вызвана протоколом Spanning Tree Protocol (STP)
. Действительно, одно из различий заключалось в том, что / etc / network / interfaces
Debian хост содержал bridge_stp на
, тогда как в Ubuntu не было оператора bridge_stp
.