CentOS 7 或 RHEL 7 的網路介面名稱“eno16777736”中的 eno 是什麼意思?
在一致的網路設備命名方案下,
eno16777736
CentOS 7 或 RHEL 7 的網路介面名稱中的“eno”代表什麼?
這是可預測的網路介面設備名稱。
en
用於乙太網o
用於車載- 該數字是韌體/BIOS 提供的索引。
udev-builtin-net_id.c的原始碼中的更多詳細資訊
嗯。比起“en”和“o”,我會更關心“16777736”。
除非您不小心進入了 Google,發現自己坐在具有自定義 PCI 架構的伺服器上,否則我真的不明白 16777736 怎麼可能是一個可能的值。這可能暗示了一個更嚴重的問題。
在目前架構下,系統不能處理超過 256 條 PCI 匯流排(每條匯流排下有 32 個設備,每個設備下最多有 8 個功能)。這也稱為 Bus:Device.Function 定址。現代系統使用 Domain:Bus:Device.Function 來克服 256 匯流排限制。但無論如何,回到你的問題……
你能做一個:
ls -la /sys/class/net | grep eno16777736
如果您看到與以下內容非常相似的內容:
eno16777736 -> ../.../devices/pci0000:00/0000:00:11.0/0000:1000208:01.0/net/eno16777736
然後我建議你在Google發現你在玩他們的伺服器之前快點跑。
上面的/(0000:1000208:01.0)/是Domain:Bus:Device.Function地址,匯流排值為“1000208”,是16777736的十六進製表示。但是,“0x100”(256)應該是最大值您可以為“公共汽車”使用。
另一方面,如果“匯流排”的值低於 0x100,例如:
eno16777736 -> ../.../devices/pci0000:00/0000:00:11.0/0000:1c:01.0/net/eno16777736
然後,我認為問題與您的 Bios/Firmware 在啟動時如何向 udev(systemd) 發送資訊有關。要找出潛在原因,首先檢查 udev 返回給它的值。
通常有三個地方 udev 查詢來創建 PIN(Predictable Interface Name)
- ACPI_DSM
- SMBIOS 表$$ specifically record type “slots” [9 $$, 然後輸入 41]
- PCI IRQ 路由表
$$ in that order $$ 我們可以通過以下方式測試(1):
udevadm info --path=/sys/class/net/eno16777736 --attribute-walk | grep acpi
如果這給了您 16777736,那麼您的系統很可能不支持支持 ACPI_DSM 所需的 PCI 韌體規範 3.1
所以我們現在必須測試(2)。因此,讓我們首先檢查 SMBIOS 表中的記錄類型 41(類型 41 是最相關的):
dmidecode -t 41 | more
如果沒有顯示,或者 SMBIOS 版本低於“2.62”,則意味著 udev 將依賴 PCI IRQ 路由表來創建 PIN。
所以我們應該檢查(3)
biosdecode
密切注意您的最大插槽條目……它應該是以下形式:
Slot Entry X: ID 00:00, (slot number X| status)
如果 X 為 25,則為了論證,您的 NIC 應位於小於或等於 25 的插槽上。如果不是,udev 將繼續引用佔位符值 16777736。
在大多數情況下,您可以通過以下方式檢查網卡的插槽號:
lspci -bv | grep -i -A10 ether
在大多數情況下,在 BDF (Bus:Device.Function) 中,設備應該等於物理埠號(在將其從十六進制轉換為十進制之後)。在其他情況下(它沒有),lspci 將在執行上述 lspci 命令的輸出中的單獨一行上列出物理插槽。
因此,如果列出的物理插槽編號大於 X(我們在 PCI IRQ 路由表中找到的最大編號),我們很可能已經隔離了問題。
在這種情況下,我可以想到 5 種可能的解決方案……
- 核心黑客…用新的 PCI IRQ 路由表重建核心。看看/arch/x86/pci/irq.c
$$ This is the i-need-to-find-better-uses-of-my-time solution $$ 2. 通過創建新規則將設備映射到不同的名稱
經過:
vi /etc/udev/rules.d/70-my-net-names.rules
然後添加以下內容:
ACTION=="add", SUBSYSTEM=="net", ENV{ID_BUS}=="pci", KERNELS=="{Domain:Bus:Device.Function}", NAME="{name: i.e. eno1 or eth0}"
$$ I call this the let-us-ignore-the-problem-and-just-make-things-look-pretty solution $$ 3. 您可以將 net.ifnames=0 添加到核心引導選項以完全禁用該功能
$$ This is of course the if-it-is-broke-turn-it-off-and-cry-in-solitude solution $$(不是真正的解決方案)… 4. 如果你碰巧在執行一個虛擬機……VMWare/VirtualBox 等……打開配置文件並將“pciSlotNumber”修改為低於 X 的值。
$$ but this is a-temporary-hack-until-my-software-gets-updated solution $$ 5. 買一台新電腦。$$ and finally the if-you-can’t-beat-them-join-them solution $$