Nie można ifdown eth0 (główny interfejs)

51

Nie mogę ifdowninterfejsu w Debianie 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

Zgodnie z wnioskiem marco:

user@box:/etc/network/$ cat /run/network/ifstate 
lo=lo
eth1=eth1
jwbensley
źródło
4
Co /run/network/ifstatezawiera
Marco,
Zaktualizowałem moje pytanie o zawartość tego pliku, nie ma tam eth0. Szybkie „Google” mówi mi o znaczeniu tego pliku (ponieważ nie uzyskiwałem go wcześniej), myślę, że widzę, gdzie jest problem :)
jwbensley
@Marco; Naprawdę naprawiło to mój problem, jeśli opublikujesz to jako odpowiedź, mogę oznaczyć go jako poprawny :)
jwbensley,

Odpowiedzi:

55

Sprawdź zawartość pliku /run/network/ifstate. ifupi ifdownużyj tego pliku, aby zanotować, które interfejsy sieciowe można uruchamiać w górę iw dół. W ten sposób ifupmożna łatwo pomylić, gdy inne narzędzia sieciowe są używane do wywołania interfejsu (np ifconfig.).

Od człowieka, jeśli

Program rejestruje, czy interfejsy sieciowe działają w górę, czy w dół. W wyjątkowych okolicznościach zapisy te mogą stać się niezgodne z rzeczywistymi stanami interfejsów. Na przykład interfejs, który został uruchomiony przy użyciu ifup, a później zdekonfigurowany przy użyciu, ifconfigbędzie nadal rejestrowany jako uruchomiony. Aby to naprawić, możesz użyć --forceopcji wymuszenia ifup lub ifdownuruchomienia poleceń konfiguracji lub dekonfiguracji, pomimo tego, co uważa za aktualny stan interfejsu.

Marco
źródło
8
Aby dodać do tej odpowiedzi, musiałem dodać eth0=eth0do /run/network/ifstatedostać to rozpoznać interfejs i skonfigurować go poprawnie. Ta odpowiedź pomogła mi wskazać plik, ale przestałem sugerować ten dodatek, co rozwiązało mój podobny problem.
David Parks,
1
@DavidParks Czy na pewno interfejs jest oznaczony jako autow /etc/network/interfaces? Powinien pojawić się /run/network/ifstatebez potrzeby ręcznej modyfikacji pliku.
Marco
1
--forcebyła dla mnie odpowiedź; okazało się, ifupże nie wywołało interfejsu przede wszystkim z powodu niepowodzenia polecenia /etc/network/if-pre-up.d; na szczęście w ogóle mam sieć!
sanmai
32

ifdownto program wysokiego poziomu, który wykonuje wiele rzeczy, których możesz nie potrzebować. Ponadto nie jest dostępny wszędzie. Bardziej przenośny sposób może Ci pomóc:

$ sudo ifconfig eth0 down

Jeśli nie możesz tego ifupzrobić, prawdopodobnie masz problem z konfiguracją. Ręczne przedstawienie tego ifconfig eth0 upprawdopodobnie nie jest właściwe w tym przypadku. Na Debianie ifupjest wykonywalnym plikiem binarnym, więc prawdopodobnie będziesz musiał to stracezrobić, aby dowiedzieć się, gdzie się rozłącza:

$ sudo strace -e open ifup eth0

To powie ci, które pliki ifupotwierają się podczas działania, co może wskazać ci problem.

W innych systemach (np. RHEL i pochodne) ifupjest skrypt powłoki, więc o wiele łatwiej jest debugować:

# sh -x `which ifup` eth0

Uruchomienie skryptu powłoki sh -xpowoduje, że wypisuje on każdą uruchomioną linię, dzięki czemu można śledzić wykonanie.

Warren Young
źródło
Poważna odpowiedź, ale Marco znalazł problem. Próbowałem, sudo ifconfig eth0 down && sudo ifconfig eth0 upktóry przeskakiwałby interfejs w górę iw dół, ale próbowałem ręcznie uruchomić skrypt if-up, który pisałem, ale to nie działało. Po zaktualizowaniu mojego pliku / etc / network / run / ifstate, ifdown / up działa teraz. Dziękuję za informację! :)
jwbensley,
Zapomniałem powiedzieć, świetny pomysł z opcją -x! Dzięki!
jwbensley,
1
ifdownto program wysokiego poziomu, który robi wiele rzeczy, których możesz potrzebować. ifconfig eth0 downjest bardziej przenośny i zawsze można go uruchomić, ale nie wykonuje on zadań czyszczenia, które ifdownmogłyby wykonać.
Gilles „SO- przestań być zły”
Nie chcę sugerować, że używasz ifconfigcały czas, unikając ifup/down. Zasugerowałem to tylko jako krok do rozwiązania problemu. Jak rozumiem problem, okazało się, że jest on wynikiem użycia ifconfigzamiast ifup/down, co dezorientuje mechanizmy wysokiego poziomu. Ale nie wiedziałem o tym, kiedy opublikowałem swoją odpowiedź.
Warren Young,
20

Widziałem to wcześniej, gdy ethX nie był poprawnie skonfigurowany /etc/network/interfaces. To wymaga czegoś takiego:

auto eth0
   iface eth0 inet dhcp

Nawet przy nieprawidłowo skonfigurowanym /etc/network/interfacespliku nadal możesz obniżyć eth0 za pomocą:

$ sudo ip link set eth0 down
Alex Leach
źródło
To właśnie mi się przydarzyło. Zapomniałem go dołączyć auto. Dzięki.
Mike,
2

Dla każdego, kto zmaga się z tym problemem:

Sprawdziłem plik ifstate. „Nazwa-interfejsu” w / run / network.

Był pusty, więc dołączyłem plik „nazwa-interfejsu” (eth0) do pliku ifstate. „Nazwa-interfejsu” w katalogu / run / network.

użytkownik9885365
źródło
1

Dodaj eth0=eth0do /run/network/ifstate. To zadziałało dla mnie

Jeroen
źródło
0

To, co znalazłem pomogło mi, to wywołać rmpolecenie, aby usunąć plik blokady/run/network/

Zrób ls -lai powinieneś zobaczyć ukryty .ifstateplik lub coś pod tą nazwą.

Usuń to, a następnie spróbuj: ifdown && ifup

Jeśli martwisz się, możesz coś zepsuć, po prostu zrób kopię tego pliku poza katalogiem i usuń ten z katalogu.

Hunter Lowe
źródło