Не могу ifdown 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

По просьбе Марко:

user@box:/etc/network/$ cat /run/network/ifstate 
lo=lo
eth1=eth1
jwbensley
источник
4
Что /run/network/ifstateсодержит?
Марко
Я обновил свой вопрос с содержанием этого файла, eth0 там нет. Быстрый «Google» сообщает мне значение этого файла (поскольку я не обращался к нему раньше), я думаю, что я могу видеть, где проблема :)
jwbensley
@Marco; Это действительно исправило мою проблему, если вы
опубликуете

Ответы:

55

Проверьте содержимое файла /run/network/ifstate. ifupи ifdownиспользуйте этот файл, чтобы отметить, какие сетевые интерфейсы могут быть включены и выключены. Таким образом, ifupможно легко запутаться, когда другие сетевые инструменты используются для вызова интерфейса (например ifconfig).

От человека ifup

Программа ведет учет того, работают ли сетевые интерфейсы или нет. При исключительных обстоятельствах эти записи могут стать несовместимыми с реальными состояниями интерфейсов. Например, интерфейс, который был запущен с использованием ifup, а затем был удален из конфигурации с использованием, ifconfigвсе равно будет записан как up. Чтобы исправить это , вы можете использовать --forceопцию , чтобы заставить ifup или ifdownзапускать команды конфигурации или deconfiguration , несмотря на то , что он считает , что текущее состояние интерфейса будет.

Marco
источник
8
Чтобы добавить к этому ответу, мне нужно было добавить, eth0=eth0чтобы /run/network/ifstateон распознал интерфейс и правильно его настроил. Этот ответ помог мне указать на файл, но не стал предлагать это дополнение, что и решило мою похожую проблему.
Дэвид Паркс
1
@DavidParks Вы уверены, что интерфейс помечен как autoв /etc/network/interfaces? Он должен появиться /run/network/ifstateбез необходимости вручную изменять файл.
Марко
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это скрипт оболочки, поэтому отладку намного проще:

# sh -x `which ifup` eth0

Запуск сценария оболочки с помощью sh -xнего печатает каждую строку, которую он запускает, так что вы можете отслеживать выполнение.

Уоррен Янг
источник
Потрясающий ответ, но Марко нашел проблему. Я действительно пытался sudo ifconfig eth0 down && sudo ifconfig eth0 upпереключать интерфейс вверх и вниз, но я пытался вручную запустить сценарий if-up, который я писал, но он этого не делал. После обновления моего файла / etc / network / run / ifstate теперь работает ifdown / up. Спасибо за вашу информацию, хотя! :)
jwbensley
Забыл сказать, отличная идея с опцией -x! Спасибо!
jwbensley
1
ifdownэто программа высокого уровня, которая делает много вещей, которые могут вам понадобиться. ifconfig eth0 downявляется более переносимым и всегда может быть запущен, но он не выполняет задачи очистки, которые ifdownмогли бы сделать.
Жиль "ТАК - перестань быть злым"
Я не хочу предлагать вам использовать ifconfigвсе время, избегая ifup/down. Я предложил это только для устранения неполадок. Как я понимаю, проблема возникла в результате использования, ifconfigа не ifup/downпутаницы механизмов высокого уровня. Но я не знал об этом, когда отправил свой ответ.
Уоррен Янг
20

Я видел это раньше, когда ethX не был правильно настроен в /etc/network/interfaces. Это нужно что-то вроде: -

auto eth0
   iface eth0 inet dhcp

Даже с неправильно настроенным /etc/network/interfacesфайлом вы все равно можете отключить eth0 с помощью:

$ sudo ip link set eth0 down
Алекс Лич
источник
Это именно то, что случилось со мной. Я забыл добавить это к auto. Благодарю.
Майк
2

Для тех, кто борется с этой проблемой:

Я проверил файл ifstate. "Имя-интерфейса" в / run / network.

Он был пуст, поэтому я включил «имя-интерфейса» (eth0) в файл ifstate. «Имя-интерфейса» в / run / network.

user9885365
источник
1

Добавить eth0=eth0в /run/network/ifstate. Это сработало для меня

Йерун
источник
0

То, что я нашел, помогло мне вызвать rmкоманду, чтобы удалить файл блокировки внутри/run/network/

Сделайте, ls -laи вы должны увидеть скрытый .ifstateфайл или что-то под этим именем.

Удалите это и попробуйте: ifdown && ifup

Если вы беспокоитесь, что вы можете что-то сломать, просто сделайте копию этого файла вне каталога и удалите копию внутри каталога.

Хантер Лоу
источник