Cách chính xác để khởi động lại udev là gì?


46

Tôi đã thay đổi tên eth1giao diện của tôi thành eth0. Làm thế nào để hỏi udevbây giờ để đọc lại cấu hình?

service udev restart

udevadm control --reload-rules

đừng giúp. Vì vậy, có cách nào hợp lệ ngoại trừ khởi động lại? (vâng, khởi động lại giúp với vấn đề này)

  • vâng, tôi biết tôi nên trả trước các lệnh với sudo, nhưng một trong những lệnh tôi đã đăng ở trên không thay đổi gì ở ifconfig -ađầu ra: tôi vẫn thấy eth1, không phải eth0.

  • Tôi chỉ thay đổi thuộc NAMEtính của dòng quy tắc udev. Không biết bất kỳ lý do nào cho việc này là không hiệu quả.

Không có bất kỳ lỗi nào khi thực hiện cả hai lệnh tôi đã đăng ở trên, nhưng chúng không thay đổi tên giao diện thực tế trong ifconfig -ađầu ra. Nếu tôi thực hiện khởi động lại - thì tên giao diện sẽ thay đổi như mong đợi.

Đối với mục đích phát triển, tôi viết một số tập lệnh sao chép các máy ảo (được điều khiển bởi VirtualBox) và thiết lập trước chúng theo một cách nào đó.

Vì vậy, tôi thực hiện một lệnh để sao chép VM, khởi động nó và miễn là thay đổi giao diện mạng MAC - udevthêm quy tắc thứ hai vào các quy tắc liên tục của mạng. Ngay sau khi máy được khởi động lần đầu tiên, có 2 quy tắc:

  • eth0, không tồn tại, miễn là nó tồn tại trong MAC hình ảnh VM gốc
  • eth1, tồn tại, nhưng tất cả các cấu hình trong tất cả các tệp đều đề cập đến eth0, vì vậy nó không tốt cho tôi

Vì vậy, tôi sedxóa dòng với eth0(nó đã lỗi thời và vô dụng trong hình ảnh nhân bản) và thay thế eth1bằng eth0. Vì vậy, hiện tại tôi có quy tắc liên tục hợp lệ, nhưng vẫn còn eth1trong /dev.

Vấn đề: Tôi không muốn khởi động lại máy (sẽ mất một thời gian nữa, điều này không tốt khi xây dựng giai đoạn VM) và tôi chỉ muốn /devxây dựng lại với một số lệnh để tôi có sẵn VM sử dụng mà không có bất kỳ khởi động lại.


Làm thế nào bạn thay đổi eth1thành eth0? Bạn vừa đổi tên tập tin thiết bị? Nếu vậy, đó không phải là một cách hiệu quả để làm điều đó (và bạn nên mong đợi sự thay đổi sẽ được hoàn nguyên bằng cách khởi động lại thành công udevdaemon). Nếu bạn đã sử dụng một số phương pháp khác, vui lòng mô tả chi tiết và xin vui lòng cung cấp văn bản đầy đủ và chính xác của bất kỳ thông báo lỗi nào bạn thấy khi bạn chạy các lệnh bạn đã thử (để khởi động lại udevdaemon hoặc tải lại quy tắc của nó). Bạn có thể chỉnh sửa câu hỏi của bạn để cung cấp thông tin này.
Eliah Kagan

@Eliah Kagan: đã cập nhật. ps: tại sao nó phải được hoàn nguyên? Không nên ;-)
zerkms

udevtự động tạo ra các thiết bị của bạn trong /dev. Nếu bạn khởi động lại nó, nó sẽ tái tạo chúng theo quy tắc của nó. Nói chung, những thay đổi được thực hiện trực tiếp đối với họ không phải là nói chung. Có vẻ như việc khởi động lại udevđang hoạt động tốt, nhưng bạn chưa thay đổi đúng tên thiết bị.
Eliah Kagan

@Eliah Kagan: udev chỉ thêm (không sửa đổi) quy tắc mới nếu không thể tìm thấy quy tắc cho thiết bị cụ thể. Nếu có một quy tắc phù hợp - nó chỉ tuân theo nó mà không sửa đổi.
zerkms

@Eliah Kagan: và tôi đã thay đổi nó đúng cách. Chỉ cần tin rằng tôi có thể thay đổi một char trong một dòng ;-) (cũng giúp khởi động lại và điều này chứng tỏ rằng mọi thứ đều ổn với các quy tắc)
zerkms

Câu trả lời:


29

Tôi không biết điều này có giúp tải lại cấu hình mạng không, nhưng khi tôi sửa đổi /etc/udev/rules.d/70-persistent-cd.rulesđể sửa liên kết thiết bị DVD từ /dev/dvd1sang /dev/dvd, tôi phải chạy

sudo udevadm trigger

để có được các liên kết mới được tạo ra.


3
Tôi tin sudo udevadm trigger --action=changelà an toàn hơn, theo email này về những gì an toàn và không an toàn để làm về udev: list.ub Ubuntu.com/archives/ubfox-devel/2009-Janftime/027260.html
Ehtesh Choudhury

