OpenStack Nova cannot reboot instance - Unable to create tap device

早上因為某種因素,將 nova compute 強制重開機。當開機完成之後,使用 nova reboot --hard <server> 的方式,想要開啟instance 卻失敗,在 /var/log/nova/nova-compute.log 中看到以下錯誤訊息:

2015-02-11 16:10:54.110 ERROR nova.compute.manager [req-a3d9cf35-82ee-4857-b69d-99ef0c8ca753 b6a90e8c63ad4612917655fb9b04ad92 ecb687200c6a4574bdaf3ea3633c6b3f] [instance: 7bdad622-dd70-49d7-89ca-827d2e86367f] Cannot reboot instance: Unable to create tap device tape10b9639-d8: Device or resource busy

用 ifconfig 與 ip 指令都可以看到該 tap 存在

root@compute-14:~# ifconfig
tape10b9639-d8 Link encap:Ethernet  HWaddr fe:16:3e:cb:8f:29  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:513131 errors:0 dropped:0 overruns:0 frame:0
          TX packets:691944 errors:0 dropped:9397 overruns:0 carrier:0
          collisions:0 txqueuelen:500
          RX bytes:94571524 (94.5 MB)  TX bytes:206871945 (206.8 MB)
root@compute-14:~# ip a | grep tape10b9639-d8
77: tape10b9639-d8: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 500

不過 ovs-vsctl show 倒是沒有看到這個 tap device


直接使用 ifconfig <tap name> down 是沒有辦法讓這張網卡消失,在 StackOverflow 上看到一篇參考文章

試了一下文章中提到 ip link set 的方式,結果沒效

root@compute-14:~# ip link set tape10b9639-d8 down
root@compute-14:~# ip a | grep tape10b9639-d8
77: tape10b9639-d8: <BROADCAST,MULTICAST> mtu 1500 qdisc pfifo_fast state DOWN qlen 500

不過倒是讓我發現 ip link delete <tap name> 可以達成

Solution

root@compute-14:~# ip link delete tape10b9639-d8
root@compute-14:~# ip a | grep tape10b9639-d8

之後再次使用 nova reboot 指令就沒有問題囉