ไม่สามารถ 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

ตามที่ร้องขอโดย marco:

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

4
สิ่งที่/run/network/ifstateมี?
Marco

ฉันได้อัปเดตคำถามของฉันด้วยเนื้อหาของไฟล์นี้ eth0 ไม่ได้อยู่ในนั้น รวดเร็ว "Google" จะบอกฉันความหมายของไฟล์นี้ (ที่ผมไม่ได้เข้าถึงมาก่อน) ผมคิดว่าผมสามารถเห็นปัญหาที่เป็น :)
jwbensley

@Marco; นี้ได้รับการแก้ไขปัญหาของฉันแน่นอนถ้าคุณโพสต์นี้เป็นคำตอบที่ฉันสามารถทำเครื่องหมายว่าถูกต้อง :)
jwbensley

คำตอบ:


55

/run/network/ifstateตรวจสอบเนื้อหาของแฟ้ม ifupและifdownใช้ไฟล์นี้เพื่อบันทึกอินเตอร์เฟซเครือข่ายที่สามารถนำขึ้นและลง ดังนั้นifupสามารถสับสนได้ง่ายเมื่อมีการใช้เครื่องมือเครือข่ายอื่นเพื่อแสดงอินเทอร์เฟซ (เช่นifconfig)

จากผู้ชาย ifup

โปรแกรมเก็บบันทึกว่าส่วนต่อประสานเครือข่ายขึ้นหรือลง ภายใต้สถานการณ์พิเศษระเบียนเหล่านี้อาจไม่สอดคล้องกับสถานะที่แท้จริงของอินเทอร์เฟซ ตัวอย่างเช่นอินเทอร์เฟซที่ถูกนำขึ้นมาโดยใช้ ifup และ deconfigured ภายหลังโดยใช้ifconfigจะยังคงถูกบันทึกไว้ ในการแก้ไขปัญหานี้คุณสามารถใช้--forceตัวเลือกเพื่อบังคับifup หรือifdownเรียกใช้คำสั่งกำหนดค่าหรือ deconfiguration แม้จะเป็นสถานะปัจจุบันของอินเทอร์เฟซก็ตาม


8
เพื่อเพิ่มคำตอบนี้ฉันต้องเพิ่มeth0=eth0เพื่อ/run/network/ifstateให้รู้จักอินเตอร์เฟสและกำหนดค่าอย่างเหมาะสม คำตอบนี้ช่วยชี้ให้ฉันเห็นไฟล์ แต่หยุดพูดสั้น ๆ ว่าการเพิ่มนอกจากนี้ซึ่งเป็นสิ่งที่แก้ไขปัญหาที่คล้ายกันของฉัน
David Parks

1
@DavidParks คุณแน่ใจอินเตอร์เฟซที่ถูกทำเครื่องหมายเป็นautoใน/etc/network/interfaces? ควรปรากฏขึ้น/run/network/ifstateโดยไม่จำเป็นต้องแก้ไขไฟล์ด้วยตนเอง
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เป็นเชลล์สคริปต์ดังนั้นจึงง่ายต่อการดีบัก:

# sh -x `which ifup` eth0

การรันเชลล์สคริปต์ด้วยsh -xทำให้พิมพ์ทุกบรรทัดที่รันดังนั้นคุณสามารถติดตามการประมวลผลได้


คำตอบที่แตกร้าว แต่ Marco พบปัญหา ฉันลองใช้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อาจทำ
Gilles 'หยุดชั่วร้าย'

ผมไม่ได้หมายความว่าจะแนะนำให้คุณใช้ทุกครั้งที่หลีกเลี่ยงifconfig ifup/downฉันแนะนำเพียงแค่เป็นขั้นตอนการแก้ไขปัญหาเท่านั้น เมื่อฉันเข้าใจปัญหามันกลับกลายเป็นผลมาจากการใช้ifconfigแทนifup/downซึ่งจะทำให้กลไกระดับสูงสับสน แต่ฉันไม่รู้ว่าเมื่อฉันโพสต์คำตอบของฉัน
Warren Young

20

ผมเคยเห็นแบบนี้มาก่อนเมื่อ ethX /etc/network/interfacesไม่ได้กำหนดค่าอย่างเหมาะสมใน สิ่งนี้ต้องการ: -

auto eth0
   iface eth0 inet dhcp

แม้จะมี/etc/network/interfacesไฟล์ที่กำหนดค่าไม่ถูกต้องคุณยังสามารถลด eth0 ด้วย:

$ sudo ip link set eth0 down

นี่คือสิ่งที่เกิดขึ้นกับฉัน autoฉันลืมที่จะผนวกการ ขอบคุณ
Mike

2

สำหรับทุกคนที่ดิ้นรนกับปัญหานี้:

ฉันจะตรวจสอบไฟล์ ifstate "interface-name" ที่ / run / network

มันว่างเปล่าดังนั้นฉันจึงรวม "interface-name" (eth0) ไว้ใน ifstate "interface-name" ไฟล์ที่ / run / network



0

สิ่งที่ฉันพบช่วยฉันคือการเรียกrmคำสั่งเพื่อลบไฟล์ล็อคภายใน/run/network/

ทำls -laและคุณควรเห็น.ifstateไฟล์ที่ซ่อนอยู่หรือบางสิ่งบางอย่างภายใต้ชื่อนั้น

ลบออกแล้วลอง: ifdown && ifup

หากคุณกังวลคุณอาจทำสิ่งที่ผิดพลาดเพียงแค่ทำสำเนาไฟล์นั้นนอกไดเรกทอรีและลบไฟล์ที่อยู่ในไดเรกทอรีออก

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.