Thật vậy, và nó được gọi là/etc/udev/rules.d/70-persistent-net.rules
msanford

Trong Ubuntu 15.04 udevadm triggerđã khóa phiên X11 của tôi và ném tôi trở lại màn hình đăng nhập.
Ian D. Allen

20

Bạn phải kết hợp tất cả các lời khuyên được đưa ra ở đây theo đúng thứ tự:

  1. Hạ mạng service networking stop
  2. Dỡ bỏ mô-đun trình điều khiển từ kernel
    1. Tìm tên của mô-đun lspci -vvà tìm "Trình điều khiển hạt nhân đang sử dụng:"
    2. modprobe -r <driver module>
  3. Tải lại các quy tắc udev udevadm control --reload-rules
  4. Kích hoạt các quy tắc mới udevadm trigger
  5. Trình điều khiển tải modprobe <driver module>
  6. Khởi động lại mạng service networking start
  7. (tùy chọn) Chạy lại bất kỳ iptablestập lệnh nào tham chiếu ethtên giao diện trước khi nó lên.

Tôi nghi ngờ bước 4 hoặc bước 5 không thực sự cần thiết, nhưng những bước này có hiệu quả với tôi. Bạn có thể kiểm tra sau bước 4 với bước 2.1 để xem lệnh kích hoạt đã thực hiện bước 5 chưa, chỉnh sửa câu trả lời này để phản ánh phát hiện của bạn nếu bạn thực hiện.


1
Ubuntu 15.04 với tất cả các thiết bị được liệt kê trong /etc/network/interfaces(vì vậy Trình quản lý mạng để chúng một mình): Tất cả những gì tôi cần làm là chỉnh sửa /etc/udev/rules.d/70-persistent-net.rulessau đó thực hiện # 2, # 3, # 5. Không cần phải dừng tất cả các mạng; không cần bất cứ điều gì khác.
Ian D. Allen

5

Tôi đã có một vấn đề tương tự. Vì tôi không muốn dành thời gian để khởi động lại, tôi đã chạy một lớp lót bằng gợi ý của Chris Wesseling.

/etc/init.d/networking stop && modprobe -r tg3 && udevadm control --reload-quy tắc && udevadm kích hoạt && modprobe tg3 && /etc/init.d/networking bắt đầu

Điều này làm việc cho tôi bằng cách sử dụng máy chủ Ubuntu 12.04.02. Nics của tôi đã sử dụng trình điều khiển mô-đun hạt nhân tg3, vì vậy hãy thay đổi tg3 thành mô-đun mà giao diện của bạn đang sử dụng. Tôi tìm thấy những cái tôi sử dụng trong /etc/udev/rules.d/70-persistent-net.rules:

Thiết bị PCI 0x14e4: / sys / thiết bị / pci0000: 00/0000: 00: 1c.4 / 0000: 02: 00.1 (tg3) <-kernel trình điều khiển mô-đun cho nic

Một vấn đề tôi gặp phải là một tuyến đường xấu mà tôi đã sửa bằng lệnh thêm tuyến đơn giản. Cảm ơn sự giúp đỡ của Chris!



3

sudo /etc/init.d/udev restartnên làm thủ thuật. Một số lệnh bạn đã thử, nếu chạy cùng sudo, cũng có thể có hiệu quả.


Không, ifconfig -avẫn hiển thị cho tôi eth1giao diện cũ
zerkms

3

Điều này nên làm điều đó một cách an toàn:

sudo reload udev

Như tôi đã sử dụng lệnh này không có vấn đề.


Không, ifconfig -avẫn hiển thị cho tôi eth1giao diện cũ
zerkms

1

Tôi đã nghiên cứu điều này trong một thời gian với khá nhiều mục đích tương tự và tôi chưa thể tìm ra cách thay đổi tên giao diện mạng trong một hệ thống trực tiếp.

Cách giải quyết mà tôi đã thực hiện là xóa tệp /etc/udev/rules.d/70-persistent-net.rules trong mẫu, điều đó có nghĩa là trong lần khởi động tiếp theo, nó sẽ thấy bất kỳ card mạng nào là eth0.


1

Bạn cần tải lại udev để kích hoạt thay đổi quy tắc, nhưng thiết bị sẽ không được đổi tên trừ khi bạn dỡ / tải lại mô-đun trình điều khiển.

Vì vậy, modprobe -r e1000 && modprobe e1000sau khi tải lại udev nên làm thủ thuật. Tất nhiên, đừng làm điều đó nếu bạn cần mạng và chỉ có giao diện e1000.



0

Vì vậy, đối với tôi trên VirtualBox với Ubuntu 12.04, tôi thường chuyển đổi giữa ethernet và không dây.

Vì vậy, khi kết nối của tôi thay đổi, tôi phải chọn Bộ điều hợp cầu nối từ Thiết bị> Cài đặt mạng. Kết nối mạng 'Intel 82579LM Gigabit' hoặc 'Intel Centrino Ultimate-N 6300 AGN'.

Sau khi làm điều này, tôi có thể chạy

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

Đây chỉ là một lời giải thích về kết quả của tôi sau khi đọc tất cả các câu trả lời ở trên.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.