Debian
為什麼在啟動時建立 LAN 連接需要這麼長時間?
我有一個虛擬機在啟動時需要時間連接到本地網路的問題。
我使用以下命令創建虛擬機:
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
腳本之前啟動並連接到 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
?我認為它會在執行腳本時保證基本連接。既然事實並非如此,那它的目的是什麼?
找到了。在類似的案例中,送出人抱怨說:
我必須等待大約 20 秒,直到我的網路啟動。
看來:
此延遲是由生成樹協議 (STP) 引起的
確實,其中一個區別是
/etc/network/interfaces
Debian 主機包含bridge_stp on
,而在 Ubuntu 上,沒有bridge_stp
聲明。