바이너리가 /etc/qemu-ifup
시작될 때 실행되는 다음 스크립트 가 있습니다 ./usr/bin/qemu-system-i386
#!/bin/sh
set -x
switch=br0
if [ -n "$1" ];then
/usr/sbin/tunctl -u `whoami` -t $1
/sbin/ip link set dev $1 up
sleep 0.5s
/sbin/brctl addif $switch $1
exit 0
else
echo "Error: no interface specified"
exit 1
fi
문제는 tunctl
장치나 리소스가 사용 중이라고 불평하는 것입니다.
root@VM-host:~# qemu -hda /root/1.raw -device e1000,netdev=net0,mac=DE:AD:BE:EF:69:01 -netdev tap,id=net0 -display vnc=:1
+ switch=br0
+ [ -n tap0 ]
+ whoami
+ /usr/sbin/tunctl -u root -t tap0
TUNSETIFF: Device or resource busy
+ /sbin/ip link set dev tap0 up sleep 0.5s
Error: either "dev" is duplicate, or "sleep" is a garbage.
+ /sbin/brctl addif br0 tap0
+ exit 0
간단히 실행하면 아무 문제 없이 /usr/sbin/tunctl -u root -t tap0
then tap0
이 생성됩니다.
root@VM-host:~# /usr/sbin/tunctl -u root -t tap0
Set 'tap0' persistent and owned by uid 0
root@VM-host:~#
이 동작의 원인이 무엇인지 아시나요?
답변1
(언제부터인지는 모르겠습니다) qemu는 먼저 탭을 생성한 다음 스크립트를 호출합니다 /etc/qemu-ifup
. 따라서 동일한 수도꼭지가 이미 존재한다는 이유로 오류 보고서가 표시됩니다.
참조: qemu 소스 코드: ( net/tap-linux.c
기능 보기:) tap_open()
.
답변2
오류 메시지는 "Error: either "dev" is duplicate, or "sleep" is a garbage"
문제의 원인을 알려줍니다.
Tap 인터페이스를 불러오려면 다음 명령을 사용해야 합니다.
/sbin/ip link set $1 up