Tidak dapat ifdown eth0 (antarmuka utama)

51

Saya tidak bisa ifdownmenggunakan antarmuka di 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

Seperti yang diminta oleh marco:

user@box:/etc/network/$ cat /run/network/ifstate 
lo=lo
eth1=eth1
jwbensley
sumber
4
Apa yang /run/network/ifstatemengandung?
Marco
Saya telah memperbarui pertanyaan saya dengan isi file ini, eth0 tidak ada di sana. "Google" cepat memberi tahu saya arti file ini (karena saya belum mengaksesnya sebelumnya), saya pikir saya bisa melihat di mana masalahnya :)
jwbensley
@Marco; Ini memang telah memperbaiki masalah saya, jika Anda memposting ini sebagai jawaban saya dapat menandainya sebagai benar :)
jwbensley

Jawaban:

55

Periksa isi file /run/network/ifstate. ifupdan ifdowngunakan file ini untuk mencatat antarmuka jaringan mana yang dapat dinaikkan dan turun. Dengan demikian, ifupdapat dengan mudah bingung ketika alat jaringan lain digunakan untuk membuka antarmuka (misalnya ifconfig).

Dari man ifup

Program ini menyimpan catatan apakah antarmuka jaringan naik atau turun. Dalam keadaan luar biasa catatan ini dapat menjadi tidak konsisten dengan keadaan sebenarnya dari antarmuka. Misalnya, antarmuka yang dibesarkan menggunakan ifup dan yang kemudian dikonfigurasi ulang menggunakan ifconfigmasih akan direkam sebagai naik. Untuk memperbaikinya, Anda dapat menggunakan --forceopsi untuk memaksa ifup atau ifdownmenjalankan perintah konfigurasi atau dekonfigurasi meskipun apa yang dianggap sebagai kondisi antarmuka saat ini.

Marco
sumber
8
Untuk menambah jawaban ini, saya harus menambahkan eth0=eth0agar /run/network/ifstatedapat mengenali antarmuka dan mengkonfigurasinya dengan benar. Jawaban ini membantu mengarahkan saya ke file, tetapi berhenti menyarankan penambahan itu, yang memecahkan masalah saya yang serupa.
David Parks
1
@DavidParks Apakah Anda yakin antarmuka ditandai sebagai autodi /etc/network/interfaces? Itu harus muncul /run/network/ifstatetanpa perlu memodifikasi file secara manual.
Marco
1
--forceadalah jawaban untuk saya; ternyata ifuptidak membawa antarmuka di tempat pertama karena perintah yang gagal di /etc/network/if-pre-up.d; beruntung saya memiliki jaringan sama sekali!
sanmai
32

ifdownadalah program tingkat tinggi yang melakukan banyak hal yang mungkin tidak Anda butuhkan. Selain itu, tidak tersedia di mana-mana. Cara yang lebih portabel mungkin cocok untuk Anda:

$ sudo ifconfig eth0 down

Jika Anda tidak bisa ifup, kemungkinan Anda memiliki beberapa masalah konfigurasi. Membicarakannya secara manual ifconfig eth0 upmungkin bukan hal yang benar dalam kasus itu. Di Debian, ifupini adalah biner yang dapat dieksekusi, jadi Anda mungkin harus melakukannya straceuntuk mencari tahu di mana ia ditutup:

$ sudo strace -e open ifup eth0

Itu akan memberi tahu Anda file mana ifupyang dibuka saat berfungsi, yang mungkin akan memberi Anda petunjuk tentang masalah tersebut.

Pada sistem lain (mis. RHEL dan turunannya) ifupadalah skrip shell, jadi jauh lebih mudah untuk di-debug:

# sh -x `which ifup` eth0

Menjalankan skrip shell dengan sh -xmembuatnya mencetak setiap baris yang dijalankannya, sehingga Anda dapat melacak eksekusi.

Warren Young
sumber
Sebuah jawaban yang retak, tetapi Marco telah menemukan masalahnya. Saya memang mencoba sudo ifconfig eth0 down && sudo ifconfig eth0 upyang akan mengepakkan antarmuka ke atas dan ke bawah tetapi saya mencoba untuk secara manual memicu skrip if-up yang telah saya tulis dan itu tidak melakukannya. Setelah memperbarui file / etc / network / run / ifstate saya, ifdown / up berfungsi sekarang. Terima kasih atas info Anda! :)
jwbensley
Lupa mengatakan, ide bagus dengan opsi -x! Terima kasih!
jwbensley
1
ifdownadalah program tingkat tinggi yang melakukan banyak hal yang mungkin Anda butuhkan. ifconfig eth0 downlebih portabel dan selalu dapat dijalankan, tetapi tidak melakukan tugas pembersihan yang ifdownmungkin dilakukan.
Gilles 'SANGAT berhenti menjadi jahat'
Saya tidak bermaksud menyarankan agar Anda menggunakannya ifconfigsepanjang waktu, menghindari ifup/down. Saya menyarankan itu hanya sebagai langkah pemecahan masalah. Ketika saya memahami masalahnya, itu ternyata merupakan hasil dari penggunaan ifconfigalih-alih ifup/down, sehingga membingungkan mekanisme tingkat tinggi. Tapi, saya tidak tahu ketika saya memposting jawaban saya.
Warren Young
20

Saya pernah melihat ini sebelumnya ketika ethX tidak dikonfigurasi dengan benar /etc/network/interfaces. Ini perlu sesuatu seperti: -

auto eth0
   iface eth0 inet dhcp

Bahkan dengan /etc/network/interfacesfile yang tidak terkonfigurasi dengan benar , Anda masih dapat menghapus eth0 dengan:

$ sudo ip link set eth0 down
Alex Leach
sumber
Inilah yang terjadi pada saya. Saya lupa menambahkannya auto. Terima kasih.
Mike
2

Bagi siapa pun yang berjuang dengan masalah ini:

Saya memeriksa file ifstate. "Interface-name" di / run / network.

Itu kosong jadi saya memasukkan "interface-name" (eth0) ke ifstate. "Interface-name" file di / run / network.

pengguna9885365
sumber
1

Tambahkan eth0=eth0ke /run/network/ifstate. Ini berhasil untuk saya

Jeroen
sumber
0

Apa yang saya temukan membantu saya adalah memanggil rmperintah untuk menghapus file kunci di dalamnya/run/network/

Lakukan ls -ladan Anda akan melihat .ifstatefile tersembunyi atau sesuatu dengan nama itu.

Hapus itu dan coba: ifdown && ifup

Jika Anda khawatir Anda dapat merusak sesuatu, buatlah salinan file itu di luar direktori dan hapus satu di dalam direktori.

Hunter Lowe
sumber