วิธีที่ถูกต้องในการรีสตาร์ท udev คืออะไร?


46

ฉันได้เปลี่ยนชื่อเป็นของอินเตอร์เฟซeth1 eth0วิธีการถามudevตอนนี้อ่านการกำหนดค่าอีกครั้ง?

service udev restart

และ

udevadm control --reload-rules

ไม่ช่วย ดังนั้นมีวิธีที่ถูกต้องยกเว้นการรีบูต? (ใช่รีบูตช่วยด้วยปัญหานี้)

  • ใช่ฉันรู้ว่าฉันควรย่อหน้าคำสั่งที่มีsudoแต่คนใดคนหนึ่งผมโพสต์ดังกล่าวข้างต้นไม่มีอะไรเปลี่ยนแปลงในifconfig -aการส่งออก: ฉันยังคงเห็นไม่ได้eth1eth0

  • ฉันเพิ่งเปลี่ยนNAMEคุณสมบัติของ udev-rule line ไม่ทราบสาเหตุที่ทำให้สิ่งนี้ไม่มีประสิทธิภาพ

ไม่มีข้อผิดพลาดในการดำเนินการคำสั่งทั้งสองที่ฉันโพสต์ข้างต้น แต่พวกเขาก็ไม่เปลี่ยนชื่ออินเตอร์เฟซที่เกิดขึ้นจริงในการifconfig -aส่งออก ถ้าฉันทำการรีบูต - ดังนั้นชื่ออินเตอร์เฟสจะเปลี่ยนตามที่คาดไว้

เพื่อวัตถุประสงค์ในการพัฒนาฉันเขียนสคริปต์บางอย่างที่เลียนแบบเครื่องเสมือน (ขับเคลื่อนด้วย VirtualBox) และตั้งค่าล่วงหน้าในบางวิธี

ดังนั้นฉันจึงทำคำสั่งเพื่อโคลน VM เริ่มต้นและตราบใดที่มีการเปลี่ยนแปลงส่วนต่อประสานเครือข่าย MAC - udevเพิ่มกฎข้อที่สองในกฎถาวรของเครือข่าย ทันทีหลังจากบูตเครื่องเป็นครั้งแรกมี 2 กฎ:

  • eth0ซึ่งไม่มีอยู่ตราบใดที่มีอยู่ในอิมเมจ VM ดั้งเดิม MAC
  • eth1มีอยู่แล้ว แต่การกำหนดค่าทั้งหมดในไฟล์ทั้งหมดอ้างถึงeth0ดังนั้นจึงไม่ดีสำหรับฉัน

ดังนั้นผมจึงมีsedลบบรรทัดที่มีeth0(มันเป็นล้าสมัยและไร้ประโยชน์ในภาพโคลน) และแทนที่ด้วยeth1 eth0ดังนั้นขณะนี้ฉันมีกฎถาวรที่ถูกต้อง แต่ยังคงมีอยู่ในeth1/dev

ปัญหา: ฉันไม่ต้องการรีบูตเครื่อง (จะใช้เวลาอีกครั้งซึ่งไม่ดีในการสร้าง VM-stage) และเพียงต้องการ/devสร้างใหม่ด้วยคำสั่งบางคำสั่งดังนั้นฉันจึงพร้อมใช้งาน VM โดยไม่ต้องบูตเครื่องใหม่


คุณเปลี่ยนeth1เป็นeth0อย่างไร คุณเพิ่งเปลี่ยนชื่อไฟล์อุปกรณ์หรือไม่ หากเป็นเช่นนั้นนั่นไม่ใช่วิธีที่มีประสิทธิภาพในการดำเนินการ (และคุณควรคาดหวังว่าการเปลี่ยนแปลงจะถูกคืนค่าโดยการรีสตาร์ทudevdaemon สำเร็จ) หากคุณใช้วิธีอื่นโปรดอธิบายโดยละเอียดและโปรดให้ข้อความที่สมบูรณ์และครบถ้วนของข้อความแสดงข้อผิดพลาดที่คุณเห็นเมื่อคุณเรียกใช้คำสั่งที่คุณได้ลอง (สำหรับการรีสตาร์ทudevdaemon หรือโหลดกฎใหม่) คุณสามารถแก้ไขคำถามของคุณเพื่อให้ข้อมูลนี้
Eliah Kagan

@Eliah Kagan: อัปเดตแล้ว ป.ล. : ทำไมมันควรจะเปลี่ยนกลับ? ไม่ควร ;-)
zerkms

