无法关闭eth0(主界面)


51

我无法ifdown在Debian 6.0.5上使用界面:

user@box:/etc/network$ sudo ifdown eth0 && sudo ifup eth0
ifdown: interface eth0 not configured
SIOCADDRT: File exists
Failed to bring up eth0.

user@box:/etc/network$ cat interfaces 
auto lo
iface lo inet loopback

allow-hotplug eth0 
allow-hotplug eth1 

auto eth0
iface eth0 inet static
address 10.0.0.1
netmask 255.255.255.0
gateway 10.0.0.254

auto eth1
iface eth1 inet manual

根据marco的要求:

user@box:/etc/network/$ cat /run/network/ifstate 
lo=lo
eth1=eth1

4
是什么/run/network/ifstate内容?
马可(Marco)

我已经用该文件的内容更新了我的问题,eth0不在其中。快速的“ Google”正在告诉我该文件的含义(因为我之前从未访问过),我想我可以看到问题出在哪里:)
jwbensley 2012年

@马可; 这确实解决了我的问题,如果您将其发布为答案,我可以将其标记为正确:)
jwbensley 2012年

Answers:


55

检查文件的内容/run/network/ifstateifupifdown使用此文件来记下可以启动和关闭哪些网络接口。因此,ifup当使用其他联网工具来调出接口(例如ifconfig)时,很容易混淆。

人ifup

该程序会记录网络接口是打开还是关闭。在特殊情况下,这些记录可能与接口的实际状态不一致。例如,使用ifup调出并后来使用取消配置的接口ifconfig仍将记录为up。要解决此问题,您可以使用该--force选项强制ifupifdown运行配置或取消配置命令,尽管它认为接口的当前状态是什么。


8
要添加到此答案,我必须添加eth0=eth0/run/network/ifstate使其能够识别接口并正确配置它。这个答案帮助我指向该文件,但是没有建议添加该文件,这解决了我类似的问题。
David Parks

1
@DavidParks你肯定接口被标记为auto/etc/network/interfaces?它应显示在其中,/run/network/ifstate而无需手动修改文件。
Marco Marco

1
--force是我的答案;事实证明,ifup由于输入的命令失败,最初并没有打开接口/etc/network/if-pre-up.d; 幸运的是我有网络!
sanmai

32

ifdown是一个高级程序,它可以执行很多您可能不需要的事情。此外,它并非在任何地方都可用。更便携的方式可能对您有用:

$ sudo ifconfig eth0 down

如果不能ifup,则可能存在一些配置问题。ifconfig eth0 up在这种情况下,手动提出来可能不正确。在Debian上,它ifup是一个二进制可执行文件,因此您可能必须strace找出它的挂起位置:

$ sudo strace -e open ifup eth0

这将告诉您ifup正在运行的文件正在打开,这可能会提示您问题所在。

在其他系统上(例如RHEL和派生类)ifup是shell脚本,因此调试起来容易得多:

# sh -x `which ifup` eth0

运行shell脚本sh -x使之能够打印出它运行的每一行,因此您可以跟踪执行情况。


答案不明确,但马可(Marco)发现了问题。我确实尝试sudo ifconfig eth0 down && sudo ifconfig eth0 up过上下摆动接口,但是我试图手动触发我一直在编写的if-up脚本,但没有这样做。更新我的/ etc / network / run / ifstate文件之后,ifdown / up现在可以工作了。谢谢您的信息!:)
jwbensley 2012年

忘了说-带-x选项的好主意!谢谢!
jwbensley 2012年

1
ifdown是一个高级程序,可以执行您可能需要做的很多事情。ifconfig eth0 down具有更高的可移植性,并且始终可以运行,但是它不执行ifdown可能执行的清理任务。
吉尔斯(Gillles)“所以-别再邪恶了”

我并不是要建议您一直使用ifconfig,避免使用ifup/down。我建议仅将其作为故障排除步骤。据我了解,这个问题原来是使用代替的结果,从而使高级机制感到困惑。但是,发布答案时我并不知道。ifconfigifup/down
沃伦·杨

20

在ethX未在中正确配置时,我已经看到了这一点 /etc/network/interfaces。这需要类似:

auto eth0
   iface eth0 inet dhcp

即使/etc/network/interfaces文件配置不正确,您仍然可以使用以下命令关闭eth0:

$ sudo ip link set eth0 down

这正是我发生的事情。我忘了附加到auto。谢谢。
迈克

2

对于任何努力解决此问题的人:

我在/ run / network中检查了文件ifstate。“ interface-name”。

它是空的,所以我在/ run / network的ifstate。“ interface-name”文件中包括了“ interface-name”(eth0)。



0

我发现对我有帮助的是调用rm命令以删除其中的锁定文件/run/network/

这样做ls -la,您应该会看到一个隐藏的.ifstate文件或该名称下的内容。

删除它,然后尝试: ifdown && ifup

如果您担心自己可能会破坏某些东西,只需在目录外复制该文件,然后删除目录内的文件即可。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.