`
Michaelmatrix
  • 浏览: 209697 次
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论

Fedoar 15开始的新网卡命名方式

 
阅读更多
Fedora 15采用了新的网卡命名方式 Consistent Network Device Naming (CNDN)。CNDN 并不是一个多大的改动,但它所引起的争论以及带来的影响却不小,看看 NetworkWorld,LWN 以及 Slashdot 上铺天盖地的争论,质疑甚至嘲讽你就知道了。当然这并不表示 CNDN 这个新功能就完全一无是处,或者是画蛇添足。CNDN 还是有一定的益处,前提是你深入理解了作者的意图。现在让我们来仔细看看这个即将影响你日常 Linux 生活的新的网卡命名方式。
具体的命名方式之前已经介绍过,这里不再赘述,需要说明一点的是这个命名方式依赖于机器的 BIOS,如果你的机器比较旧,那么安装后的 Fedora 15 仍然会采用 ethX 的命名规则,并且新的命名规则只适用于有线网卡。
我在 4 个不同的环境中安装了 Fedora 15,得到了不同的结果。在一台 Dell 台式机上,网卡被命名为 em1;在一台稍旧的 hp 笔记本上,网卡仍然命名为 eth0;在 VirtualBox 4.0 虚拟机里,两块虚拟网卡分别被命名为 p2p1 与 p7p1;在 KVM 虚拟机里,网卡仍然被命名为 eth0。现在你是不是觉得这个命名方式应该叫 Inconsistent,而不是 Consistent。
当然任何处于过渡期的新功能都不可避免的会有这样不一致的现象,CNDN 这里的 Consistent 指的也并不是不同的硬件类型都 Consistent,而是在 BIOS 支持的机器上,网卡的命名将一致,最主要的命名规则是两条,主板内置的网卡将变成 emX,外插到 PCI 卡槽上的网卡将变成 pXpX,所有的数字都从 1 开始。
除了名字的字符串前缀与以前不一样以外(这一点你将在接下来的 Linux 生活中不断去适应,如果你习惯于使用 ifconfig, tcpdump 等命令行工具的话),更重要的是网卡的命名依据也将改变,网卡的名字不再与网卡的 MAC 地址绑定,而是依据网卡在主板上的位置。
在 CNDN 出现之前,可以说网卡的命名经历了几个阶段,不过在讲述这些命名方式之前,需要先指出的一点是 Kernel 内部对网卡的命名方式一直未变,那就是先探测到的网卡被命名为 eth0,其次是 eth1 等等,当然 Kernel 探测网卡的顺序结果也不是一成不变的,如果相关的硬件发生了变化的话,Kernel 探测的顺序结果也可能会改变,不过硬件不变(或者硬件型号不变)的情况下,探测顺序通常是不变的。
在 udev 出现之前(RHEL 4 或更早?),RedHat 系列对网卡的命名是简单的,在 /etc/modprobe.conf 文件里会有类似下面这样的配置:
alias eth0 e100
alias eth1 3c59x
...modprobe.conf 配置文件并不是对网卡的名字进行修改,而是控制 Kernel 加载网卡驱动的顺序,当然也就控制了 Kernel 探测网卡的顺序,从而变相固定了网卡的名字。你可以看出这种方法只对那些不同网卡属于不同驱动的硬件配置有效,如果一个驱动对应多块网卡,则顺序就无法这样确定了。如果 Kernel 某次启动改变了某块网卡的探测顺序,那么 RHEL 系统是否会对该网卡进行重命名,从而可以继续使用之前的网卡配置文件,我已经记不清了。
到了 RHEL 5 系列之后,udev 已经引入,此时主流的发行版都会根据网卡的 MAC 地址使用 udev 对网卡设备进行命名以确保网卡的名字不会变动。举例来说,假设一个系统有两块网卡 eth0 与 eth1,如果将两块网卡调各个,系统启动后,虽然 Kernel 内部对网卡的命名发生了改变(这里假设两块网卡由相同驱动加载),即原来的 eth0 变成了 eth1,eth1 变成了 eth0,但 /etc/udev/rules.d/60-net.rules 文件会调用 /lib/udev/rename_device 对网卡进行命名,而 rename_device 会搜索系统里的网卡配置文件 /etc/sysconfig/network-scripts/ifcfg-eth*,如果该网卡的 MAC 地址匹配到某个配置文件中的 HWADDR 项,就将网卡命名为该文件中的 DEVICE 项。此时用 ip addr 命令查看,你会发现每块网卡仍然使用与之前相同的名字,并且 IP 地址也与之前相同,只不过 ip addr 命令的输出会将 eth1列在前面,因为 eth1 在 Kernel 内部对应的名字是 eth0。
当然这样的情况并不常见,没有人会闲得蛋疼去交换两块网卡玩。常见的与网卡名字相关的情况是替换其中的某块网卡,比如将某个虚拟机映像拷到另一个虚拟机 Host 里,此时就相当于将网卡替换。在 RHEL 5 里,系统启动后,你会发现替换后的网卡名字未变,但网卡配置变成了 DHCP,原来的配置文件自动保存为 /etc/sysconfig/network-scripts/ifcfg-ethX.bak。名字未变是因为 rename_device 未找到 MAC 地址对应的配置文件,所以保留该名字与 Kernel 里的名字一致(当然这里还有一个前提是网卡的型号未变,并且 Kernel 的探测顺序也未变,大部分情况都是这样的),至于配置文件改变则是 Kudzu 造成的,Kudzu 会检测硬件,并对新添加的网卡默认生成 DHCP 配置,当然这里与网卡命名无关了。
到了 RHEL 6 后,仍然使用 udev 对网卡进行命名,所以原理上对网卡进行命名的方式未变,不过 udev 的规则有了一些改变,变成了 /etc/udev/rules.d/70-persistent-net.rules。该文件由 /lib/udev/write_net_rules 在每次启动时生成,里面的内容与如下类似:
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="52:54:00:be:19:20",
ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"也就是说不管 Kernel 启动时检测到的网卡顺序如何,udev 都会按照该文件里 MAC 地址对应的名字对网卡进行命名。如果某块网卡被替换了,那么在启动时 /lib/udev/write_net_rules 会更新该 70-persistent-net.rules 文件,更新的方式并不是将该行里的 MAC 地址修改为新网卡的 MAC 地址,而是在该文件后面附上新的一行,并生成一个新的网卡名字,此时用 ip 命令查看,你会发现网卡名字变成了 eth1。
现在我们来看看 CNDN 是怎么命名的,CNDN 的原理其实很简单,它仍然采用了 udev 的机制,只不过将 70-persistent-net.rules 文件去掉,换成了 /lib/udev/rules.d/71-biosdevname.rules 文件,71-biosdevname.rules 比起 70-persistent-net.rules 文件要稍微复杂点,但也无非就是调用 biosdevname,并根据该命令的输出对网卡进行相应的命名。biosdevname 内部则调用了 dmidecode 等 BIOS 工具来获取 PCI 号等 BIOS 信息,从而为网卡取一个有意义(但愿如此)的名字,比如 em1 表示网卡内置在主板上,p2p1 表示 PCI 第二个插槽的网卡上的第一个口,还有其它更特殊的命名方式等等。
CNDN 对于那些每天与包含 N 个网卡设备打交道的人来说是一个福音,这会减轻他们在辨别网卡名字所对应的物理网卡时的痛苦。但对于普通用户来说,即使你某天心血来潮买了个包含四块网卡的 Dell 服务器,即使你知道 em1 对应的是第一块内置网卡,你也很难从服务器的后面板上区分出哪块网卡是第一块内置网卡。
不过由于 CNDN 的命名方式不再将网卡名字与 MAC 地址绑定,那么上面所说的那种替换网卡的问题也许会得到解决,即如果将某块网卡替换,那么系统在包含新的网卡启动之后,应该不需要做任何网卡配置上的改动,就能保持与之前网卡相同的网络设置。不过目前这一点还做不到,因为 /etc/sysconfig/network-scripts/ifcfg-ethX 里的 HWADDR 选项还在。不清楚 Fedora 15 或者后继版本是否会将 HWADDR 从生成的网卡配置中去掉,或者说这种需求根本就不是一个正常的需求?
最后,如果你无法忍受这个新的憋八的命名方式,你仍然可以回退到之前的命名方式。在 Kernel 的启动参数里加上 biosdevname=0 ,系统在下次启动时会为你生成熟悉的 70-persistent-net.rules 文件,由于该文件在 /etc/udev/rules.d 下,所以优先级要比在 /lib/udev/rules.d/ 下的 71-biosdevname.rules 文件高。如果哪天你又想再回来试试该命名方式,只需将 Kernel 的 biosdevname 参数置成 1,同时不要忘了将 70-persistent-net.rules 文件删掉。

另一种将命名方式改为之前命名方式的方法:

vim /etc/default/grub
在 GRUB_CMDLINE_LINUX="rd.lvm.lv=VolGroup/LogVol01 rd.lvm.lv=VolGroup/LogVol00 rd.dm=0 LANG=zh_CN.UTF-8 KEYTABLE=us quiet rhgb rd.md=0 rd.luks=0 " 中加入biosdevname=0
变成
GRUB_CMDLINE_LINUX="rd.lvm.lv=VolGroup/LogVol01 rd.lvm.lv=VolGroup/LogVol00 rd.dm=0 LANG=zh_CN.UTF-8 KEYTABLE=us quiet rhgb rd.md=0 rd.luks=0 biosdevname=0 "

$grub2-mkconfig -o /boot/grub2/grub.cfg

$touch /etc/udev/rules.d/70-persistent-net.rules
#写入
SUBSYSTEM=="net", ACTION=="add", DRIVERS=="?*", ATTR{address}=="44:37:e6:19:46:5e", ATTR{dev_id}=="0x0", ATTR{type}=="1", KERNEL=="eth*", NAME="eth0"

$cd /etc/sysconfig/network-script/

$cp ifcfg-p3p1 ifcfg-eth0

#再把里面的DEVICE="p3p1" 改成DEVICE="eth0"
reboot机器就可以了

分享到:
评论

相关推荐

    Linux之fedoar flasher网页播放器

    Linux之fedoar flasher网页播放器

    基于SpringBoot框架的中小企业完全开源的ERP.zip

    基于springboot的java毕业&课程设计

    基于Springboot的健身信息系统.zip

    基于springboot的java毕业&课程设计

    基于vue + springboot的学生成绩管理系统.zip

    基于springboot的java毕业&课程设计

    基于卷积神经网络的语义分割

    基于卷积神经网络的语义分割卷积神经网络(Convolutional Neural Networks, CNNs 或 ConvNets)是一类深度神经网络,特别擅长处理图像相关的机器学习和深度学习任务。它们的名称来源于网络中使用了一种叫做卷积的数学运算。以下是卷积神经网络的一些关键组件和特性: 卷积层(Convolutional Layer): 卷积层是CNN的核心组件。它们通过一组可学习的滤波器(或称为卷积核、卷积器)在输入图像(或上一层的输出特征图)上滑动来工作。 滤波器和图像之间的卷积操作生成输出特征图,该特征图反映了滤波器所捕捉的局部图像特性(如边缘、角点等)。 通过使用多个滤波器,卷积层可以提取输入图像中的多种特征。 激活函数(Activation Function): 在卷积操作之后,通常会应用一个激活函数(如ReLU、Sigmoid或tanh)来增加网络的非线性。 池化层(Pooling Layer): 池化层通常位于卷积层之后,用于降低特征图的维度(空间尺寸),减少计算量和参数数量,同时保持特征的空间层次结构。 常见的池化操作包括最大池化(Max Pooling)和平均

    track-map_android-master.zip

    track-map_android-master

    dAFASFDSGSFDGFDHDFG

    dAFASFDSGSFDGFDHDFG

    毕设设计-学生宿舍管理系统 基于SpringBoot实现,界面简洁,功能完善

    毕设设计-学生宿舍管理系统 基于SpringBoot实现,界面简洁,功能完善 主要功能 ● 定位打卡、宿舍智能分配、学生信息管理、资讯管理(权限设计)等 使用 ● mysql、git、springboot ● 数据库初始化sql存储在doc文件夹下面 设计一个基于Spring Boot的学生宿舍管理系统,你需要确保系统既满足实用性,又保证界面简洁、功能完善。以下是一个基本的设计方案,包括系统的功能模块、技术栈选择和界面设计要点。 ### 功能模块 1. **用户认证模块**: - 登录/登出功能。 - 用户权限管理(如学生、宿舍管理员、系统管理员)。 2. **学生信息管理**: - 学生基本信息录入、查询、修改和删除。 - 宿舍分配与调换。 3. **宿舍楼管理**: - 宿舍楼信息维护。 - 宿舍房间信息管理。 4. **维修报修管理**: - 学生报修申请。 - 维修状态跟踪。 5. **来访登记管理**: - 来访人员登记。 - 访问记录查询。 6. **公告与通知发布**: - 发布宿舍相关公告和通知。

    课设毕设基于SSM的宝康药房销售管理系统 LW+PPT+源码可运行.zip

    课设毕设基于SSM的宝康药房销售管理系统 LW+PPT+源码可运行.zip

    python网络爬虫-入门基础学习爬虫原理.zip

    python网络爬虫-入门基础学习爬虫原理.zip

    PictureSelectDemo-master.zip

    PictureSelectDemo-master

    基于 YOLOv5 的实时摄像机馈送中识别对象-主体

    基于 YOLOv5 的实时摄像机馈送中识别对象-主体

    基于springboot的权限管理系统.zip

    基于springboot的java毕业&课程设计

    WBC白细胞数据集(300)

    该数据集大小为300张120×120地白细胞图片

    结构型设计模式(7种)

    结构型设计模式(7种)

    基于SpringBoot+SpringSecurity的RBAC管理系统.zip

    基于springboot的java毕业&课程设计

    MySQL8.4.0 LTS(mysql-test-8.4.0-linux-glibc2.17-aarch64.tar.xz)

    MySQL8.4.0 LTS(mysql-test-8.4.0-linux-glibc2.17-aarch64.tar.xz)适用于Linux Generic aarch64 glibc2.17

    GaodeMapDemo-master.zip

    GaodeMapDemo-master

    基于SSE和多核编程的电子相册设计与实现

    【作品名称】:基于SSE和多核编程的电子相册设计与实现 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:基于SSE和多核编程的电子相册设计与实现

    中国知网(cnki)爬虫及数据可视化分析设计 python毕业设计-源码+全部数据+使用文档(高分项目).zip

    中国知网(cnki)爬虫及数据可视化分析设计 python毕业设计-源码+全部数据+使用文档(高分项目).zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 【备注】 1、该项目是个人高分毕业设计项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(如软件工程、计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 中国知网(cnki)爬虫及数据可视化分析设计 python毕业设计-源码+全部数据+使用文档(高分项目).zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的。

Global site tag (gtag.js) - Google Analytics