udev/devการสร้างแบบไดนามิกอุปกรณ์ของคุณ หากคุณรีสตาร์ทมันจะสร้างมันขึ้นมาใหม่ตามกฎของมัน การเปลี่ยนแปลงที่เกิดขึ้นโดยตรงกับพวกเขาไม่ใช่โดยทั่วไปจะพูดติดตา ดูเหมือนว่าการรีสตาร์ทudevจะทำงานได้ดี แต่คุณเพิ่งเปลี่ยนชื่ออุปกรณ์ไม่ถูกต้อง
Eliah Kagan

@Eliah Kagan: udev เพิ่ม (ไม่แก้ไข)กฎใหม่หากไม่พบกฎสำหรับอุปกรณ์เฉพาะ หากมีกฎที่ตรงกับ - เพียงแค่ปฏิบัติตามโดยไม่มีการแก้ไข
zerkms

@Eliah Kagan: และฉันเปลี่ยนมันอย่างถูกต้อง เพียงแค่เชื่อว่าฉันจะสามารถเปลี่ยนถ่านหนึ่งในสาย ;-) (ยัง helpes รีบูตและนี้พิสูจน์ให้เห็นว่าทุกอย่างจะดีกับกฎ)
zerkms

คำตอบ:


29

ฉันไม่ทราบว่าสิ่งนี้ช่วยในการโหลดการกำหนดค่าเครือข่ายใหม่หรือไม่ แต่เมื่อฉันแก้ไข/etc/udev/rules.d/70-persistent-cd.rulesเพื่อแก้ไขลิงก์อุปกรณ์ DVD จาก/dev/dvd1ไปยัง/dev/dvdฉันต้องเรียกใช้

sudo udevadm trigger

เพื่อรับลิงค์ใหม่ที่ถูกสร้างขึ้น


3
ฉันเชื่อว่าsudo udevadm trigger --action=changeปลอดภัยกว่านี้ตามอีเมลนี้เกี่ยวกับสิ่งที่ปลอดภัยและไม่ปลอดภัยที่จะทำudev: lists.ubuntu.com/archives/ubuntu-devel/2009- มกราคม/0/02272.html
Ehtesh Choudhury

แน่นอนและมันถูกเรียกว่า/etc/udev/rules.d/70-persistent-net.rules
msanford

ภายใต้ Ubuntu 15.04 udevadm triggerล็อคเซสชัน X11 ของฉันและโยนฉันกลับไปที่หน้าจอเข้าสู่ระบบของฉัน
เอียนดี. อัลเลน

20

คุณต้องรวมคำแนะนำทั้งหมดที่ให้ไว้ในลำดับที่ถูกต้อง:

  1. ทำให้เครือข่ายแย่ลง service networking stop
  2. ยกเลิกการโหลดโมดูลไดรเวอร์จากเคอร์เนล
    1. ค้นหาชื่อของโมดูลlspci -vและค้นหา "ไดรเวอร์เคอร์เนลที่ใช้งานอยู่:"
    2. modprobe -r <driver module>
  3. โหลดกฎ udev อีกครั้ง udevadm control --reload-rules
  4. ทริกเกอร์กฎใหม่ udevadm trigger
  5. โหลดไดรเวอร์ modprobe <driver module>
  6. รีสตาร์ทเครือข่าย service networking start
  7. (ทางเลือก) รันiptablesสคริปต์ใด ๆที่อ้างอิงethชื่ออินเตอร์เฟสก่อนที่จะทำงาน

ฉันสงสัยว่าขั้นตอนที่ 4 หรือขั้นตอนที่ 5 ไม่จำเป็นจริงๆ แต่ขั้นตอนเหล่านี้ใช้งานได้สำหรับฉัน คุณสามารถตรวจสอบหลังจากขั้นตอนที่ 4 กับขั้นตอนที่ 2.1 เพื่อดูว่าคำสั่งทริกเกอร์ทำตามขั้นตอนที่ 5 แล้วหรือไม่ให้แก้ไขคำตอบนี้เพื่อสะท้อนสิ่งที่คุณค้นพบถ้าคุณทำ


1
Ubuntu 15.04 พร้อมอุปกรณ์ทั้งหมดที่ระบุไว้ใน/etc/network/interfaces(ดังนั้นตัวจัดการเครือข่ายปล่อยไว้คนเดียว): สิ่งที่ฉันต้องทำคือแก้ไข/etc/udev/rules.d/70-persistent-net.rulesจากนั้นทำ # 2, # 3, # 5 ไม่จำเป็นต้องหยุดเครือข่ายทั้งหมด ไม่ต้องการสิ่งอื่นใด
เอียนดี. อัลเลน

5

