重新啟動 udev 的正確方法是什麼?

重新啟動 udev 的正確方法是什麼?

我已將介面名稱更改eth1eth0.現在如何要求udev重新讀取配置?

service udev restart

udevadm control --reload-rules

別幫忙。那麼除了重啟還有什麼有效的方法嗎? (是的,重新啟動有助於解決此問題)

  • 是的,我知道我應該在命令前面加上sudo,但是我上面發布的任何一個都不會改變ifconfig -a輸出:我仍然看到eth1,而不是eth0

  • 我剛剛更改了NAMEudev-rule 行的屬性。不知道有什麼原因導致此方法無效。

沒有任何錯誤在執行我上面發布的兩個命令時,但它們只是不會更改ifconfig -a輸出中的實際介面名稱。如果我執行重新啟動 - 那麼介面名稱將按預期更改。

出於開發目的,我編寫了一些腳本來複製虛擬機器(VirtualBox 驅動程式)並以某種方式預先設定它們。

因此,我執行命令來克隆虛擬機,啟動它,只要網路介面 MAC 發生更改 -udev將第二條規則添加到網路持久規則中。機器第一次啟動後有兩個規則:

  • eth0,不存在,只要在原始VM鏡像MAC中就存在
  • eth1,它存在,但所有文件中的所有配置都引用eth0,所以它對我來說不太好

所以我sed刪除了該行eth0(它在克隆圖像中已過時且無用)並替換eth1eth0.所以目前我有有效的持久規則,但仍然eth1存在/dev

問題:我不想重新啟動機器(這將需要另一個時間,這在構建虛擬機階段不是一件好事),只想用/dev一些命令重建我的機器,這樣我就可以使用虛擬機了無需重新啟動。

答案1

我不知道這是否有助於重新加載網絡配置,但是當我修改/etc/udev/rules.d/70-persistent-cd.rules以更正 DVD 設備鏈接從/dev/dvd1到 時/dev/dvd,我必須運行

sudo udevadm trigger

以獲得創建的新連結。

答案2

您必須按正確的順序組合此處給出的所有建議:

  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,如果執行了,請編輯此答案以反映您的發現。

答案3

我有類似的問題。由於我不想花時間重新啟動,因此我按照 Chris Wesseling 的建議運行了單行程式。

/etc/init.d/networking stop && modprobe -r tg3 && udevadm control --reload-rules && udevadm 觸發器 && modprobe tg3 && /etc/init.d/networking start

這對我使用 Ubuntu 12.04.02 伺服器有用。我的網路卡使用的是 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) <-網路卡的核心模組驅動程式

我遇到的一個問題是一條錯誤的路線,我用一個簡單的路線添加命令修復了該問題。感謝克里斯的幫忙!

答案4

sudo /etc/init.d/udev restart應該可以解決問題。您嘗試過的一些命令如果使用 運行sudo,也可能有效。

相關內容