ฉันมีปัญหาที่คล้ายกัน เนื่องจากฉันไม่ต้องการใช้เวลาในการรีบูตฉันจึงใช้สายการบินเดียวโดยใช้คำแนะนำของ Chris Wesseling

/etc/init.d/networking stop && modprobe -r tg3 && udevadm การควบคุม - โหลดกฎ && udevadm ทริกเกอร์ && modprobe tg3 && /etc/init.d/networking start

สิ่งนี้ใช้ได้กับฉันโดยใช้เซิร์ฟเวอร์ Ubuntu 12.04.02 nics ของฉันใช้ไดรเวอร์โมดูลเคอร์เนล tg3 ดังนั้นเปลี่ยน tg3 เป็นโมดูลที่อินเตอร์เฟสของคุณกำลังใช้งานอยู่ ฉันพบสิ่งที่ฉันใช้ใน/etc/udev/rules.d/70-persistent-net.rules:

อุปกรณ์ PCI 0x14e4: / sys / devices / pci0000: 00/0000: 00: 1c.4 / 0000: 02: 00.1 (tg3) <- ไดรเวอร์โมดูลเคอร์เนลสำหรับ nic

ปัญหาเดียวที่ฉันมีคือเส้นทางที่ไม่ดีซึ่งฉันแก้ไขด้วยคำสั่งเพิ่มเส้นทางอย่างง่าย ขอบคุณสำหรับความช่วยเหลือ Chris!



3

sudo /etc/init.d/udev restartควรทำเคล็ดลับ คำสั่งบางคำสั่งที่คุณลองใช้ถ้าทำงานด้วยsudoอาจมีประสิทธิภาพเช่นกัน


ไม่ifconfig -aยังคงแสดงeth1อินเทอร์เฟซเก่าแก่ให้ฉัน
zerkms

3

สิ่งนี้ควรทำอย่างปลอดภัย:

sudo reload udev

เนื่องจากฉันได้ใช้คำสั่งนี้โดยไม่มีปัญหา


ไม่ifconfig -aยังคงแสดงeth1อินเทอร์เฟซเก่าแก่ให้ฉัน
zerkms

1

ฉันได้ทำการค้นคว้าสิ่งนี้มาระยะหนึ่งแล้วโดยมีจุดประสงค์เดียวกันและฉันไม่สามารถหาวิธีเปลี่ยนชื่ออินเทอร์เฟซเครือข่ายในระบบสดได้

วิธีแก้ปัญหาที่ฉันได้ไปแล้วคือการลบไฟล์ /etc/udev/rules.d/70-persistent-net.rules ในเทมเพลตซึ่งหมายความว่าในการบูตครั้งถัดไปจะเห็นการ์ดเครือข่ายใด ๆ เป็น eth0


1

คุณต้องโหลดudevเพื่อทริกเกอร์การเปลี่ยนแปลงกฎ แต่อุปกรณ์จะไม่ถูกเปลี่ยนชื่อจนกว่าคุณจะยกเลิกการโหลด / โหลดโมดูลไดรเวอร์อีกครั้ง

ดังนั้นmodprobe -r e1000 && modprobe e1000หลังจากรีโหลด udev ควรทำเคล็ดลับ แน่นอนว่าอย่าทำเช่นนั้นหากคุณต้องการเครือข่ายและมีเพียงอินเตอร์เฟซ e1000 เท่านั้น


0
udevadm trigger 

มันจะทำงาน ใส่คำอธิบายลิงค์ที่นี่


1
ยินดีต้อนรับสู่ถาม Ubuntu! ในขณะที่สิ่งนี้อาจตอบคำถามในทางทฤษฎีมันก็ควรที่จะรวมส่วนที่สำคัญของคำตอบที่นี่และให้ลิงค์สำหรับการอ้างอิง
Braiam

0

ดังนั้นสำหรับฉันบน VirtualBox กับ Ubuntu 12.04 ฉันมักจะสลับระหว่างอีเธอร์เน็ตและไร้สาย

ดังนั้นเมื่อการเชื่อมต่อของฉันมีการเปลี่ยนแปลงฉันต้องเลือกอะแดปเตอร์บริดจ์จากอุปกรณ์> การตั้งค่าเครือข่าย อาจเป็น 'Intel 82579LM Gigabit Network Connection' หรือ 'Intel Centrino Ultimate-N 6300 AGN'

หลังจากทำสิ่งนี้ฉันก็สามารถวิ่งได้

sudo modprobe -r e1000
sudo service udev restart
sudo modprobe e1000
ping google.com # To test I ran this between each command.

นี่เป็นเพียงคำอธิบายผลลัพธ์ของฉันหลังจากอ่านคำตอบทั้งหมดข้างต้น

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